Further conservation of newlines.

Friends don't let friends end LOG() strings with newlines.

Change-Id: I5a18c766c90c4ab5f03caa6acd601d34d91beb00
diff --git a/dexopt/OptMain.cpp b/dexopt/OptMain.cpp
index a7a898d..630ca38 100644
--- a/dexopt/OptMain.cpp
+++ b/dexopt/OptMain.cpp
@@ -73,7 +73,7 @@
 
     /* make sure we're still at the start of an empty file */
     if (lseek(cacheFd, 0, SEEK_END) != 0) {
-        LOGE("DexOptZ: new cache file '%s' is not empty\n", debugFileName);
+        LOGE("DexOptZ: new cache file '%s' is not empty", debugFileName);
         goto bail;
     }
 
@@ -94,13 +94,13 @@
      * Open the zip archive, find the DEX entry.
      */
     if (dexZipPrepArchive(zipFd, debugFileName, &zippy) != 0) {
-        LOGW("DexOptZ: unable to open zip archive '%s'\n", debugFileName);
+        LOGW("DexOptZ: unable to open zip archive '%s'", debugFileName);
         goto bail;
     }
 
     zipEntry = dexZipFindEntry(&zippy, kClassesDex);
     if (zipEntry == NULL) {
-        LOGW("DexOptZ: zip archive '%s' does not include %s\n",
+        LOGW("DexOptZ: zip archive '%s' does not include %s",
             debugFileName, kClassesDex);
         goto bail;
     }
@@ -111,7 +111,7 @@
     if (dexZipGetEntryInfo(&zippy, zipEntry, NULL, &uncompLen, NULL, NULL,
             &modWhen, &crc32) != 0)
     {
-        LOGW("DexOptZ: zip archive GetEntryInfo failed on %s\n", debugFileName);
+        LOGW("DexOptZ: zip archive GetEntryInfo failed on %s", debugFileName);
         goto bail;
     }
 
@@ -123,7 +123,7 @@
      * Extract the DEX data into the cache file at the current offset.
      */
     if (dexZipExtractEntryToFile(&zippy, zipEntry, cacheFd) != 0) {
-        LOGW("DexOptZ: extraction of %s from %s failed\n",
+        LOGW("DexOptZ: extraction of %s from %s failed",
             kClassesDex, debugFileName);
         goto bail;
     }
@@ -176,7 +176,7 @@
     if (dvmPrepForDexOpt(bootClassPath, dexOptMode, verifyMode,
             dexoptFlags) != 0)
     {
-        LOGE("DexOptZ: VM init failed\n");
+        LOGE("DexOptZ: VM init failed");
         goto bail;
     }
 
@@ -186,7 +186,7 @@
     if (!dvmContinueOptimization(cacheFd, dexOffset, uncompLen, debugFileName,
             modWhen, crc32, isBootstrap))
     {
-        LOGE("Optimization failed\n");
+        LOGE("Optimization failed");
         goto bail;
     }
 
@@ -214,7 +214,7 @@
      */
     const char* bcp = getenv("BOOTCLASSPATH");
     if (bcp == NULL) {
-        LOGE("DexOptZ: BOOTCLASSPATH not set\n");
+        LOGE("DexOptZ: BOOTCLASSPATH not set");
         return -1;
     }
 
@@ -235,13 +235,13 @@
         int matchOffset = match - bcp;
         if (matchOffset > 0 && bcp[matchOffset-1] == ':')
             matchOffset--;
-        LOGV("DexOptZ: found '%s' in bootclasspath, cutting off at %d\n",
+        LOGV("DexOptZ: found '%s' in bootclasspath, cutting off at %d",
             zipName, matchOffset);
         bcpCopy = strdup(bcp);
         bcpCopy[matchOffset] = '\0';
 
         bcp = bcpCopy;
-        LOGD("DexOptZ: truncated BOOTCLASSPATH to '%s'\n", bcp);
+        LOGD("DexOptZ: truncated BOOTCLASSPATH to '%s'", bcp);
         isBootstrap = true;
     }
 
@@ -292,7 +292,7 @@
     const char* dexoptFlags;
 
     if (argc != 6) {
-        LOGE("Wrong number of args for --zip (found %d)\n", argc);
+        LOGE("Wrong number of args for --zip (found %d)", argc);
         goto bail;
     }
 
@@ -429,7 +429,7 @@
 
     if (argc < 10) {
         /* don't have all mandatory args */
-        LOGE("Not enough arguments for --dex (found %d)\n", argc);
+        LOGE("Not enough arguments for --dex (found %d)", argc);
         goto bail;
     }
 
@@ -442,7 +442,7 @@
      */
     GET_ARG(vmBuildVersion, strtol, "bad vm build");
     if (vmBuildVersion != DALVIK_VM_BUILD) {
-        LOGE("DexOpt: build rev does not match VM: %d vs %d\n",
+        LOGE("DexOpt: build rev does not match VM: %d vs %d",
             vmBuildVersion, DALVIK_VM_BUILD);
         goto bail;
     }
@@ -455,7 +455,7 @@
     GET_ARG(crc, strtoul, "bad crc");
     GET_ARG(flags, strtol, "bad flags");
 
-    LOGV("Args: fd=%d off=%ld len=%ld name='%s' mod=0x%x crc=0x%x flg=%d (argc=%d)\n",
+    LOGV("Args: fd=%d off=%ld len=%ld name='%s' mod=0x%x crc=0x%x flg=%d (argc=%d)",
         fd, offset, length, debugFileName, modWhen, crc, flags, argc);
     assert(argc > 0);
 
@@ -469,7 +469,7 @@
         bcpLen = 0;
         for (i = 0, argp = argv; i < argc; i++) {
             ++argp;
-            LOGV("DEP: '%s'\n", *argp);
+            LOGV("DEP: '%s'", *argp);
             bcpLen += strlen(*argp) + 1;
         }
 
@@ -488,7 +488,7 @@
 
         assert((int) strlen(bootClassPath) == bcpLen-1);
     }
-    LOGV("  bootclasspath is '%s'\n", bootClassPath);
+    LOGV("  bootclasspath is '%s'", bootClassPath);
 
     /* start the VM partway */
 
@@ -511,7 +511,7 @@
     }
 
     if (dvmPrepForDexOpt(bootClassPath, dexOptMode, verifyMode, flags) != 0) {
-        LOGE("VM init failed\n");
+        LOGE("VM init failed");
         goto bail;
     }
 
@@ -521,7 +521,7 @@
     if (!dvmContinueOptimization(fd, offset, length, debugFileName,
             modWhen, crc, (flags & DEXOPT_IS_BOOTSTRAP) != 0))
     {
-        LOGE("Optimization failed\n");
+        LOGE("Optimization failed");
         goto bail;
     }
 
@@ -541,13 +541,13 @@
      */
 #if 0
     if (vmStarted) {
-        LOGI("DexOpt shutting down, result=%d\n", result);
+        LOGI("DexOpt shutting down, result=%d", result);
         dvmShutdown();
     }
 #endif
 
     free(bootClassPath);
-    LOGV("DexOpt command complete (result=%d)\n", result);
+    LOGV("DexOpt command complete (result=%d)", result);
     return result;
 }
 
diff --git a/vm/AllocTracker.cpp b/vm/AllocTracker.cpp
index 34e0b3f..a9c7644 100644
--- a/vm/AllocTracker.cpp
+++ b/vm/AllocTracker.cpp
@@ -111,7 +111,7 @@
     dvmLockMutex(&gDvm.allocTrackerLock);
 
     if (gDvm.allocRecords == NULL) {
-        LOGI("Enabling alloc tracker (%d entries, %d frames --> %d bytes)\n",
+        LOGI("Enabling alloc tracker (%d entries, %d frames --> %d bytes)",
             kNumAllocRecords, kMaxAllocRecordStackDepth,
             sizeof(AllocRecord) * kNumAllocRecords);
         gDvm.allocRecordHead = gDvm.allocRecordCount = 0;
@@ -188,7 +188,7 @@
 {
     Thread* self = dvmThreadSelf();
     if (self == NULL) {
-        LOGW("alloc tracker: no thread\n");
+        LOGW("alloc tracker: no thread");
         return;
     }
 
@@ -351,7 +351,7 @@
         idx = (idx + 1) & (kNumAllocRecords-1);
     }
 
-    LOGI("class %d/%d, method %d/%d, file %d/%d\n",
+    LOGI("class %d/%d, method %d/%d, file %d/%d",
         dvmPointerSetGetCount(classNames), classCount,
         dvmPointerSetGetCount(methodNames), methodCount,
         dvmPointerSetGetCount(fileNames), fileCount);
@@ -527,7 +527,7 @@
     methodNames = dvmPointerSetAlloc(128);
     fileNames = dvmPointerSetAlloc(128);
     if (classNames == NULL || methodNames == NULL || fileNames == NULL) {
-        LOGE("Failed allocating pointer sets\n");
+        LOGE("Failed allocating pointer sets");
         goto bail;
     }
 
@@ -555,7 +555,7 @@
     totalSize += computeStringTableSize(classNames);
     totalSize += computeStringTableSize(methodNames);
     totalSize += computeStringTableSize(fileNames);
-    LOGI("Generated AT, size is %zd/%zd\n", baseSize, totalSize);
+    LOGI("Generated AT, size is %zd/%zd", baseSize, totalSize);
 
     /*
      * Part 3: allocate a buffer and generate the output.
@@ -569,7 +569,7 @@
     strPtr += outputStringTable(methodNames, strPtr);
     strPtr += outputStringTable(fileNames, strPtr);
     if (strPtr - buffer != (int)totalSize) {
-        LOGE("size mismatch (%d vs %zd)\n", strPtr - buffer, totalSize);
+        LOGE("size mismatch (%d vs %zd)", strPtr - buffer, totalSize);
         dvmAbort();
     }
     //dvmPrintHexDump(buffer, totalSize);
@@ -613,11 +613,11 @@
     int idx = headIndex();
     int count = gDvm.allocRecordCount;
 
-    LOGI("Tracked allocations, (head=%d count=%d)\n",
+    LOGI("Tracked allocations, (head=%d count=%d)",
         gDvm.allocRecordHead, count);
     while (count--) {
         AllocRecord* pRec = &gDvm.allocRecords[idx];
-        LOGI(" T=%-2d %6d %s\n",
+        LOGI(" T=%-2d %6d %s",
             pRec->threadId, pRec->size, pRec->clazz->descriptor);
 
         if (true) {
@@ -627,10 +627,10 @@
 
                 const Method* method = pRec->stackElem[i].method;
                 if (dvmIsNativeMethod(method)) {
-                    LOGI("    %s.%s (Native)\n",
+                    LOGI("    %s.%s (Native)",
                         method->clazz->descriptor, method->name);
                 } else {
-                    LOGI("    %s.%s +%d\n",
+                    LOGI("    %s.%s +%d",
                         method->clazz->descriptor, method->name,
                         pRec->stackElem[i].pc);
                 }
diff --git a/vm/AtomicCache.cpp b/vm/AtomicCache.cpp
index a6f48c2..28fcbfe 100644
--- a/vm/AtomicCache.cpp
+++ b/vm/AtomicCache.cpp
@@ -156,7 +156,7 @@
             newVersion, newVersion & ~ATOMIC_LOCK_FLAG,
             (volatile s4*) &pEntry->version) != 0)
     {
-        //LOGE("unable to reset the instanceof cache ownership\n");
+        //LOGE("unable to reset the instanceof cache ownership");
         dvmAbort();
     }
 }
diff --git a/vm/BitVector.cpp b/vm/BitVector.cpp
index 4e9a1cb..0ef6f60 100644
--- a/vm/BitVector.cpp
+++ b/vm/BitVector.cpp
@@ -104,7 +104,7 @@
 {
     if (num >= pBits->storageSize * sizeof(u4) * 8) {
         if (!pBits->expandable) {
-            LOGE("Attempt to set bit outside valid range (%d, limit is %d)\n",
+            LOGE("Attempt to set bit outside valid range (%d, limit is %d)",
                 num, pBits->storageSize * sizeof(u4) * 8);
             dvmAbort();
         }
@@ -114,7 +114,7 @@
         assert(newSize > pBits->storageSize);
         pBits->storage = (u4*)realloc(pBits->storage, newSize * sizeof(u4));
         if (pBits->storage == NULL) {
-            LOGE("BitVector expansion to %d failed\n", newSize * sizeof(u4));
+            LOGE("BitVector expansion to %d failed", newSize * sizeof(u4));
             dvmAbort();
         }
         memset(&pBits->storage[pBits->storageSize], 0x00,
@@ -206,7 +206,7 @@
 static void checkSizes(const BitVector* bv1, const BitVector* bv2)
 {
     if (bv1->storageSize != bv2->storageSize) {
-        LOGE("Mismatched vector sizes (%d, %d)\n",
+        LOGE("Mismatched vector sizes (%d, %d)",
             bv1->storageSize, bv2->storageSize);
         dvmAbort();
     }
diff --git a/vm/CheckJni.cpp b/vm/CheckJni.cpp
index 21f4ed4..0830be5 100644
--- a/vm/CheckJni.cpp
+++ b/vm/CheckJni.cpp
@@ -984,10 +984,10 @@
         // TODO: we could mprotect instead, and keep the allocation around for a while.
         // This would be even more expensive, but it might catch more errors.
         // if (mprotect(fullBuf, totalByteCount, PROT_NONE) != 0) {
-        //     LOGW("mprotect(PROT_NONE) failed: %s\n", strerror(errno));
+        //     LOGW("mprotect(PROT_NONE) failed: %s", strerror(errno));
         // }
         if (munmap(fullBuf, totalByteCount) != 0) {
-            LOGW("munmap failed: %s\n", strerror(errno));
+            LOGW("munmap failed: %s", strerror(errno));
             dvmAbort();
         }
     }
diff --git a/vm/Common.h b/vm/Common.h
index c0da832..01587b2 100644
--- a/vm/Common.h
+++ b/vm/Common.h
@@ -45,7 +45,7 @@
 #if !defined(NDEBUG) && defined(WITH_DALVIK_ASSERT)
 # undef assert
 # define assert(x) \
-    ((x) ? ((void)0) : (LOGE("ASSERT FAILED (%s:%d): %s\n", \
+    ((x) ? ((void)0) : (LOGE("ASSERT FAILED (%s:%d): %s", \
         __FILE__, __LINE__, #x), *(int*)39=39, (void)0) )
 #endif
 
diff --git a/vm/Ddm.cpp b/vm/Ddm.cpp
index 4bb2bb1..ff853e5 100644
--- a/vm/Ddm.cpp
+++ b/vm/Ddm.cpp
@@ -61,7 +61,7 @@
      */
     dataArray = dvmAllocPrimitiveArray('B', dataLen, ALLOC_DEFAULT);
     if (dataArray == NULL) {
-        LOGW("array alloc failed (%d)\n", dataLen);
+        LOGW("array alloc failed (%d)", dataLen);
         dvmClearException(self);
         goto bail;
     }
@@ -75,7 +75,7 @@
     length = get4BE((u1*)dataArray->contents + 4);
     offset = kChunkHdrLen;
     if (offset+length > (unsigned int) dataLen) {
-        LOGW("WARNING: bad chunk found (len=%u pktLen=%d)\n", length, dataLen);
+        LOGW("WARNING: bad chunk found (len=%u pktLen=%d)", length, dataLen);
         goto bail;
     }
 
@@ -86,7 +86,7 @@
     dvmCallMethod(self, gDvm.methDalvikDdmcServer_dispatch, NULL, &callRes,
         type, dataArray, offset, length);
     if (dvmCheckException(self)) {
-        LOGI("Exception thrown by dispatcher for 0x%08x\n", type);
+        LOGI("Exception thrown by dispatcher for 0x%08x", type);
         dvmLogExceptionStackTrace();
         dvmClearException(self);
         goto bail;
@@ -118,13 +118,13 @@
     offset = dvmGetFieldInt(chunk, gDvm.offDalvikDdmcChunk_offset);
     length = dvmGetFieldInt(chunk, gDvm.offDalvikDdmcChunk_length);
 
-    LOGV("DDM reply: type=0x%08x data=%p offset=%d length=%d\n",
+    LOGV("DDM reply: type=0x%08x data=%p offset=%d length=%d",
         type, replyData, offset, length);
 
     if (length == 0 || replyData == NULL)
         goto bail;
     if (offset + length > replyData->length) {
-        LOGW("WARNING: chunk off=%d len=%d exceeds reply array len %d\n",
+        LOGW("WARNING: chunk off=%d len=%d exceeds reply array len %d",
             offset, length, replyData->length);
         goto bail;
     }
@@ -132,7 +132,7 @@
     u1* reply;
     reply = (u1*) malloc(length + kChunkHdrLen);
     if (reply == NULL) {
-        LOGW("malloc %d failed\n", length+kChunkHdrLen);
+        LOGW("malloc %d failed", length+kChunkHdrLen);
         goto bail;
     }
     set4BE(reply + 0, type);
@@ -143,7 +143,7 @@
     *pReplyLen = length + kChunkHdrLen;
     result = true;
 
-    LOGV("dvmHandleDdm returning type=%.4s buf=%p len=%d\n",
+    LOGV("dvmHandleDdm returning type=%.4s buf=%p len=%d",
         (char*) reply, reply, length);
 
 bail:
@@ -164,7 +164,7 @@
     Thread* self = dvmThreadSelf();
 
     if (self->status != THREAD_RUNNING) {
-        LOGE("ERROR: DDM broadcast with thread status=%d\n", self->status);
+        LOGE("ERROR: DDM broadcast with thread status=%d", self->status);
         /* try anyway? */
     }
 
@@ -180,7 +180,7 @@
     dvmCallMethod(self, gDvm.methDalvikDdmcServer_broadcast, NULL, &unused,
         event);
     if (dvmCheckException(self)) {
-        LOGI("Exception thrown by broadcast(%d)\n", event);
+        LOGI("Exception thrown by broadcast(%d)", event);
         dvmLogExceptionStackTrace();
         dvmClearException(self);
         return;
@@ -196,7 +196,7 @@
 {
     // TODO: any init
 
-    LOGV("Broadcasting DDM connect\n");
+    LOGV("Broadcasting DDM connect");
     broadcast(CONNECTED);
 }
 
@@ -207,7 +207,7 @@
  */
 void dvmDdmDisconnected()
 {
-    LOGV("Broadcasting DDM disconnect\n");
+    LOGV("Broadcasting DDM disconnect");
     broadcast(DISCONNECTED);
 
     gDvm.ddmThreadNotification = false;
@@ -230,7 +230,7 @@
     if (enable) {
         Thread* thread;
         for (thread = gDvm.threadList; thread != NULL; thread = thread->next) {
-            //LOGW("notify %d\n", thread->threadId);
+            //LOGW("notify %d", thread->threadId);
             dvmDdmSendThreadNotification(thread, true);
         }
     }
@@ -431,7 +431,7 @@
             break;
     }
     if (thread == NULL) {
-        LOGI("dvmDdmGetStackTraceById: threadid=%d not found\n", threadId);
+        LOGI("dvmDdmGetStackTraceById: threadid=%d not found", threadId);
         dvmUnlockThreadList();
         return NULL;
     }
diff --git a/vm/Debugger.cpp b/vm/Debugger.cpp
index 56b65f7..d4c1eb0 100644
--- a/vm/Debugger.cpp
+++ b/vm/Debugger.cpp
@@ -223,7 +223,7 @@
     dvmHashTableLock(gDvm.dbgRegistry);
     if (!gDvm.debuggerConnected) {
         /* debugger has detached while we were doing stuff? */
-        LOGI("ignoring registerObject request in thread=%d\n",
+        LOGI("ignoring registerObject request in thread=%d",
             dvmThreadSelf()->threadId);
         //dvmAbort();
         goto bail;
@@ -310,7 +310,7 @@
 void dvmDbgRegisterObjectId(ObjectId id)
 {
     Object* obj = (Object*)(u4) id;
-    LOGV("+++ registering %p (%s)\n", obj, obj->clazz->descriptor);
+    LOGV("+++ registering %p (%s)", obj, obj->clazz->descriptor);
     registerObject(obj, kObjectId, true);
 }
 
@@ -378,7 +378,7 @@
 {
     assert(!gDvm.debuggerConnected);
 
-    LOGV("JDWP has attached\n");
+    LOGV("JDWP has attached");
     assert(dvmHashTableNumEntries(gDvm.dbgRegistry) == 0);
     gDvm.debuggerConnected = true;
 }
@@ -395,7 +395,7 @@
     if (gDvm.debuggerActive)
         return;
 
-    LOGI("Debugger is active\n");
+    LOGI("Debugger is active");
     dvmInitBreakpoints();
     gDvm.debuggerActive = true;
     dvmEnableAllSubMode(kSubModeDebuggerActive);
@@ -425,11 +425,11 @@
     dvmHashTableLock(gDvm.dbgRegistry);
     gDvm.debuggerConnected = false;
 
-    LOGD("Debugger has detached; object registry had %d entries\n",
+    LOGD("Debugger has detached; object registry had %d entries",
         dvmHashTableNumEntries(gDvm.dbgRegistry));
     //int i;
     //for (i = 0; i < gDvm.dbgRegistryNext; i++)
-    //    LOGVV("%4d: 0x%llx\n", i, gDvm.dbgRegistryTable[i]);
+    //    LOGVV("%4d: 0x%llx", i, gDvm.dbgRegistryTable[i]);
 
     dvmHashTableClear(gDvm.dbgRegistry);
     dvmHashTableUnlock(gDvm.dbgRegistry);
@@ -489,7 +489,7 @@
 {
     // TODO? invoke System.exit() to perform exit processing; ends up
     // in System.exitInternal(), which can call JNI exit hook
-    LOGI("GC lifetime allocation: %d bytes\n", gDvm.allocProf.allocCount);
+    LOGI("GC lifetime allocation: %d bytes", gDvm.allocProf.allocCount);
     if (CALC_CACHE_STATS) {
         dvmDumpAtomicCacheStats(gDvm.instanceofCache);
         dvmDumpBootClassPath();
@@ -587,7 +587,7 @@
         (RefTypeId*)malloc(sizeof(RefTypeId) * *pNumClasses);
 
     if (dvmHashForeach(gDvm.loadedClasses, copyRefType, &pRefType) != 0) {
-        LOGW("Warning: problem getting class list\n");
+        LOGW("Warning: problem getting class list");
         /* not really expecting this to happen */
     } else {
         assert(pRefType - *pClassRefBuf == (int) *pNumClasses);
@@ -612,7 +612,7 @@
     classLoader = objectIdToObject(classLoaderId);
     // I don't think classLoader can be NULL, but the spec doesn't say
 
-    LOGVV("GetVisibleList: comparing to %p\n", classLoader);
+    LOGVV("GetVisibleList: comparing to %p", classLoader);
 
     dvmHashTableLock(gDvm.loadedClasses);
 
@@ -632,7 +632,7 @@
         if (clazz->classLoader == classLoader ||
             dvmLoaderInInitiatingList(clazz, classLoader))
         {
-            LOGVV("  match '%s'\n", clazz->descriptor);
+            LOGVV("  match '%s'", clazz->descriptor);
             (*pClassRefBuf)[numClasses++] = classObjectToRefTypeId(clazz);
         }
     }
@@ -794,7 +794,7 @@
     case JT_CLASS_LOADER:
         return false;
     default:
-        LOGE("ERROR: unhandled tag '%c'\n", tag);
+        LOGE("ERROR: unhandled tag '%c'", tag);
         assert(false);
         return false;
     }
@@ -889,7 +889,7 @@
     case JT_LONG:
         return 8;
     default:
-        LOGE("ERROR: unhandled tag '%c'\n", tag);
+        LOGE("ERROR: unhandled tag '%c'", tag);
         assert(false);
         return -1;
     }
@@ -996,7 +996,7 @@
     assert(dvmIsArray(arrayObj));
 
     if (firstIndex + count > (int)arrayObj->length) {
-        LOGW("Request for index=%d + count=%d excceds length=%d\n",
+        LOGW("Request for index=%d + count=%d excceds length=%d",
             firstIndex, count, arrayObj->length);
         return false;
     }
@@ -1017,7 +1017,7 @@
         pObjects = (Object**) data;
         pObjects += firstIndex;
 
-        LOGV("    --> copying %d object IDs\n", count);
+        LOGV("    --> copying %d object IDs", count);
         //assert(tag == JT_OBJECT);     // could be object or "refined" type
 
         for (i = 0; i < count; i++, pObjects++) {
@@ -1047,7 +1047,7 @@
     assert(dvmIsArray(arrayObj));
 
     if (firstIndex + count > (int)arrayObj->length) {
-        LOGW("Attempt to set index=%d + count=%d excceds length=%d\n",
+        LOGW("Attempt to set index=%d + count=%d excceds length=%d",
             firstIndex, count, arrayObj->length);
         return false;
     }
@@ -1057,7 +1057,7 @@
     if (isTagPrimitive(tag)) {
         int width = dvmDbgGetTagWidth(tag);
 
-        LOGV("    --> setting %d '%c' width=%d\n", count, tag, width);
+        LOGV("    --> setting %d '%c' width=%d", count, tag, width);
 
         copyValuesFromBE(data + firstIndex*width, buf, count, width);
     } else {
@@ -1360,7 +1360,7 @@
     else if (slot == 0)                 // always remap slot 0
         newSlot = kSlot0Sub;
 
-    LOGV("untweak: %d to %d\n", slot, newSlot);
+    LOGV("untweak: %d to %d", slot, newSlot);
     return newSlot;
 }
 
@@ -1379,7 +1379,7 @@
         newSlot = method->registersSize - method->insSize;
     }
 
-    LOGV("untweak: %d to %d\n", slot, newSlot);
+    LOGV("untweak: %d to %d", slot, newSlot);
     return newSlot;
 }
 
@@ -1391,7 +1391,7 @@
 
     reg = (u2) tweakSlot(reg, name);
 
-    LOGV("    %2d: %d(%d) '%s' '%s' slot=%d\n",
+    LOGV("    %2d: %d(%d) '%s' '%s' slot=%d",
         pContext->numItems, startAddress, endAddress - startAddress,
         name, descriptor, reg);
 
@@ -1477,11 +1477,11 @@
         tag = tagFromObject(objVal);
         expandBufAdd1(pReply, tag);
         expandBufAddObjectId(pReply, objectToObjectId(objVal));
-        LOGV("    --> ifieldId %x --> tag '%c' %p\n", fieldId, tag, objVal);
+        LOGV("    --> ifieldId %x --> tag '%c' %p", fieldId, tag, objVal);
     } else {
         JValue value;
 
-        LOGV("    --> ifieldId %x --> tag '%c'\n", fieldId, tag);
+        LOGV("    --> ifieldId %x --> tag '%c'", fieldId, tag);
         expandBufAdd1(pReply, tag);
 
         switch (tag) {
@@ -1512,7 +1512,7 @@
             expandBufAdd8BE(pReply, value.j);
             break;
         default:
-            LOGE("ERROR: unhandled field type '%s'\n", ifield->signature);
+            LOGE("ERROR: unhandled field type '%s'", ifield->signature);
             assert(false);
             break;
         }
@@ -1559,7 +1559,7 @@
         dvmSetFieldLong(obj, field->byteOffset, value);
         break;
     default:
-        LOGE("ERROR: unhandled class type '%s'\n", field->signature);
+        LOGE("ERROR: unhandled class type '%s'", field->signature);
         assert(false);
         break;
     }
@@ -1581,11 +1581,11 @@
         tag = tagFromObject(objVal);
         expandBufAdd1(pReply, tag);
         expandBufAddObjectId(pReply, objectToObjectId(objVal));
-        LOGV("    --> sfieldId %x --> tag '%c' %p\n", fieldId, tag, objVal);
+        LOGV("    --> sfieldId %x --> tag '%c' %p", fieldId, tag, objVal);
     } else {
         JValue value;
 
-        LOGV("    --> sfieldId %x --> tag '%c'\n", fieldId, tag);
+        LOGV("    --> sfieldId %x --> tag '%c'", fieldId, tag);
         expandBufAdd1(pReply, tag);
 
         switch (tag) {
@@ -1616,7 +1616,7 @@
             expandBufAdd8BE(pReply, value.j);
             break;
         default:
-            LOGE("ERROR: unhandled field type '%s'\n", sfield->signature);
+            LOGE("ERROR: unhandled field type '%s'", sfield->signature);
             assert(false);
             break;
         }
@@ -1675,7 +1675,7 @@
         dvmSetStaticFieldDouble(sfield, value.d);
         break;
     default:
-        LOGE("ERROR: unhandled class type '%s'\n", sfield->signature);
+        LOGE("ERROR: unhandled class type '%s'", sfield->signature);
         assert(false);
         break;
     }
@@ -2167,7 +2167,7 @@
     thread = threadObjToThread(threadObj);
     if (thread == NULL) {
         /* can happen if our ThreadDeath notify crosses in the mail */
-        LOGW("WARNING: threadid=%llx obj=%p no match\n", threadId, threadObj);
+        LOGW("WARNING: threadid=%llx obj=%p no match", threadId, threadObj);
     } else {
         dvmSuspendThread(thread);
     }
@@ -2187,7 +2187,7 @@
 
     thread = threadObjToThread(threadObj);
     if (thread == NULL) {
-        LOGW("WARNING: threadid=%llx obj=%p no match\n", threadId, threadObj);
+        LOGW("WARNING: threadid=%llx obj=%p no match", threadId, threadObj);
     } else {
         dvmResumeThread(thread);
     }
@@ -2219,8 +2219,8 @@
         return NULL;
     }
 
-    LOGVV("  Pulling this object for frame at %p\n", framePtr);
-    LOGVV("    Method='%s' native=%d static=%d this=%p\n",
+    LOGVV("  Pulling this object for frame at %p", framePtr);
+    LOGVV("    Method='%s' native=%d static=%d this=%p",
         method->name, dvmIsNativeMethod(method),
         dvmIsStaticMethod(method), (Object*) framePtr[argOffset]);
 
@@ -2234,7 +2234,7 @@
         thisObj = (Object*) framePtr[argOffset];
 
     if (thisObj != NULL && !dvmIsValidObject(thisObj)) {
-        LOGW("Debugger: invalid 'this' pointer %p in %s.%s; returning NULL\n",
+        LOGW("Debugger: invalid 'this' pointer %p in %s.%s; returning NULL",
             framePtr, method->clazz->descriptor, method->name);
         thisObj = NULL;
     }
@@ -2307,7 +2307,7 @@
             /* convert to "ObjectId" */
             objVal = (Object*)framePtr[slot];
             if (objVal != NULL && !dvmIsValidObject(objVal)) {
-                LOGW("JDWP: slot %d expected to hold array, %p invalid\n",
+                LOGW("JDWP: slot %d expected to hold array, %p invalid",
                     slot, objVal);
                 dvmAbort();         // DEBUG: make it obvious
                 objVal = NULL;
@@ -2323,7 +2323,7 @@
             objVal = (Object*)framePtr[slot];
 
             if (objVal != NULL && !dvmIsValidObject(objVal)) {
-                LOGW("JDWP: slot %d expected to hold object, %p invalid\n",
+                LOGW("JDWP: slot %d expected to hold object, %p invalid",
                     slot, objVal);
                 dvmAbort();         // DEBUG: make it obvious
                 objVal = NULL;
@@ -2339,7 +2339,7 @@
         set8BE(buf+1, longVal);
         break;
     default:
-        LOGE("ERROR: unhandled tag '%c'\n", tag);
+        LOGE("ERROR: unhandled tag '%c'", tag);
         assert(false);
         break;
     }
@@ -2400,7 +2400,7 @@
     case JT_CLASS_LOADER:
         /* not expecting these from debugger; fall through to failure */
     default:
-        LOGE("ERROR: unhandled tag '%c'\n", tag);
+        LOGE("ERROR: unhandled tag '%c'", tag);
         assert(false);
         break;
     }
@@ -2589,11 +2589,11 @@
     thread = threadObjToThread(threadObj);
 
     if (thread == NULL) {
-        LOGE("Thread for single-step not found\n");
+        LOGE("Thread for single-step not found");
         goto bail;
     }
     if (!dvmIsSuspended(thread)) {
-        LOGE("Thread for single-step not suspended\n");
+        LOGE("Thread for single-step not suspended");
         assert(!"non-susp step");      // I want to know if this can happen
         goto bail;
     }
@@ -2697,14 +2697,14 @@
     Thread* self = dvmThreadSelf();
     ThreadStatus oldStatus = dvmChangeStatus(self, THREAD_VMWAIT);
 
-    LOGV("    Transferring control to event thread\n");
+    LOGV("    Transferring control to event thread");
     dvmLockMutex(&targetThread->invokeReq.lock);
 
     if ((options & INVOKE_SINGLE_THREADED) == 0) {
-        LOGV("      Resuming all threads\n");
+        LOGV("      Resuming all threads");
         dvmResumeAllThreads(SUSPEND_FOR_DEBUG_EVENT);
     } else {
-        LOGV("      Resuming event thread only\n");
+        LOGV("      Resuming event thread only");
         dvmResumeThread(targetThread);
     }
 
@@ -2716,7 +2716,7 @@
                           &targetThread->invokeReq.lock);
     }
     dvmUnlockMutex(&targetThread->invokeReq.lock);
-    LOGV("    Control has returned from event thread\n");
+    LOGV("    Control has returned from event thread");
 
     /* wait for thread to re-suspend itself */
     dvmWaitForSuspend(targetThread);
@@ -2734,9 +2734,9 @@
      * so we want to resume the target thread once to keep the books straight.
      */
     if ((options & INVOKE_SINGLE_THREADED) == 0) {
-        LOGV("      Suspending all threads\n");
+        LOGV("      Suspending all threads");
         dvmSuspendAllThreads(SUSPEND_FOR_DEBUG_EVENT);
-        LOGV("      Resuming event thread to balance the count\n");
+        LOGV("      Resuming event thread to balance the count");
         dvmResumeThread(targetThread);
     }
 
@@ -2805,7 +2805,7 @@
 
     IF_LOGV() {
         char* desc = dexProtoCopyMethodDescriptor(&meth->prototype);
-        LOGV("JDWP invoking method %p/%p %s.%s:%s\n",
+        LOGV("JDWP invoking method %p/%p %s.%s:%s",
             pReq->method, meth, meth->clazz->descriptor, meth->name, desc);
         free(desc);
     }
@@ -2816,7 +2816,7 @@
     pReq->resultTag = getReturnTypeBasicTag(meth);
     if (pReq->exceptObj != 0) {
         Object* exc = dvmGetException(self);
-        LOGD("  JDWP invocation returning with exceptObj=%p (%s)\n",
+        LOGD("  JDWP invocation returning with exceptObj=%p (%s)",
             exc, exc->clazz->descriptor);
         //dvmLogExceptionStackTrace();
         dvmClearException(self);
@@ -2829,7 +2829,7 @@
         /* if no exception thrown, examine object result more closely */
         u1 newTag = tagFromObject((Object*)pReq->resultValue.l);
         if (newTag != pReq->resultTag) {
-            LOGVV("  JDWP promoted result from %d to %d\n",
+            LOGVV("  JDWP promoted result from %d to %d",
                 pReq->resultTag, newTag);
             pReq->resultTag = newTag;
         }
@@ -2971,7 +2971,7 @@
 void dvmDbgDdmSendChunkV(int type, const struct iovec* iov, int iovcnt)
 {
     if (gDvm.jdwpState == NULL) {
-        LOGV("Debugger thread not active, ignoring DDM send (t=0x%08x)\n",
+        LOGV("Debugger thread not active, ignoring DDM send (t=0x%08x)",
             type);
         return;
     }
diff --git a/vm/DvmDex.cpp b/vm/DvmDex.cpp
index c5790e5..aa78c7a 100644
--- a/vm/DvmDex.cpp
+++ b/vm/DvmDex.cpp
@@ -69,7 +69,7 @@
     pDvmDex->pResFields = (struct Field**)
         calloc(fieldCount, sizeof(struct Field*));
 
-    LOGV("+++ DEX %p: allocateAux %d+%d+%d+%d * 4 = %d bytes\n",
+    LOGV("+++ DEX %p: allocateAux %d+%d+%d+%d * 4 = %d bytes",
         pDvmDex, stringCount, classCount, methodCount, fieldCount,
         (stringCount + classCount + methodCount + fieldCount) * 4);
 
@@ -81,7 +81,7 @@
         pDvmDex->pResFields == NULL ||
         pDvmDex->pInterfaceCache == NULL)
     {
-        LOGE("Alloc failure in allocateAuxStructures\n");
+        LOGE("Alloc failure in allocateAuxStructures");
         free(pDvmDex->pResStrings);
         free(pDvmDex->pResClasses);
         free(pDvmDex->pResMethods);
@@ -112,18 +112,18 @@
         parseFlags |= kDexParseVerifyChecksum;
 
     if (lseek(fd, 0, SEEK_SET) < 0) {
-        LOGE("lseek rewind failed\n");
+        LOGE("lseek rewind failed");
         goto bail;
     }
 
     if (sysMapFileInShmemWritableReadOnly(fd, &memMap) != 0) {
-        LOGE("Unable to map file\n");
+        LOGE("Unable to map file");
         goto bail;
     }
 
     pDexFile = dexFileParse((u1*)memMap.addr, memMap.length, parseFlags);
     if (pDexFile == NULL) {
-        LOGE("DEX parse failed\n");
+        LOGE("DEX parse failed");
         sysReleaseShmem(&memMap);
         goto bail;
     }
@@ -167,7 +167,7 @@
 
     pDexFile = dexFileParse((u1*)addr, len, parseFlags);
     if (pDexFile == NULL) {
-        LOGE("DEX parse failed\n");
+        LOGE("DEX parse failed");
         goto bail;
     }
     pDvmDex = allocateAuxStructures(pDexFile);
@@ -196,7 +196,7 @@
 
     dexFileFree(pDvmDex->pDexFile);
 
-    LOGV("+++ DEX %p: freeing aux structs\n", pDvmDex);
+    LOGV("+++ DEX %p: freeing aux structs", pDvmDex);
     free(pDvmDex->pResStrings);
     free(pDvmDex->pResClasses);
     free(pDvmDex->pResMethods);
@@ -232,7 +232,7 @@
 bool dvmDexChangeDex1(DvmDex* pDvmDex, u1* addr, u1 newVal)
 {
     if (*addr == newVal) {
-        LOGV("+++ byte at %p is already 0x%02x\n", addr, newVal);
+        LOGV("+++ byte at %p is already 0x%02x", addr, newVal);
         return true;
     }
 
@@ -242,16 +242,16 @@
      */
     dvmLockMutex(&pDvmDex->modLock);
 
-    LOGV("+++ change byte at %p from 0x%02x to 0x%02x\n", addr, *addr, newVal);
+    LOGV("+++ change byte at %p from 0x%02x to 0x%02x", addr, *addr, newVal);
     if (sysChangeMapAccess(addr, 1, true, &pDvmDex->memMap) != 0) {
-        LOGD("NOTE: DEX page access change (->RW) failed\n");
+        LOGD("NOTE: DEX page access change (->RW) failed");
         /* expected on files mounted from FAT; keep going (may crash) */
     }
 
     *addr = newVal;
 
     if (sysChangeMapAccess(addr, 1, false, &pDvmDex->memMap) != 0) {
-        LOGD("NOTE: DEX page access change (->RO) failed\n");
+        LOGD("NOTE: DEX page access change (->RO) failed");
         /* expected on files mounted from FAT; keep going */
     }
 
@@ -269,7 +269,7 @@
 bool dvmDexChangeDex2(DvmDex* pDvmDex, u2* addr, u2 newVal)
 {
     if (*addr == newVal) {
-        LOGV("+++ value at %p is already 0x%04x\n", addr, newVal);
+        LOGV("+++ value at %p is already 0x%04x", addr, newVal);
         return true;
     }
 
@@ -279,16 +279,16 @@
      */
     dvmLockMutex(&pDvmDex->modLock);
 
-    LOGV("+++ change 2byte at %p from 0x%04x to 0x%04x\n", addr, *addr, newVal);
+    LOGV("+++ change 2byte at %p from 0x%04x to 0x%04x", addr, *addr, newVal);
     if (sysChangeMapAccess(addr, 2, true, &pDvmDex->memMap) != 0) {
-        LOGD("NOTE: DEX page access change (->RW) failed\n");
+        LOGD("NOTE: DEX page access change (->RW) failed");
         /* expected on files mounted from FAT; keep going (may crash) */
     }
 
     *addr = newVal;
 
     if (sysChangeMapAccess(addr, 2, false, &pDvmDex->memMap) != 0) {
-        LOGD("NOTE: DEX page access change (->RO) failed\n");
+        LOGD("NOTE: DEX page access change (->RO) failed");
         /* expected on files mounted from FAT; keep going */
     }
 
diff --git a/vm/Exception.cpp b/vm/Exception.cpp
index 30796c2..4f5cba2 100644
--- a/vm/Exception.cpp
+++ b/vm/Exception.cpp
@@ -120,13 +120,13 @@
          * early on in VM initialization. There's nothing better to do
          * than just log the message as an error and abort.
          */
-        LOGE("Fatal error: %s\n", msg);
+        LOGE("Fatal error: %s", msg);
         dvmAbort();
     }
 
     /* make sure the exception is initialized */
     if (!dvmIsClassInitialized(excepClass) && !dvmInitClass(excepClass)) {
-        LOGE("ERROR: unable to initialize exception class '%s'\n",
+        LOGE("ERROR: unable to initialize exception class '%s'",
             excepClass->descriptor);
         if (strcmp(excepClass->descriptor, "Ljava/lang/InternalError;") == 0)
             dvmAbort();
@@ -147,7 +147,7 @@
          */
         if (dvmCheckException(self))
             goto bail;
-        LOGE("FATAL: unable to allocate exception '%s' '%s'\n",
+        LOGE("FATAL: unable to allocate exception '%s' '%s'",
             excepClass->descriptor, msg != NULL ? msg : "(no msg)");
         dvmAbort();
     }
@@ -157,7 +157,7 @@
      */
     if (gDvm.optimizing) {
         /* need the exception object, but can't invoke interpreted code */
-        LOGV("Skipping init of exception %s '%s'\n",
+        LOGV("Skipping init of exception %s '%s'",
             excepClass->descriptor, msg);
     } else {
         assert(excepClass == exception->clazz);
@@ -278,7 +278,7 @@
 
     if (cause != NULL) {
         if (!dvmInstanceof(cause->clazz, gDvm.exThrowable)) {
-            LOGE("Tried to init exception with cause '%s'\n",
+            LOGE("Tried to init exception with cause '%s'",
                 cause->clazz->descriptor);
             dvmAbort();
         }
@@ -382,11 +382,11 @@
     JValue unused;
     switch (initKind) {
     case kInitNoarg:
-        LOGVV("+++ exc noarg (ic=%d)\n", needInitCause);
+        LOGVV("+++ exc noarg (ic=%d)", needInitCause);
         dvmCallMethod(self, initMethod, exception, &unused);
         break;
     case kInitMsg:
-        LOGVV("+++ exc msg (ic=%d)\n", needInitCause);
+        LOGVV("+++ exc msg (ic=%d)", needInitCause);
         dvmCallMethod(self, initMethod, exception, &unused, msgStr);
         break;
     case kInitThrow:
@@ -409,7 +409,7 @@
      * return an error and let our caller deal with it.
      */
     if (self->exception != NULL) {
-        LOGW("Exception thrown (%s) while throwing internal exception (%s)\n",
+        LOGW("Exception thrown (%s) while throwing internal exception (%s)",
             self->exception->clazz->descriptor, exception->clazz->descriptor);
         goto bail;
     }
@@ -436,7 +436,7 @@
                 goto bail;
             }
         } else {
-            LOGW("WARNING: couldn't find initCause in '%s'\n",
+            LOGW("WARNING: couldn't find initCause in '%s'",
                 excepClass->descriptor);
         }
     }
@@ -539,7 +539,7 @@
 Object* dvmGetExceptionCause(const Object* exception)
 {
     if (!dvmInstanceof(exception->clazz, gDvm.exThrowable)) {
-        LOGE("Tried to get cause from object of type '%s'\n",
+        LOGE("Tried to get cause from object of type '%s'",
             exception->clazz->descriptor);
         dvmAbort();
     }
@@ -579,12 +579,12 @@
         JValue unused;
         dvmCallMethod(self, printMethod, exception, &unused);
     } else {
-        LOGW("WARNING: could not find printStackTrace in %s\n",
+        LOGW("WARNING: could not find printStackTrace in %s",
             exception->clazz->descriptor);
     }
 
     if (self->exception != NULL) {
-        LOGW("NOTE: exception thrown while printing stack trace: %s\n",
+        LOGW("NOTE: exception thrown while printing stack trace: %s",
             self->exception->clazz->descriptor);
     }
 
@@ -607,7 +607,7 @@
     assert(!dvmCheckException(self));
     assert(!dvmIsNativeMethod(method));
 
-    LOGVV("findCatchInMethod %s.%s excep=%s depth=%d\n",
+    LOGVV("findCatchInMethod %s.%s excep=%s depth=%d",
         method->clazz->descriptor, method->name, excepClass->descriptor,
         dvmComputeExactFrameDepth(self->interpSave.curFrame));
 
@@ -625,7 +625,7 @@
 
             if (handler->typeIdx == kDexNoIndex) {
                 /* catch-all */
-                LOGV("Match on catch-all block at 0x%02x in %s.%s for %s\n",
+                LOGV("Match on catch-all block at 0x%02x in %s.%s for %s",
                         relPc, method->clazz->descriptor,
                         method->name, excepClass->descriptor);
                 return handler->address;
@@ -681,11 +681,11 @@
                 }
             }
 
-            //LOGD("ADDR MATCH, check %s instanceof %s\n",
+            //LOGD("ADDR MATCH, check %s instanceof %s",
             //    excepClass->descriptor, pEntry->excepClass->descriptor);
 
             if (dvmInstanceof(excepClass, throwable)) {
-                LOGV("Match on catch block at 0x%02x in %s.%s for %s\n",
+                LOGV("Match on catch block at 0x%02x in %s.%s for %s",
                         relPc, method->clazz->descriptor,
                         method->name, excepClass->descriptor);
                 return handler->address;
@@ -693,7 +693,7 @@
         }
     }
 
-    LOGV("No matching catch block at 0x%02x in %s for %s\n",
+    LOGV("No matching catch block at 0x%02x in %s for %s",
         relPc, method->name, excepClass->descriptor);
     return -1;
 }
@@ -853,7 +853,7 @@
             break;
         if (!dvmInstanceof(method->clazz, gDvm.exThrowable))
             break;
-        //LOGD("EXCEP: ignoring %s.%s\n",
+        //LOGD("EXCEP: ignoring %s.%s",
         //         method->clazz->descriptor, method->name);
         fp = saveArea->prevFrame;
     }
@@ -872,7 +872,7 @@
         assert(fp != saveArea->prevFrame);
         fp = saveArea->prevFrame;
     }
-    //LOGD("EXCEP: stack depth is %d\n", stackDepth);
+    //LOGD("EXCEP: stack depth is %d", stackDepth);
 
     if (!stackDepth)
         goto bail;
@@ -908,7 +908,7 @@
         const Method* method = saveArea->method;
 
         if (!dvmIsBreakFrame((u4*)fp)) {
-            //LOGD("EXCEP keeping %s.%s\n", method->clazz->descriptor,
+            //LOGD("EXCEP keeping %s.%s", method->clazz->descriptor,
             //         method->name);
 
             *intPtr++ = (int) method;
@@ -1075,9 +1075,9 @@
         dotName = dvmHumanReadableDescriptor(meth->clazz->descriptor);
 
         if (dvmIsNativeMethod(meth)) {
-            LOGI("\tat %s.%s(Native Method)\n", dotName, meth->name);
+            LOGI("\tat %s.%s(Native Method)", dotName, meth->name);
         } else {
-            LOGI("\tat %s.%s(%s:%d)\n",
+            LOGI("\tat %s.%s(%s:%d)",
                 dotName, meth->name, dvmGetMethodSourceFile(meth),
                 dvmLineNumFromPC(meth, pc));
         }
@@ -1128,12 +1128,12 @@
 
         dvmChangeStatus(self, oldStatus);
     } else {
-        LOGW("WARNING: could not find getMessage in %s\n",
+        LOGW("WARNING: could not find getMessage in %s",
             exception->clazz->descriptor);
     }
 
     if (dvmGetException(self) != NULL) {
-        LOGW("NOTE: exception thrown while retrieving exception message: %s\n",
+        LOGW("NOTE: exception thrown while retrieving exception message: %s",
             dvmGetException(self)->clazz->descriptor);
         /* will be overwritten below */
     }
@@ -1163,10 +1163,10 @@
         dvmReleaseTrackedAlloc((Object*) messageStr, dvmThreadSelf());
         messageStr = NULL;
 
-        LOGI("%s: %s\n", className, cp);
+        LOGI("%s: %s", className, cp);
         free(cp);
     } else {
-        LOGI("%s:\n", className);
+        LOGI("%s:", className);
     }
     free(className);
 
@@ -1179,7 +1179,7 @@
     stackData = (const ArrayObject*) dvmGetFieldObject(exception,
                     gDvm.offJavaLangThrowable_stackState);
     if (stackData == NULL) {
-        LOGI("  (raw stack trace not found)\n");
+        LOGI("  (raw stack trace not found)");
         return;
     }
 
@@ -1201,7 +1201,7 @@
     Object* cause;
 
     if (exception == NULL) {
-        LOGW("tried to log a null exception?\n");
+        LOGW("tried to log a null exception?");
         return;
     }
 
@@ -1211,7 +1211,7 @@
         if (cause == NULL) {
             break;
         }
-        LOGI("Caused by:\n");
+        LOGI("Caused by:");
         exception = cause;
     }
 }
@@ -1330,7 +1330,7 @@
          * anything fancier, we just abort here with a blatant
          * message.
          */
-        LOGE("Fatal error during early class initialization:\n");
+        LOGE("Fatal error during early class initialization:");
         dvmLogExceptionStackTrace();
         dvmAbort();
     }
diff --git a/vm/Hash.cpp b/vm/Hash.cpp
index 7bdd92f..39d9d86 100644
--- a/vm/Hash.cpp
+++ b/vm/Hash.cpp
@@ -136,7 +136,7 @@
     int i;
 
     assert(countTombStones(pHashTable) == pHashTable->numDeadEntries);
-    //LOGI("before: dead=%d\n", pHashTable->numDeadEntries);
+    //LOGI("before: dead=%d", pHashTable->numDeadEntries);
 
     pNewEntries = (HashEntry*) calloc(newSize, sizeof(HashEntry));
     if (pNewEntries == NULL)
@@ -192,7 +192,7 @@
             (*cmpFunc)(pEntry->data, item) == 0)
         {
             /* match */
-            //LOGD("+++ match on entry %d\n", pEntry - pHashTable->pEntries);
+            //LOGD("+++ match on entry %d", pEntry - pHashTable->pEntries);
             break;
         }
 
@@ -203,7 +203,7 @@
             pEntry = pHashTable->pEntries;
         }
 
-        //LOGI("+++ look probing %d...\n", pEntry - pHashTable->pEntries);
+        //LOGI("+++ look probing %d...", pEntry - pHashTable->pEntries);
     }
 
     if (pEntry->data == NULL) {
@@ -220,12 +220,12 @@
             {
                 if (!resizeHash(pHashTable, pHashTable->tableSize * 2)) {
                     /* don't really have a way to indicate failure */
-                    LOGE("Dalvik hash resize failure\n");
+                    LOGE("Dalvik hash resize failure");
                     dvmAbort();
                 }
                 /* note "pEntry" is now invalid */
             } else {
-                //LOGW("okay %d/%d/%d\n",
+                //LOGW("okay %d/%d/%d",
                 //    pHashTable->numEntries, pHashTable->tableSize,
                 //    (pHashTable->tableSize * LOAD_NUMER) / LOAD_DENOM);
             }
@@ -260,7 +260,7 @@
     pEnd = &pHashTable->pEntries[pHashTable->tableSize];
     while (pEntry->data != NULL) {
         if (pEntry->data == item) {
-            //LOGI("+++ stepping on entry %d\n", pEntry - pHashTable->pEntries);
+            //LOGI("+++ stepping on entry %d", pEntry - pHashTable->pEntries);
             pEntry->data = HASH_TOMBSTONE;
             pHashTable->numEntries--;
             pHashTable->numDeadEntries++;
@@ -274,7 +274,7 @@
             pEntry = pHashTable->pEntries;
         }
 
-        //LOGI("+++ del probing %d...\n", pEntry - pHashTable->pEntries);
+        //LOGI("+++ del probing %d...", pEntry - pHashTable->pEntries);
     }
 
     return false;
@@ -412,7 +412,7 @@
         totalProbe += count;
     }
 
-    LOGI("Probe: min=%d max=%d, total=%d in %d (%d), avg=%.3f\n",
+    LOGI("Probe: min=%d max=%d, total=%d in %d (%d), avg=%.3f",
         minProbe, maxProbe, totalProbe, numEntries, pHashTable->tableSize,
         (float) totalProbe / (float) numEntries);
 }
diff --git a/vm/IndirectRefTable.cpp b/vm/IndirectRefTable.cpp
index 819b15d..225d8c2 100644
--- a/vm/IndirectRefTable.cpp
+++ b/vm/IndirectRefTable.cpp
@@ -76,17 +76,17 @@
      */
     sst.all = cookie;
     if (sst.parts.topIndex > pRef->segmentState.parts.topIndex) {
-        LOGE("Attempt to expand table with segment pop (%d to %d)\n",
+        LOGE("Attempt to expand table with segment pop (%d to %d)",
             pRef->segmentState.parts.topIndex, sst.parts.topIndex);
         return false;
     }
     if (sst.parts.numHoles >= sst.parts.topIndex) {
-        LOGE("Absurd numHoles in cookie (%d bi=%d)\n",
+        LOGE("Absurd numHoles in cookie (%d bi=%d)",
             sst.parts.numHoles, sst.parts.topIndex);
         return false;
     }
 
-    LOGV("IRT %p[%d]: pop, top=%d holes=%d\n",
+    LOGV("IRT %p[%d]: pop, top=%d holes=%d",
         pRef, pRef->kind, sst.parts.topIndex, sst.parts.numHoles);
 
     return true;
@@ -100,7 +100,7 @@
     Object* obj = pRef->table[idx];
     IndirectRef checkRef = dvmObjectToIndirectRef(pRef, obj, idx, pRef->kind);
     if (checkRef != iref) {
-        LOGW("IRT %p[%d]: iref mismatch (req=%p vs cur=%p)\n",
+        LOGW("IRT %p[%d]: iref mismatch (req=%p vs cur=%p)",
             pRef, pRef->kind, iref, checkRef);
         return false;
     }
@@ -118,7 +118,7 @@
     if (pRef->slotData != NULL) {
         IndirectRefSlot* pSlot = &pRef->slotData[slot];
         pSlot->serial++;
-        //LOGI("+++ add [%d] slot %d (%p->%p), serial=%d\n",
+        //LOGI("+++ add [%d] slot %d (%p->%p), serial=%d",
         //    pRef->kind, slot, obj, iref, pSlot->serial);
         pSlot->previous[pSlot->serial % kIRTPrevCount] = obj;
     }
@@ -131,7 +131,7 @@
 {
     if (pRef->slotData != NULL) {
         //IndirectRefSlot* pSlot = &pRef->slotData[slot];
-        //LOGI("+++ remove [%d] slot %d, serial now %d\n",
+        //LOGI("+++ remove [%d] slot %d, serial now %d",
         //    pRef->kind, slot, pSlot->serial);
     }
 }
@@ -155,7 +155,7 @@
     if (topIndex == pRef->allocEntries) {
         /* reached end of allocated space; did we hit buffer max? */
         if (topIndex == pRef->maxEntries) {
-            LOGW("IndirectRefTable overflow (max=%d)\n", pRef->maxEntries);
+            LOGW("IndirectRefTable overflow (max=%d)", pRef->maxEntries);
             return NULL;
         }
 
@@ -169,11 +169,11 @@
 
         newTable = (Object**) realloc(pRef->table, newSize * sizeof(Object*));
         if (newTable == NULL) {
-            LOGE("Unable to expand iref table (from %d to %d, max=%d)\n",
+            LOGE("Unable to expand iref table (from %d to %d, max=%d)",
                 pRef->allocEntries, newSize, pRef->maxEntries);
             return false;
         }
-        LOGV("Growing ireftab %p from %d to %d (max=%d)\n",
+        LOGV("Growing ireftab %p from %d to %d (max=%d)",
             pRef, pRef->allocEntries, newSize, pRef->maxEntries);
 
         /* update entries; adjust "nextEntry" in case memory moved */
@@ -222,7 +222,7 @@
 bool dvmGetFromIndirectRefTableCheck(IndirectRefTable* pRef, IndirectRef iref)
 {
     if (dvmGetIndirectRefType(iref) == kIndirectKindInvalid) {
-        LOGW("Invalid indirect reference 0x%08x\n", (u4) iref);
+        LOGW("Invalid indirect reference 0x%08x", (u4) iref);
         return false;
     }
 
@@ -230,19 +230,19 @@
     int idx = dvmIndirectRefToIndex(iref);
 
     if (iref == NULL) {
-        LOGD("Attempt to look up NULL iref\n");
+        LOGD("Attempt to look up NULL iref");
         return false;
     }
     if (idx >= topIndex) {
         /* bad -- stale reference? */
-        LOGD("Attempt to access invalid index %d (top=%d)\n",
+        LOGD("Attempt to access invalid index %d (top=%d)",
             idx, topIndex);
         return false;
     }
 
     Object* obj = pRef->table[idx];
     if (obj == NULL) {
-        LOGD("Attempt to read from hole, iref=%p\n", iref);
+        LOGD("Attempt to read from hole, iref=%p", iref);
         return false;
     }
     if (!checkEntry(pRef, iref, idx))
@@ -279,13 +279,13 @@
     int idx = dvmIndirectRefToIndex(iref);
     if (idx < bottomIndex) {
         /* wrong segment */
-        LOGV("Attempt to remove index outside index area (%d vs %d-%d)\n",
+        LOGV("Attempt to remove index outside index area (%d vs %d-%d)",
             idx, bottomIndex, topIndex);
         return false;
     }
     if (idx >= topIndex) {
         /* bad -- stale reference? */
-        LOGD("Attempt to remove invalid index %d (bottom=%d top=%d)\n",
+        LOGD("Attempt to remove invalid index %d (bottom=%d top=%d)",
             idx, bottomIndex, topIndex);
         return false;
     }
@@ -307,11 +307,11 @@
             pRef->segmentState.parts.numHoles - prevState.parts.numHoles;
         if (numHoles != 0) {
             while (--topIndex > bottomIndex && numHoles != 0) {
-                LOGV("+++ checking for hole at %d (cookie=0x%08x) val=%p\n",
+                LOGV("+++ checking for hole at %d (cookie=0x%08x) val=%p",
                     topIndex-1, cookie, pRef->table[topIndex-1]);
                 if (pRef->table[topIndex-1] != NULL)
                     break;
-                LOGV("+++ ate hole at %d\n", topIndex-1);
+                LOGV("+++ ate hole at %d", topIndex-1);
                 numHoles--;
             }
             pRef->segmentState.parts.numHoles =
@@ -319,7 +319,7 @@
             pRef->segmentState.parts.topIndex = topIndex;
         } else {
             pRef->segmentState.parts.topIndex = topIndex-1;
-            LOGV("+++ ate last entry %d\n", topIndex-1);
+            LOGV("+++ ate last entry %d", topIndex-1);
         }
     } else {
         /*
@@ -328,7 +328,7 @@
          * the hole count.
          */
         if (pRef->table[idx] == NULL) {
-            LOGV("--- WEIRD: removing null entry %d\n", idx);
+            LOGV("--- WEIRD: removing null entry %d", idx);
             return false;
         }
         if (!checkEntry(pRef, iref, idx))
@@ -337,7 +337,7 @@
 
         pRef->table[idx] = NULL;
         pRef->segmentState.parts.numHoles++;
-        LOGV("+++ left hole at %d, holes=%d\n",
+        LOGV("+++ left hole at %d, holes=%d",
             idx, pRef->segmentState.parts.numHoles);
     }
 
diff --git a/vm/Init.cpp b/vm/Init.cpp
index 82395d1..bf75434 100644
--- a/vm/Init.cpp
+++ b/vm/Init.cpp
@@ -324,7 +324,7 @@
         } else if (strcmp(value, "dt_android_adb") == 0) {
             gDvm.jdwpTransport = kJdwpTransportAndroidAdb;
         } else {
-            LOGE("JDWP transport '%s' not supported\n", value);
+            LOGE("JDWP transport '%s' not supported", value);
             return false;
         }
     } else if (strcmp(name, "server") == 0) {
@@ -333,7 +333,7 @@
         else if (*value == 'y')
             gDvm.jdwpServer = true;
         else {
-            LOGE("JDWP option 'server' must be 'y' or 'n'\n");
+            LOGE("JDWP option 'server' must be 'y' or 'n'");
             return false;
         }
     } else if (strcmp(name, "suspend") == 0) {
@@ -342,7 +342,7 @@
         else if (*value == 'y')
             gDvm.jdwpSuspend = true;
         else {
-            LOGE("JDWP option 'suspend' must be 'y' or 'n'\n");
+            LOGE("JDWP option 'suspend' must be 'y' or 'n'");
             return false;
         }
     } else if (strcmp(name, "address") == 0) {
@@ -359,12 +359,12 @@
             value = colon + 1;
         }
         if (*value == '\0') {
-            LOGE("JDWP address missing port\n");
+            LOGE("JDWP address missing port");
             return false;
         }
         port = strtol(value, &end, 10);
         if (*end != '\0') {
-            LOGE("JDWP address has junk in port field '%s'\n", value);
+            LOGE("JDWP address has junk in port field '%s'", value);
             return false;
         }
         gDvm.jdwpPort = port;
@@ -374,9 +374,9 @@
                strcmp(name, "timeout") == 0)
     {
         /* valid but unsupported */
-        LOGI("Ignoring JDWP option '%s'='%s'\n", name, value);
+        LOGI("Ignoring JDWP option '%s'='%s'", name, value);
     } else {
-        LOGI("Ignoring unrecognized JDWP option '%s'='%s'\n", name, value);
+        LOGI("Ignoring unrecognized JDWP option '%s'='%s'", name, value);
     }
 
     return true;
@@ -401,14 +401,14 @@
 
         value = strchr(name, '=');
         if (value == NULL) {
-            LOGE("JDWP opts: garbage at '%s'\n", name);
+            LOGE("JDWP opts: garbage at '%s'", name);
             goto bail;
         }
 
         comma = strchr(name, ',');      // use name, not value, for safety
         if (comma != NULL) {
             if (comma < value) {
-                LOGE("JDWP opts: found comma before '=' in '%s'\n", mangle);
+                LOGE("JDWP opts: found comma before '=' in '%s'", mangle);
                 goto bail;
             }
             *comma = '\0';
@@ -430,11 +430,11 @@
      * Make sure the combination of arguments makes sense.
      */
     if (gDvm.jdwpTransport == kJdwpTransportUnknown) {
-        LOGE("JDWP opts: must specify transport\n");
+        LOGE("JDWP opts: must specify transport");
         goto bail;
     }
     if (!gDvm.jdwpServer && (gDvm.jdwpHost == NULL || gDvm.jdwpPort == 0)) {
-        LOGE("JDWP opts: when server=n, must specify host and port\n");
+        LOGE("JDWP opts: when server=n, must specify host and port");
         goto bail;
     }
     // transport mandatory
@@ -481,7 +481,7 @@
             pCtrl->pkgOrClass = dvmDotToSlash(pkgOrClass+1);    // skip ':'
             if (pCtrl->pkgOrClass == NULL) {
                 /* can happen if class name includes an illegal '/' */
-                LOGW("Unable to process assertion arg '%s'\n", pkgOrClass);
+                LOGW("Unable to process assertion arg '%s'", pkgOrClass);
                 return false;
             }
 
@@ -518,13 +518,13 @@
 void dvmLateEnableAssertions()
 {
     if (gDvm.assertionCtrl == NULL) {
-        LOGD("Not late-enabling assertions: no assertionCtrl array\n");
+        LOGD("Not late-enabling assertions: no assertionCtrl array");
         return;
     } else if (gDvm.assertionCtrlCount != 0) {
-        LOGD("Not late-enabling assertions: some asserts already configured\n");
+        LOGD("Not late-enabling assertions: some asserts already configured");
         return;
     }
-    LOGD("Late-enabling assertions\n");
+    LOGD("Late-enabling assertions");
 
     /* global enable for all but system */
     AssertionControl* pCtrl = gDvm.assertionCtrl;
@@ -655,9 +655,9 @@
 {
     int i;
 
-    LOGV("VM options (%d):\n", argc);
+    LOGV("VM options (%d):", argc);
     for (i = 0; i < argc; i++)
-        LOGV("  %d: '%s'\n", i, argv[i]);
+        LOGV("  %d: '%s'", i, argv[i]);
 
     /*
      * Over-allocate AssertionControl array for convenience.  If allocated,
@@ -1009,7 +1009,7 @@
                 dvmFprintf(stderr, "Bad value for -Xgc");
                 return -1;
             }
-            LOGV("Precise GC configured %s\n", gDvm.preciseGc ? "ON" : "OFF");
+            LOGV("Precise GC configured %s", gDvm.preciseGc ? "ON" : "OFF");
 
         } else if (strcmp(argv[i], "-Xcheckdexsum") == 0) {
             gDvm.verifyDexChecksum = true;
@@ -1099,7 +1099,7 @@
 {
     void* addr = info->si_addr;
 
-    LOGE("Caught a SIGBUS (%d), addr=%p\n", signum, addr);
+    LOGE("Caught a SIGBUS (%d), addr=%p", signum, addr);
 
     /*
      * If we return at this point the SIGBUS just keeps happening, so we
@@ -1155,9 +1155,9 @@
 
     assert(gDvm.initializing);
 
-    LOGV("VM init args (%d):\n", argc);
+    LOGV("VM init args (%d):", argc);
     for (i = 0; i < argc; i++)
-        LOGV("  %d: '%s'\n", i, argv[i]);
+        LOGV("  %d: '%s'", i, argv[i]);
 
     /* prep properties storage */
     if (!dvmPropertiesStartup())
@@ -1180,7 +1180,7 @@
 #if WITH_EXTRA_GC_CHECKS > 1
     /* only "portable" interp has the extra goodies */
     if (gDvm.executionMode != kExecutionModeInterpPortable) {
-        LOGI("Switching to 'portable' interpreter for GC checks\n");
+        LOGI("Switching to 'portable' interpreter for GC checks");
         gDvm.executionMode = kExecutionModeInterpPortable;
     }
 #endif
@@ -1199,13 +1199,13 @@
 
     /* verify system page size */
     if (sysconf(_SC_PAGESIZE) != SYSTEM_PAGE_SIZE) {
-        LOGE("ERROR: expected page size %d, got %d\n",
+        LOGE("ERROR: expected page size %d, got %d",
             SYSTEM_PAGE_SIZE, (int) sysconf(_SC_PAGESIZE));
         goto fail;
     }
 
     /* mterp setup */
-    LOGV("Using executionMode %d\n", gDvm.executionMode);
+    LOGV("Using executionMode %d", gDvm.executionMode);
     dvmCheckAsmConstants();
 
     /*
@@ -1304,7 +1304,7 @@
      */
     if (dvmReferenceTableEntries(&dvmThreadSelf()->internalLocalRefTable) != 0)
     {
-        LOGW("Warning: tracked references remain post-initialization\n");
+        LOGW("Warning: tracked references remain post-initialization");
         dvmDumpReferenceTable(&dvmThreadSelf()->internalLocalRefTable, "MAIN");
     }
 
@@ -1330,13 +1330,13 @@
 
 #ifndef NDEBUG
     if (!dvmTestHash())
-        LOGE("dvmTestHash FAILED\n");
+        LOGE("dvmTestHash FAILED");
     if (false /*noisy!*/ && !dvmTestIndirectRefTable())
-        LOGE("dvmTestIndirectRefTable FAILED\n");
+        LOGE("dvmTestIndirectRefTable FAILED");
 #endif
 
     if (dvmCheckException(dvmThreadSelf())) {
-        LOGE("Exception pending at end of VM initialization\n");
+        LOGE("Exception pending at end of VM initialization");
         dvmLogExceptionStackTrace();
         goto fail;
     }
@@ -1435,12 +1435,12 @@
      * come last.
      */
     if (!initJdwp()) {
-        LOGD("JDWP init failed; continuing anyway\n");
+        LOGD("JDWP init failed; continuing anyway");
     }
 
     endJdwp = dvmGetRelativeTimeUsec();
 
-    LOGV("thread-start heap=%d quit=%d jdwp=%d total=%d usec\n",
+    LOGV("thread-start heap=%d quit=%d jdwp=%d total=%d usec",
         (int)(endHeap-startHeap), (int)(endQuit-startQuit),
         (int)(endJdwp-startJdwp), (int)(endJdwp-startHeap));
 
@@ -1487,7 +1487,7 @@
 
         if (gDvm.jdwpHost != NULL) {
             if (strlen(gDvm.jdwpHost) >= sizeof(params.host)-1) {
-                LOGE("ERROR: hostname too long: '%s'\n", gDvm.jdwpHost);
+                LOGE("ERROR: hostname too long: '%s'", gDvm.jdwpHost);
                 return false;
             }
             strcpy(params.host, gDvm.jdwpHost);
@@ -1501,7 +1501,7 @@
 
         gDvm.jdwpState = dvmJdwpStartup(&params);
         if (gDvm.jdwpState == NULL) {
-            LOGW("WARNING: debugger thread failed to initialize\n");
+            LOGW("WARNING: debugger thread failed to initialize");
             /* TODO: ignore? fail? need to mimic "expected" behavior */
         }
     }
@@ -1513,7 +1513,7 @@
     if (dvmJdwpIsActive(gDvm.jdwpState)) {
         //dvmChangeStatus(NULL, THREAD_RUNNING);
         if (!dvmJdwpPostVMStart(gDvm.jdwpState, gDvm.jdwpSuspend)) {
-            LOGW("WARNING: failed to post 'start' message to debugger\n");
+            LOGW("WARNING: failed to post 'start' message to debugger");
             /* keep going */
         }
         //dvmChangeStatus(NULL, THREAD_NATIVE);
@@ -1613,7 +1613,7 @@
  */
 void dvmShutdown()
 {
-    LOGV("VM shutting down\n");
+    LOGV("VM shutting down");
 
     if (CALC_CACHE_STATS)
         dvmDumpAtomicCacheStats(gDvm.instanceofCache);
@@ -1653,7 +1653,7 @@
     dvmSlayDaemons();
 
     if (gDvm.verboseShutdown)
-        LOGD("VM cleaning up\n");
+        LOGD("VM cleaning up");
 
     dvmDebuggerShutdown();
     dvmProfilingShutdown();
@@ -1751,7 +1751,7 @@
  */
 void dvmAbort()
 {
-    LOGE("VM aborting\n");
+    LOGE("VM aborting");
 
     fflush(NULL);       // flush all open file buffers
 
diff --git a/vm/InitRefs.cpp b/vm/InitRefs.cpp
index 2b99850..6fddf9a 100644
--- a/vm/InitRefs.cpp
+++ b/vm/InitRefs.cpp
@@ -33,7 +33,7 @@
     }
 
     if (result == NULL) {
-        LOGE("Could not find essential class %s\n", name);
+        LOGE("Could not find essential class %s", name);
         return false;
     }
 
@@ -156,7 +156,7 @@
         const char* name, const char* type) {
     int offset = dvmFindFieldOffset(clazz, name, type);
     if (offset < 0) {
-        LOGE("Could not find essential field %s.%s of type %s\n", clazz->descriptor, name, type);
+        LOGE("Could not find essential field %s.%s of type %s", clazz->descriptor, name, type);
         return false;
     }
 
@@ -279,7 +279,7 @@
         const struct FieldInfo* fields = classes[i].fields;
 
         if (clazz == NULL) {
-            LOGE("Could not find essential class %s for field lookup\n", className);
+            LOGE("Could not find essential class %s for field lookup", className);
             return false;
         }
 
@@ -299,7 +299,7 @@
     Method* method = dvmFindDirectMethodByDescriptor(clazz, name, descriptor);
 
     if (method == NULL) {
-        LOGE("Could not find essential direct method %s.%s with descriptor %s\n",
+        LOGE("Could not find essential direct method %s.%s with descriptor %s",
                 clazz->descriptor, name, descriptor);
         return false;
     }
@@ -313,7 +313,7 @@
     ClassObject* clazz = dvmFindSystemClassNoInit(className);
 
     if (clazz == NULL) {
-        LOGE("Could not find essential class %s for direct method lookup\n", className);
+        LOGE("Could not find essential class %s for direct method lookup", className);
         return false;
     }
 
@@ -396,14 +396,14 @@
     ClassObject* clazz = dvmFindSystemClassNoInit(className);
 
     if (clazz == NULL) {
-        LOGE("Could not find essential class %s for virtual method lookup\n", className);
+        LOGE("Could not find essential class %s for virtual method lookup", className);
         return false;
     }
 
     Method* method = dvmFindVirtualMethodByDescriptor(clazz, name, descriptor);
 
     if (method == NULL) {
-        LOGE("Could not find essential virtual method %s.%s with descriptor %s\n",
+        LOGE("Could not find essential virtual method %s.%s with descriptor %s",
                 clazz->descriptor, name, descriptor);
         return false;
     }
@@ -452,7 +452,7 @@
 
 static bool verifyStringOffset(const char* name, int actual, int expected) {
     if (actual != expected) {
-        LOGE("InitRefs: String.%s offset = %d; expected %d\n", name, actual, expected);
+        LOGE("InitRefs: String.%s offset = %d; expected %d", name, actual, expected);
         return false;
     }
 
@@ -497,7 +497,7 @@
 /* (documented in header) */
 bool dvmFindReferenceMembers(ClassObject* classReference) {
     if (strcmp(classReference->descriptor, "Ljava/lang/ref/Reference;") != 0) {
-        LOGE("Attempt to set up the wrong class as Reference\n");
+        LOGE("Attempt to set up the wrong class as Reference");
         return false;
     }
     return initFieldOffset(classReference, &gDvm.offJavaLangRefReference_pendingNext,
diff --git a/vm/InlineNative.cpp b/vm/InlineNative.cpp
index f4f4e8c..124031d 100644
--- a/vm/InlineNative.cpp
+++ b/vm/InlineNative.cpp
@@ -136,7 +136,7 @@
         return false;
     }
 
-    //LOGI("String.charAt this=0x%08x index=%d\n", arg0, arg1);
+    //LOGI("String.charAt this=0x%08x index=%d", arg0, arg1);
     count = dvmGetFieldInt((Object*) arg0, STRING_FIELDOFF_COUNT);
     if ((s4) arg1 < 0 || (s4) arg1 >= count) {
         dvmThrowStringIndexOutOfBoundsExceptionWithIndex(count, arg1);
@@ -180,9 +180,9 @@
     thisStr = dvmCreateCstrFromString(thisStrObj);
     compStr = dvmCreateCstrFromString(compStrObj);
 
-    LOGE("%s expected %d got %d\n", compareType, expectResult, newResult);
-    LOGE(" this (o=%d l=%d) '%s'\n", thisOffset, thisCount, thisStr);
-    LOGE(" comp (o=%d l=%d) '%s'\n", compOffset, compCount, compStr);
+    LOGE("%s expected %d got %d", compareType, expectResult, newResult);
+    LOGE(" this (o=%d l=%d) '%s'", thisOffset, thisCount, thisStr);
+    LOGE(" comp (o=%d l=%d) '%s'", compOffset, compCount, compStr);
     dvmPrintHexDumpEx(ANDROID_LOG_INFO, LOG_TAG,
         ((const u2*) thisArray->contents) + thisOffset, thisCount*2,
         kHexDumpLocal);
@@ -403,7 +403,7 @@
 bool javaLangString_length(u4 arg0, u4 arg1, u4 arg2, u4 arg3,
     JValue* pResult)
 {
-    //LOGI("String.length this=0x%08x pResult=%p\n", arg0, pResult);
+    //LOGI("String.length this=0x%08x pResult=%p", arg0, pResult);
 
     /* null reference check on "this" */
     if ((Object*) arg0 == NULL) {
@@ -421,7 +421,7 @@
 bool javaLangString_isEmpty(u4 arg0, u4 arg1, u4 arg2, u4 arg3,
     JValue* pResult)
 {
-    //LOGI("String.isEmpty this=0x%08x pResult=%p\n", arg0, pResult);
+    //LOGI("String.isEmpty this=0x%08x pResult=%p", arg0, pResult);
 
     /* null reference check on "this" */
     if ((Object*) arg0 == NULL) {
@@ -455,7 +455,7 @@
     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",
+    //LOGI("String.indexOf(0x%08x, 0x%04x, %d) off=%d count=%d",
     //    (u4) strObj, ch, start, offset, count);
 
     /* factor out the offset */
@@ -893,7 +893,7 @@
     gDvm.inlinedMethods[opIndex] = method;
     IF_LOGV() {
         char* desc = dexProtoCopyMethodDescriptor(&method->prototype);
-        LOGV("Registered for profile: %s.%s %s\n",
+        LOGV("Registered for profile: %s.%s %s",
             method->clazz->descriptor, method->name, desc);
         free(desc);
     }
diff --git a/vm/JarFile.cpp b/vm/JarFile.cpp
index 0288fef..0504277 100644
--- a/vm/JarFile.cpp
+++ b/vm/JarFile.cpp
@@ -73,7 +73,7 @@
         *pCachedName = buf;
         return fd;
     }
-    LOGV("Couldn't open %s: %s\n", buf, strerror(errno));
+    LOGV("Couldn't open %s: %s", buf, strerror(errno));
 bail:
     free(buf);
     return -1;
@@ -116,7 +116,7 @@
          * See if there's an up-to-date copy of the optimized dex
          * in the cache, but don't create one if there isn't.
          */
-        LOGV("dvmDexCacheStatus: Checking cache for %s\n", fileName);
+        LOGV("dvmDexCacheStatus: Checking cache for %s", fileName);
         cachedName = dexOptGenerateCacheFileName(fileName, kDexInJarName);
         if (cachedName == NULL)
             return DEX_CACHE_BAD_ARCHIVE;
@@ -125,7 +125,7 @@
                 dexGetZipEntryModTime(&archive, entry),
                 dexGetZipEntryCrc32(&archive, entry),
                 /*isBootstrap=*/false, &newFile, /*createIfMissing=*/false);
-        LOGV("dvmOpenCachedDexFile returned fd %d\n", fd);
+        LOGV("dvmOpenCachedDexFile returned fd %d", fd);
         if (fd < 0) {
             result = DEX_CACHE_STALE;
             goto bail;
@@ -136,7 +136,7 @@
          */
         if (!dvmUnlockCachedDexFile(fd)) {
             /* uh oh -- this process needs to exit or we'll wedge the system */
-            LOGE("Unable to unlock DEX file\n");
+            LOGE("Unable to unlock DEX file");
             goto bail;
         }
 
@@ -156,14 +156,14 @@
             goto bail;
         }
 
-        LOGV("Using alternate file (odex) for %s ...\n", fileName);
+        LOGV("Using alternate file (odex) for %s ...", fileName);
         if (!dvmCheckOptHeaderAndDependencies(fd, false, 0, 0, true, true)) {
-            LOGE("%s odex has stale dependencies\n", fileName);
-            LOGE("odex source not available -- failing\n");
+            LOGE("%s odex has stale dependencies", fileName);
+            LOGE("odex source not available -- failing");
             result = DEX_CACHE_STALE_ODEX;
             goto bail;
         } else {
-            LOGV("%s odex has good dependencies\n", fileName);
+            LOGV("%s odex has good dependencies", fileName);
         }
     }
     result = DEX_CACHE_OK;
@@ -217,16 +217,16 @@
      */
     fd = openAlternateSuffix(fileName, "odex", O_RDONLY, &cachedName);
     if (fd >= 0) {
-        LOGV("Using alternate file (odex) for %s ...\n", fileName);
+        LOGV("Using alternate file (odex) for %s ...", fileName);
         if (!dvmCheckOptHeaderAndDependencies(fd, false, 0, 0, true, true)) {
-            LOGE("%s odex has stale dependencies\n", fileName);
+            LOGE("%s odex has stale dependencies", fileName);
             free(cachedName);
             cachedName = NULL;
             close(fd);
             fd = -1;
             goto tryArchive;
         } else {
-            LOGV("%s odex has good dependencies\n", fileName);
+            LOGV("%s odex has good dependencies", fileName);
             //TODO: make sure that the .odex actually corresponds
             //      to the classes.dex inside the archive (if present).
             //      For typical use there will be no classes.dex.
@@ -262,14 +262,14 @@
             } else {
                 cachedName = strdup(odexOutputName);
             }
-            LOGV("dvmJarFileOpen: Checking cache for %s (%s)\n",
+            LOGV("dvmJarFileOpen: Checking cache for %s (%s)",
                 fileName, cachedName);
             fd = dvmOpenCachedDexFile(fileName, cachedName,
                     dexGetZipEntryModTime(&archive, entry),
                     dexGetZipEntryCrc32(&archive, entry),
                     isBootstrap, &newFile, /*createIfMissing=*/true);
             if (fd < 0) {
-                LOGI("Unable to open or create cache for %s (%s)\n",
+                LOGI("Unable to open or create cache for %s (%s)",
                     fileName, cachedName);
                 goto bail;
             }
@@ -304,13 +304,13 @@
                 }
 
                 if (!result) {
-                    LOGE("Unable to extract+optimize DEX from '%s'\n",
+                    LOGE("Unable to extract+optimize DEX from '%s'",
                         fileName);
                     goto bail;
                 }
 
                 endWhen = dvmGetRelativeTimeUsec();
-                LOGD("DEX prep '%s': unzip in %dms, rewrite %dms\n",
+                LOGD("DEX prep '%s': unzip in %dms, rewrite %dms",
                     fileName,
                     (int) (extractWhen - startWhen) / 1000,
                     (int) (endWhen - extractWhen) / 1000);
@@ -327,7 +327,7 @@
      * doesn't have to be seeked anywhere in particular.
      */
     if (dvmDexFileOpenFromFd(fd, &pDvmDex) != 0) {
-        LOGI("Unable to map %s in %s\n", kDexInJarName, fileName);
+        LOGI("Unable to map %s in %s", kDexInJarName, fileName);
         goto bail;
     }
 
@@ -335,13 +335,13 @@
         /* unlock the fd */
         if (!dvmUnlockCachedDexFile(fd)) {
             /* uh oh -- this process needs to exit or we'll wedge the system */
-            LOGE("Unable to unlock DEX file\n");
+            LOGE("Unable to unlock DEX file");
             goto bail;
         }
         locked = false;
     }
 
-    LOGV("Successfully opened '%s' in '%s'\n", kDexInJarName, fileName);
+    LOGV("Successfully opened '%s' in '%s'", kDexInJarName, fileName);
 
     *ppJarFile = (JarFile*) calloc(1, sizeof(JarFile));
     (*ppJarFile)->archive = archive;
diff --git a/vm/LinearAlloc.cpp b/vm/LinearAlloc.cpp
index dc93759..5a99e6d 100644
--- a/vm/LinearAlloc.cpp
+++ b/vm/LinearAlloc.cpp
@@ -142,7 +142,7 @@
     pHdr->mapAddr = (char*)mmap(NULL, pHdr->mapLength, PROT_READ | PROT_WRITE,
         MAP_PRIVATE, fd, 0);
     if (pHdr->mapAddr == MAP_FAILED) {
-        LOGE("LinearAlloc mmap(%d) failed: %s\n", pHdr->mapLength,
+        LOGE("LinearAlloc mmap(%d) failed: %s", pHdr->mapLength,
             strerror(errno));
         free(pHdr);
         close(fd);
@@ -156,7 +156,7 @@
     pHdr->mapAddr = mmap(NULL, pHdr->mapLength, PROT_READ | PROT_WRITE,
         MAP_PRIVATE | MAP_ANON, -1, 0);
     if (pHdr->mapAddr == MAP_FAILED) {
-        LOGE("LinearAlloc mmap(%d) failed: %s\n", pHdr->mapLength,
+        LOGE("LinearAlloc mmap(%d) failed: %s", pHdr->mapLength,
             strerror(errno));
         free(pHdr);
         return NULL;
@@ -187,14 +187,14 @@
      * the extra page now that we have ashmem?]
      */
     if (mprotect(pHdr->mapAddr, pHdr->mapLength, PROT_NONE) != 0) {
-        LOGW("LinearAlloc init mprotect failed: %s\n", strerror(errno));
+        LOGW("LinearAlloc init mprotect failed: %s", strerror(errno));
         free(pHdr);
         return NULL;
     }
     if (mprotect(pHdr->mapAddr + SYSTEM_PAGE_SIZE, SYSTEM_PAGE_SIZE,
             ENFORCE_READ_ONLY ? PROT_READ : PROT_READ|PROT_WRITE) != 0)
     {
-        LOGW("LinearAlloc init mprotect #2 failed: %s\n", strerror(errno));
+        LOGW("LinearAlloc init mprotect #2 failed: %s", strerror(errno));
         free(pHdr);
         return NULL;
     }
@@ -211,7 +211,7 @@
 
     dvmInitMutex(&pHdr->lock);
 
-    LOGV("LinearAlloc: created region at %p-%p\n",
+    LOGV("LinearAlloc: created region at %p-%p",
         pHdr->mapAddr, pHdr->mapAddr + pHdr->mapLength-1);
 
     return pHdr;
@@ -237,14 +237,14 @@
     //dvmLinearAllocDump(classLoader);
 
     if (gDvm.verboseShutdown) {
-        LOGV("Unmapping linear allocator base=%p\n", pHdr->mapAddr);
-        LOGD("LinearAlloc %p used %d of %d (%d%%)\n",
+        LOGV("Unmapping linear allocator base=%p", pHdr->mapAddr);
+        LOGD("LinearAlloc %p used %d of %d (%d%%)",
             classLoader, pHdr->curOffset, pHdr->mapLength,
             (pHdr->curOffset * 100) / pHdr->mapLength);
     }
 
     if (munmap(pHdr->mapAddr, pHdr->mapLength) != 0) {
-        LOGW("LinearAlloc munmap(%p, %d) failed: %s\n",
+        LOGW("LinearAlloc munmap(%p, %d) failed: %s",
             pHdr->mapAddr, pHdr->mapLength, strerror(errno));
     }
     free(pHdr);
@@ -272,7 +272,7 @@
     return calloc(1, size);
 #endif
 
-    LOGVV("--- LinearAlloc(%p, %d)\n", classLoader, size);
+    LOGVV("--- LinearAlloc(%p, %d)", classLoader, size);
 
     /*
      * What we'd like to do is just determine the new end-of-alloc size
@@ -303,7 +303,7 @@
      */
     nextOffset = ((startOffset + HEADER_EXTRA*2 + size + (BLOCK_ALIGN-1))
                     & ~(BLOCK_ALIGN-1)) - HEADER_EXTRA;
-    LOGVV("--- old=%d size=%d new=%d\n", startOffset, size, nextOffset);
+    LOGVV("--- old=%d size=%d new=%d", startOffset, size, nextOffset);
 
     if (nextOffset > pHdr->mapLength) {
         /*
@@ -312,7 +312,7 @@
          * works if the users of these functions actually free everything
          * they allocate.
          */
-        LOGE("LinearAlloc exceeded capacity (%d), last=%d\n",
+        LOGE("LinearAlloc exceeded capacity (%d), last=%d",
             pHdr->mapLength, (int) size);
         dvmAbort();
     }
@@ -324,7 +324,7 @@
      * stuff we always treat the full extent.
      */
     size = nextOffset - (startOffset + HEADER_EXTRA);
-    LOGVV("--- (size now %d)\n", size);
+    LOGVV("--- (size now %d)", size);
 
     /*
      * See if we are starting on or have crossed into a new page.  If so,
@@ -342,7 +342,7 @@
     lastGoodOff = (startOffset-1) & ~(SYSTEM_PAGE_SIZE-1);
     firstWriteOff = startOffset & ~(SYSTEM_PAGE_SIZE-1);
     lastWriteOff = (nextOffset-1) & ~(SYSTEM_PAGE_SIZE-1);
-    LOGVV("---  lastGood=0x%04x firstWrite=0x%04x lastWrite=0x%04x\n",
+    LOGVV("---  lastGood=0x%04x firstWrite=0x%04x lastWrite=0x%04x",
         lastGoodOff, firstWriteOff, lastWriteOff);
     if (lastGoodOff != lastWriteOff || ENFORCE_READ_ONLY) {
         int cc, start, len;
@@ -351,10 +351,10 @@
         assert(start <= nextOffset);
         len = (lastWriteOff - firstWriteOff) + SYSTEM_PAGE_SIZE;
 
-        LOGVV("---    calling mprotect(start=%d len=%d RW)\n", start, len);
+        LOGVV("---    calling mprotect(start=%d len=%d RW)", start, len);
         cc = mprotect(pHdr->mapAddr + start, len, PROT_READ | PROT_WRITE);
         if (cc != 0) {
-            LOGE("LinearAlloc mprotect (+%d %d) failed: %s\n",
+            LOGE("LinearAlloc mprotect (+%d %d) failed: %s",
                 start, len, strerror(errno));
             /* we're going to fail soon, might as do it now */
             dvmAbort();
@@ -368,7 +368,7 @@
         start = firstWriteOff / SYSTEM_PAGE_SIZE;
         end = lastWriteOff / SYSTEM_PAGE_SIZE;
 
-        LOGVV("---  marking pages %d-%d RW (alloc %d at %p)\n",
+        LOGVV("---  marking pages %d-%d RW (alloc %d at %p)",
             start, end, size, pHdr->mapAddr + startOffset + HEADER_EXTRA);
         for (i = start; i <= end; i++)
             pHdr->writeRefCount[i]++;
@@ -426,7 +426,7 @@
                           getHeader(classLoader)->curOffset));
 
     const u4* pLen = getBlockHeader(mem);
-    LOGV("--- LinearRealloc(%d) old=%d\n", newSize, *pLen);
+    LOGV("--- LinearRealloc(%d) old=%d", newSize, *pLen);
 
     /* handle size reduction case */
     if (*pLen >= newSize) {
@@ -464,7 +464,7 @@
 
     firstPage = ((u1*)pLen - (u1*)pHdr->mapAddr) / SYSTEM_PAGE_SIZE;
     lastPage = ((u1*)mem - (u1*)pHdr->mapAddr + (len-1)) / SYSTEM_PAGE_SIZE;
-    LOGVV("--- updating pages %d-%d (%d)\n", firstPage, lastPage, direction);
+    LOGVV("--- updating pages %d-%d (%d)", firstPage, lastPage, direction);
 
     int i, cc;
 
@@ -480,19 +480,19 @@
              */
             if (i == firstPage) {
                 if ((*pLen & LENGTHFLAG_RW) == 0) {
-                    LOGW("Double RO on %p\n", mem);
+                    LOGW("Double RO on %p", mem);
                     dvmAbort();
                 } else
                     *pLen &= ~LENGTHFLAG_RW;
             }
 
             if (pHdr->writeRefCount[i] == 0) {
-                LOGE("Can't make page %d any less writable\n", i);
+                LOGE("Can't make page %d any less writable", i);
                 dvmAbort();
             }
             pHdr->writeRefCount[i]--;
             if (pHdr->writeRefCount[i] == 0) {
-                LOGVV("---  prot page %d RO\n", i);
+                LOGVV("---  prot page %d RO", i);
                 cc = mprotect(pHdr->mapAddr + SYSTEM_PAGE_SIZE * i,
                         SYSTEM_PAGE_SIZE, PROT_READ);
                 assert(cc == 0);
@@ -502,11 +502,11 @@
              * Trying to mark writable.
              */
             if (pHdr->writeRefCount[i] >= 32767) {
-                LOGE("Can't make page %d any more writable\n", i);
+                LOGE("Can't make page %d any more writable", i);
                 dvmAbort();
             }
             if (pHdr->writeRefCount[i] == 0) {
-                LOGVV("---  prot page %d RW\n", i);
+                LOGVV("---  prot page %d RW", i);
                 cc = mprotect(pHdr->mapAddr + SYSTEM_PAGE_SIZE * i,
                         SYSTEM_PAGE_SIZE, PROT_READ | PROT_WRITE);
                 assert(cc == 0);
@@ -515,7 +515,7 @@
 
             if (i == firstPage) {
                 if ((*pLen & LENGTHFLAG_RW) != 0) {
-                    LOGW("Double RW on %p\n", mem);
+                    LOGW("Double RW on %p", mem);
                     dvmAbort();
                 } else
                     *pLen |= LENGTHFLAG_RW;
@@ -599,10 +599,10 @@
 
     dvmLockMutex(&pHdr->lock);
 
-    LOGI("LinearAlloc classLoader=%p\n", classLoader);
-    LOGI("  mapAddr=%p mapLength=%d firstOffset=%d\n",
+    LOGI("LinearAlloc classLoader=%p", classLoader);
+    LOGI("  mapAddr=%p mapLength=%d firstOffset=%d",
         pHdr->mapAddr, pHdr->mapLength, pHdr->firstOffset);
-    LOGI("  curOffset=%d\n", pHdr->curOffset);
+    LOGI("  curOffset=%d", pHdr->curOffset);
 
     int off = pHdr->firstOffset;
     u4 rawLen, fullLen;
@@ -612,7 +612,7 @@
         fullLen = ((HEADER_EXTRA*2 + (rawLen & LENGTHFLAG_MASK))
                     & ~(BLOCK_ALIGN-1));
 
-        LOGI("  %p (%3d): %clen=%d%s\n", pHdr->mapAddr + off + HEADER_EXTRA,
+        LOGI("  %p (%3d): %clen=%d%s", pHdr->mapAddr + off + HEADER_EXTRA,
             (int) ((off + HEADER_EXTRA) / SYSTEM_PAGE_SIZE),
             (rawLen & LENGTHFLAG_FREE) != 0 ? '*' : ' ',
             rawLen & LENGTHFLAG_MASK,
@@ -622,7 +622,7 @@
     }
 
     if (ENFORCE_READ_ONLY) {
-        LOGI("writeRefCount map:\n");
+        LOGI("writeRefCount map:");
 
         int numPages = (pHdr->mapLength+SYSTEM_PAGE_SIZE-1) / SYSTEM_PAGE_SIZE;
         int zstart = 0;
@@ -644,7 +644,7 @@
             printf(" %d-%d: zero\n", zstart, i-1);
     }
 
-    LOGD("LinearAlloc %p using %d of %d (%d%%)\n",
+    LOGD("LinearAlloc %p using %d of %d (%d%%)",
         classLoader, pHdr->curOffset, pHdr->mapLength,
         (pHdr->curOffset * 100) / pHdr->mapLength);
 
@@ -675,7 +675,7 @@
                     & ~(BLOCK_ALIGN-1));
 
         if ((rawLen & LENGTHFLAG_FREE) == 0) {
-            LOGW("LinearAlloc %p not freed: %p len=%d\n", classLoader,
+            LOGW("LinearAlloc %p not freed: %p len=%d", classLoader,
                 pHdr->mapAddr + off + HEADER_EXTRA, rawLen & LENGTHFLAG_MASK);
         }
 
diff --git a/vm/Misc.cpp b/vm/Misc.cpp
index 5412c75..15097a9 100644
--- a/vm/Misc.cpp
+++ b/vm/Misc.cpp
@@ -184,7 +184,7 @@
         vfprintf(target->data.file.fp, format, args);
         break;
     default:
-        LOGE("unexpected 'which' %d\n", target->which);
+        LOGE("unexpected 'which' %d", target->which);
         break;
     }
 
@@ -488,7 +488,7 @@
      */
     curTime = dvmGetRelativeTimeUsec();
     if (curTime >= relStartTime + maxTotalSleep) {
-        LOGVV("exsl: sleep exceeded (start=%llu max=%d now=%llu)\n",
+        LOGVV("exsl: sleep exceeded (start=%llu max=%d now=%llu)",
             relStartTime, maxTotalSleep, curTime);
         return false;
     }
@@ -507,16 +507,16 @@
     assert(curDelay > 0);
 
     if (curTime + curDelay >= relStartTime + maxTotalSleep) {
-        LOGVV("exsl: reduced delay from %d to %d\n",
+        LOGVV("exsl: reduced delay from %d to %d",
             curDelay, (int) ((relStartTime + maxTotalSleep) - curTime));
         curDelay = (int) ((relStartTime + maxTotalSleep) - curTime);
     }
 
     if (iteration == 0) {
-        LOGVV("exsl: yield\n");
+        LOGVV("exsl: yield");
         sched_yield();
     } else {
-        LOGVV("exsl: sleep for %d\n", curDelay);
+        LOGVV("exsl: sleep for %d", curDelay);
         usleep(curDelay);
     }
     return true;
@@ -537,11 +537,11 @@
      */
     flags = fcntl(fd, F_GETFD);
     if (flags < 0) {
-        LOGW("Unable to get fd flags for fd %d\n", fd);
+        LOGW("Unable to get fd flags for fd %d", fd);
         return false;
     }
     if (fcntl(fd, F_SETFD, flags | FD_CLOEXEC) < 0) {
-        LOGW("Unable to set close-on-exec for fd %d\n", fd);
+        LOGW("Unable to set close-on-exec for fd %d", fd);
         return false;
     }
     return true;
@@ -637,7 +637,7 @@
     sprintf(nameBuf, "/proc/self/task/%d/stat", (int) tid);
     fd = open(nameBuf, O_RDONLY);
     if (fd < 0) {
-        LOGV("Unable to open '%s': %s\n", nameBuf, strerror(errno));
+        LOGV("Unable to open '%s': %s", nameBuf, strerror(errno));
         return false;
     }
 
@@ -645,7 +645,7 @@
     int cc = read(fd, lineBuf, sizeof(lineBuf)-1);
     if (cc <= 0) {
         const char* msg = (cc == 0) ? "unexpected EOF" : strerror(errno);
-        LOGI("Unable to read '%s': %s\n", nameBuf, msg);
+        LOGI("Unable to read '%s': %s", nameBuf, msg);
         close(fd);
         return false;
     }
@@ -674,7 +674,7 @@
     char* endp;
     pData->utime = strtoul(cp+1, &endp, 10);
     if (endp == cp+1)
-        LOGI("Warning: strtoul failed on utime ('%.30s...')\n", cp);
+        LOGI("Warning: strtoul failed on utime ('%.30s...')", cp);
 
     cp = strchr(cp+1, ' ');
     if (cp == NULL)
@@ -682,7 +682,7 @@
 
     pData->stime = strtoul(cp+1, &endp, 10);
     if (endp == cp+1)
-        LOGI("Warning: strtoul failed on stime ('%.30s...')\n", cp);
+        LOGI("Warning: strtoul failed on stime ('%.30s...')", cp);
 
     /*
      * Skip more stuff we don't care about.
@@ -698,12 +698,12 @@
      */
     pData->processor = strtol(cp+1, &endp, 10);
     if (endp == cp+1)
-        LOGI("Warning: strtoul failed on processor ('%.30s...')\n", cp);
+        LOGI("Warning: strtoul failed on processor ('%.30s...')", cp);
 
     return true;
 
 parse_fail:
-    LOGI("stat parse failed (%s)\n", lineBuf);
+    LOGI("stat parse failed (%s)", lineBuf);
     return false;
 }
 
diff --git a/vm/Native.cpp b/vm/Native.cpp
index bbb4ce6..dfbde90 100644
--- a/vm/Native.cpp
+++ b/vm/Native.cpp
@@ -92,13 +92,13 @@
         /* resolution always gets the same answer, so no race here */
         IF_LOGVV() {
             char* desc = dexProtoCopyMethodDescriptor(&method->prototype);
-            LOGVV("+++ resolved native %s.%s %s, invoking\n",
+            LOGVV("+++ resolved native %s.%s %s, invoking",
                 clazz->descriptor, method->name, desc);
             free(desc);
         }
         if (dvmIsSynchronizedMethod(method)) {
-            LOGE("ERROR: internal-native can't be declared 'synchronized'\n");
-            LOGE("Failing on %s.%s\n", method->clazz->descriptor, method->name);
+            LOGE("ERROR: internal-native can't be declared 'synchronized'");
+            LOGE("Failing on %s.%s", method->clazz->descriptor, method->name);
             dvmAbort();     // harsh, but this is VM-internal problem
         }
         DalvikBridgeFunc dfunc = (DalvikBridgeFunc) infunc;
@@ -118,7 +118,7 @@
 
     IF_LOGW() {
         char* desc = dexProtoCopyMethodDescriptor(&method->prototype);
-        LOGW("No implementation found for native %s.%s %s\n",
+        LOGW("No implementation found for native %s.%s %s",
             clazz->descriptor, method->name, desc);
         free(desc);
     }
@@ -184,7 +184,7 @@
     const SharedLib* pLib = (const SharedLib*) ventry;
     const SharedLib* pNewLib = (const SharedLib*) vnewEntry;
 
-    LOGD("--- comparing %p '%s' %p '%s'\n",
+    LOGD("--- comparing %p '%s' %p '%s'",
         pLib, pLib->pathName, pNewLib, pNewLib->pathName);
     return strcmp(pLib->pathName, pNewLib->pathName);
 }
@@ -269,27 +269,27 @@
          * Check this so we don't end up waiting for ourselves.  We need
          * to return "true" so the caller can continue.
          */
-        LOGI("threadid=%d: recursive native library load attempt (%s)\n",
+        LOGI("threadid=%d: recursive native library load attempt (%s)",
             self->threadId, pEntry->pathName);
         return true;
     }
 
-    LOGV("+++ retrieving %s OnLoad status\n", pEntry->pathName);
+    LOGV("+++ retrieving %s OnLoad status", pEntry->pathName);
     bool result;
 
     dvmLockMutex(&pEntry->onLoadLock);
     while (pEntry->onLoadResult == kOnLoadPending) {
-        LOGD("threadid=%d: waiting for %s OnLoad status\n",
+        LOGD("threadid=%d: waiting for %s OnLoad status",
             self->threadId, pEntry->pathName);
         ThreadStatus oldStatus = dvmChangeStatus(self, THREAD_VMWAIT);
         pthread_cond_wait(&pEntry->onLoadCond, &pEntry->onLoadLock);
         dvmChangeStatus(self, oldStatus);
     }
     if (pEntry->onLoadResult == kOnLoadOkay) {
-        LOGV("+++ earlier OnLoad(%s) okay\n", pEntry->pathName);
+        LOGV("+++ earlier OnLoad(%s) okay", pEntry->pathName);
         result = true;
     } else {
-        LOGV("+++ earlier OnLoad(%s) failed\n", pEntry->pathName);
+        LOGV("+++ earlier OnLoad(%s) failed", pEntry->pathName);
         result = false;
     }
     dvmUnlockMutex(&pEntry->onLoadLock);
@@ -327,7 +327,7 @@
     verbose = verbose && !!strncmp(pathName, "/vendor", sizeof("/vendor")-1);
 
     if (verbose)
-        LOGD("Trying to load lib %s %p\n", pathName, classLoader);
+        LOGD("Trying to load lib %s %p", pathName, classLoader);
 
     *detail = NULL;
 
@@ -338,12 +338,12 @@
     pEntry = findSharedLibEntry(pathName);
     if (pEntry != NULL) {
         if (pEntry->classLoader != classLoader) {
-            LOGW("Shared lib '%s' already opened by CL %p; can't open in %p\n",
+            LOGW("Shared lib '%s' already opened by CL %p; can't open in %p",
                 pathName, pEntry->classLoader, classLoader);
             return false;
         }
         if (verbose) {
-            LOGD("Shared lib '%s' already loaded in same CL %p\n",
+            LOGD("Shared lib '%s' already loaded in same CL %p",
                 pathName, classLoader);
         }
         if (!checkOnLoadResult(pEntry))
@@ -402,13 +402,13 @@
     SharedLib* pActualEntry = addSharedLibEntry(pNewEntry);
 
     if (pNewEntry != pActualEntry) {
-        LOGI("WOW: we lost a race to add a shared lib (%s CL=%p)\n",
+        LOGI("WOW: we lost a race to add a shared lib (%s CL=%p)",
             pathName, classLoader);
         freeSharedLibEntry(pNewEntry);
         return checkOnLoadResult(pActualEntry);
     } else {
         if (verbose)
-            LOGD("Added shared lib %s %p\n", pathName, classLoader);
+            LOGD("Added shared lib %s %p", pathName, classLoader);
 
         bool result = true;
         void* vonLoad;
@@ -416,7 +416,7 @@
 
         vonLoad = dlsym(handle, "JNI_OnLoad");
         if (vonLoad == NULL) {
-            LOGD("No JNI_OnLoad found in %s %p, skipping init\n",
+            LOGD("No JNI_OnLoad found in %s %p, skipping init",
                 pathName, classLoader);
         } else {
             /*
@@ -430,7 +430,7 @@
 
             self->classLoaderOverride = classLoader;
             oldStatus = dvmChangeStatus(self, THREAD_NATIVE);
-            LOGV("+++ calling JNI_OnLoad(%s)\n", pathName);
+            LOGV("+++ calling JNI_OnLoad(%s)", pathName);
             version = (*func)(gDvmJni.jniVm, NULL);
             dvmChangeStatus(self, oldStatus);
             self->classLoaderOverride = prevOverride;
@@ -438,7 +438,7 @@
             if (version != JNI_VERSION_1_2 && version != JNI_VERSION_1_4 &&
                 version != JNI_VERSION_1_6)
             {
-                LOGW("JNI_OnLoad returned bad version (%d) in %s %p\n",
+                LOGW("JNI_OnLoad returned bad version (%d) in %s %p",
                     version, pathName, classLoader);
                 /*
                  * It's unwise to call dlclose() here, but we can mark it
@@ -451,7 +451,7 @@
                  */
                 result = false;
             } else {
-                LOGV("+++ finished JNI_OnLoad %s\n", pathName);
+                LOGV("+++ finished JNI_OnLoad %s", pathName);
             }
         }
 
@@ -522,7 +522,7 @@
          * anything.
          */
 
-        LOGD("Unregistering JNI method %s.%s:%s\n",
+        LOGD("Unregistering JNI method %s.%s:%s",
             meth->clazz->descriptor, meth->name, meth->shorty);
         dvmSetNativeFunc(meth, dvmResolveNativeMethod, NULL);
     }
@@ -579,7 +579,7 @@
  */
 static char* mangleString(const char* str, int len)
 {
-    //LOGI("mangling '%s' %d\n", str, len);
+    //LOGI("mangling '%s' %d", str, len);
 
     assert(str[len] == '\0');
 
@@ -692,11 +692,11 @@
     int len;
 
     if (meth->clazz->classLoader != pLib->classLoader) {
-        LOGV("+++ not scanning '%s' for '%s' (wrong CL)\n",
+        LOGV("+++ not scanning '%s' for '%s' (wrong CL)",
             pLib->pathName, meth->name);
         return 0;
     } else
-        LOGV("+++ scanning '%s' for '%s'\n", pLib->pathName, meth->name);
+        LOGV("+++ scanning '%s' for '%s'", pLib->pathName, meth->name);
 
     /*
      * First, we try it without the signature.
@@ -710,7 +710,7 @@
     if (mangleCM == NULL)
         goto bail;
 
-    LOGV("+++ calling dlsym(%s)\n", mangleCM);
+    LOGV("+++ calling dlsym(%s)", mangleCM);
     func = dlsym(pLib->handle, mangleCM);
     if (func == NULL) {
         mangleSig =
@@ -724,13 +724,13 @@
 
         sprintf(mangleCMSig, "%s__%s", mangleCM, mangleSig);
 
-        LOGV("+++ calling dlsym(%s)\n", mangleCMSig);
+        LOGV("+++ calling dlsym(%s)", mangleCMSig);
         func = dlsym(pLib->handle, mangleCMSig);
         if (func != NULL) {
-            LOGV("Found '%s' with dlsym\n", mangleCMSig);
+            LOGV("Found '%s' with dlsym", mangleCMSig);
         }
     } else {
-        LOGV("Found '%s' with dlsym\n", mangleCM);
+        LOGV("Found '%s' with dlsym", mangleCM);
     }
 
 bail:
@@ -749,7 +749,7 @@
 static void* lookupSharedLibMethod(const Method* method)
 {
     if (gDvm.nativeLibs == NULL) {
-        LOGE("Unexpected init state: nativeLibs not ready\n");
+        LOGE("Unexpected init state: nativeLibs not ready");
         dvmAbort();
     }
     return (void*) dvmHashForeach(gDvm.nativeLibs, findMethodInLib,
diff --git a/vm/PointerSet.cpp b/vm/PointerSet.cpp
index ca7b537..4f3d7d5 100644
--- a/vm/PointerSet.cpp
+++ b/vm/PointerSet.cpp
@@ -130,10 +130,10 @@
             pSet->alloc = 4;
         else
             pSet->alloc *= 2;
-        LOGVV("expanding %p to %d\n", pSet, pSet->alloc);
+        LOGVV("expanding %p to %d", pSet, pSet->alloc);
         newList = (const void**)realloc(pSet->list, pSet->alloc * sizeof(void*));
         if (newList == NULL) {
-            LOGE("Failed expanding ptr set (alloc=%d)\n", pSet->alloc);
+            LOGE("Failed expanding ptr set (alloc=%d)", pSet->alloc);
             dvmAbort();
         }
         pSet->list = newList;
@@ -148,14 +148,14 @@
          * terminated "above" or "below" the value.
          */
         if (nearby != 0 && ptr < pSet->list[nearby-1]) {
-            //LOGD("nearby-1=%d %p, inserting %p at -1\n",
+            //LOGD("nearby-1=%d %p, inserting %p at -1",
             //    nearby-1, pSet->list[nearby-1], ptr);
             nearby--;
         } else if (ptr < pSet->list[nearby]) {
-            //LOGD("nearby=%d %p, inserting %p at +0\n",
+            //LOGD("nearby=%d %p, inserting %p at +0",
             //    nearby, pSet->list[nearby], ptr);
         } else {
-            //LOGD("nearby+1=%d %p, inserting %p at +1\n",
+            //LOGD("nearby+1=%d %p, inserting %p at +1",
             //    nearby+1, pSet->list[nearby+1], ptr);
             nearby++;
         }
@@ -267,7 +267,7 @@
  */
 void dvmPointerSetDump(const PointerSet* pSet)
 {
-    LOGI("PointerSet %p\n", pSet);
+    LOGI("PointerSet %p", pSet);
     int i;
     for (i = 0; i < pSet->count; i++)
         LOGI(" %2d: %p", i, pSet->list[i]);
diff --git a/vm/Profile.cpp b/vm/Profile.cpp
index c80a150..df0cf28 100644
--- a/vm/Profile.cpp
+++ b/vm/Profile.cpp
@@ -92,7 +92,7 @@
 
         clock_gettime(CLOCK_THREAD_CPUTIME_ID, &tm);
         if (!(tm.tv_nsec >= 0 && tm.tv_nsec < 1*1000*1000*1000)) {
-            LOGE("bad nsec: %ld\n", tm.tv_nsec);
+            LOGE("bad nsec: %ld", tm.tv_nsec);
             dvmAbort();
         }
 
@@ -167,13 +167,13 @@
      */
     int fd = open("/dev/qemu_trace", O_RDWR);
     if (fd < 0) {
-        LOGV("Unable to open /dev/qemu_trace\n");
+        LOGV("Unable to open /dev/qemu_trace");
     } else {
         gDvm.emulatorTracePage = mmap(0, SYSTEM_PAGE_SIZE, PROT_READ|PROT_WRITE,
                                       MAP_SHARED, fd, 0);
         close(fd);
         if (gDvm.emulatorTracePage == MAP_FAILED) {
-            LOGE("Unable to mmap /dev/qemu_trace\n");
+            LOGE("Unable to mmap /dev/qemu_trace");
             gDvm.emulatorTracePage = NULL;
         } else {
             *(u4*) gDvm.emulatorTracePage = 0;
@@ -210,7 +210,7 @@
         oldValue = gDvm.activeProfilers;
         newValue = oldValue + (enable ? 1 : -1);
         if (newValue < 0) {
-            LOGE("Can't have %d active profilers\n", newValue);
+            LOGE("Can't have %d active profilers", newValue);
             dvmAbort();
         }
     } while (android_atomic_release_cas(oldValue, newValue,
@@ -227,7 +227,7 @@
     dvmCompilerUpdateGlobalState();
 #endif
 
-    LOGD("+++ active profiler count now %d\n", newValue);
+    LOGD("+++ active profiler count now %d", newValue);
 }
 
 
@@ -337,7 +337,7 @@
 
     dvmLockMutex(&state->startStopLock);
     while (state->traceEnabled != 0) {
-        LOGI("TRACE start requested, but already in progress; stopping\n");
+        LOGI("TRACE start requested, but already in progress; stopping");
         dvmUnlockMutex(&state->startStopLock);
         dvmMethodTraceStop();
         dvmLockMutex(&state->startStopLock);
@@ -348,7 +348,7 @@
      * interpBreak flags only on the target thread.
      */
     updateActiveProfilers(kSubModeMethodTrace, true);
-    LOGI("TRACE STARTED: '%s' %dKB\n", traceFileName, bufferSize / 1024);
+    LOGI("TRACE STARTED: '%s' %dKB", traceFileName, bufferSize / 1024);
 
     /*
      * Allocate storage and open files.
@@ -369,7 +369,7 @@
         }
         if (state->traceFile == NULL) {
             int err = errno;
-            LOGE("Unable to open trace file '%s': %s\n",
+            LOGE("Unable to open trace file '%s': %s",
                 traceFileName, strerror(err));
             dvmThrowExceptionFmt(gDvm.exRuntimeException,
                 "Unable to open trace file '%s': %s",
@@ -503,7 +503,7 @@
 
     if (!state->traceEnabled) {
         /* somebody already stopped it, or it was never started */
-        LOGD("TRACE stop requested, but not running\n");
+        LOGD("TRACE stop requested, but not running");
         dvmUnlockMutex(&state->startStopLock);
         return;
     } else {
@@ -559,7 +559,7 @@
                         | (scanPtr[4] << 24);
             if (METHOD_ID(methodVal) == fillVal) {
                 u1* scanBase = state->buf + TRACE_HEADER_LEN;
-                LOGW("Found unfilled record at %d (of %d)\n",
+                LOGW("Found unfilled record at %d (of %d)",
                     (scanPtr - scanBase) / TRACE_REC_SIZE,
                     (finalCurOffset - TRACE_HEADER_LEN) / TRACE_REC_SIZE);
                 finalCurOffset = scanPtr - state->buf;
@@ -570,7 +570,7 @@
         }
     }
 
-    LOGI("TRACE STOPPED%s: writing %d records\n",
+    LOGI("TRACE STOPPED%s: writing %d records",
         state->overflow ? " (NOTE: overflowed buffer)" : "",
         (finalCurOffset - TRACE_HEADER_LEN) / TRACE_REC_SIZE);
     if (gDvm.debuggerActive) {
@@ -592,7 +592,7 @@
         state->traceFile = open_memstream(&memStreamPtr, &memStreamSize);
         if (state->traceFile == NULL) {
             /* not expected */
-            LOGE("Unable to open memstream\n");
+            LOGE("Unable to open memstream");
             dvmAbort();
         }
     }
@@ -646,7 +646,7 @@
         /* append the profiling data */
         if (fwrite(state->buf, finalCurOffset, 1, state->traceFile) != 1) {
             int err = errno;
-            LOGE("trace fwrite(%d) failed: %s\n",
+            LOGE("trace fwrite(%d) failed: %s",
                 finalCurOffset, strerror(err));
             dvmThrowExceptionFmt(gDvm.exRuntimeException,
                 "Trace data write failed: %s", strerror(err));
@@ -688,7 +688,7 @@
     if (!self->cpuClockBaseSet) {
         self->cpuClockBase = getClock();
         self->cpuClockBaseSet = true;
-        //LOGI("thread base id=%d 0x%llx\n",
+        //LOGI("thread base id=%d 0x%llx",
         //    self->threadId, self->cpuClockBase);
     }
 
@@ -825,7 +825,7 @@
     }
 
     *(pMagic+action) = addr;
-    LOGVV("Set %p = 0x%08x (%s.%s)\n",
+    LOGVV("Set %p = 0x%08x (%s.%s)",
         pMagic+action, addr, method->clazz->descriptor, method->name);
 #endif
 }
@@ -868,7 +868,7 @@
     /* in theory we should make this an atomic inc; in practice not important */
     gDvm.emulatorTraceEnableCount++;
     if (gDvm.emulatorTraceEnableCount == 1)
-        LOGD("--- emulator method traces enabled\n");
+        LOGD("--- emulator method traces enabled");
     updateActiveProfilers(kSubModeEmulatorTrace, true);
 }
 
@@ -878,13 +878,13 @@
 void dvmEmulatorTraceStop()
 {
     if (gDvm.emulatorTraceEnableCount == 0) {
-        LOGE("ERROR: emulator tracing not enabled\n");
+        LOGE("ERROR: emulator tracing not enabled");
         return;
     }
     /* in theory we should make this an atomic inc; in practice not important */
     gDvm.emulatorTraceEnableCount--;
     if (gDvm.emulatorTraceEnableCount == 0)
-        LOGD("--- emulator method traces disabled\n");
+        LOGD("--- emulator method traces disabled");
     updateActiveProfilers(kSubModeEmulatorTrace,
                           (gDvm.emulatorTraceEnableCount != 0));
 }
@@ -906,7 +906,7 @@
 void dvmStopInstructionCounting()
 {
     if (gDvm.instructionCountEnableCount == 0) {
-        LOGE("ERROR: instruction counting not enabled\n");
+        LOGE("ERROR: instruction counting not enabled");
         dvmAbort();
     }
     gDvm.instructionCountEnableCount--;
diff --git a/vm/RawDexFile.cpp b/vm/RawDexFile.cpp
index bec6675..9fef57c 100644
--- a/vm/RawDexFile.cpp
+++ b/vm/RawDexFile.cpp
@@ -210,7 +210,7 @@
      * doesn't have to be seeked anywhere in particular.
      */
     if (dvmDexFileOpenFromFd(optFd, &pDvmDex) != 0) {
-        LOGI("Unable to map cached %s\n", fileName);
+        LOGI("Unable to map cached %s", fileName);
         goto bail;
     }
 
@@ -218,7 +218,7 @@
         /* unlock the fd */
         if (!dvmUnlockCachedDexFile(optFd)) {
             /* uh oh -- this process needs to exit or we'll wedge the system */
-            LOGE("Unable to unlock DEX file\n");
+            LOGE("Unable to unlock DEX file");
             goto bail;
         }
         locked = false;
diff --git a/vm/ReferenceTable.cpp b/vm/ReferenceTable.cpp
index adf3383..764093f 100644
--- a/vm/ReferenceTable.cpp
+++ b/vm/ReferenceTable.cpp
@@ -64,7 +64,7 @@
     if (pRef->nextEntry == pRef->table + pRef->allocEntries) {
         /* reached end of allocated space; did we hit buffer max? */
         if (pRef->nextEntry == pRef->table + pRef->maxEntries) {
-            LOGW("ReferenceTable overflow (max=%d)\n", pRef->maxEntries);
+            LOGW("ReferenceTable overflow (max=%d)", pRef->maxEntries);
             return false;
         }
 
@@ -78,11 +78,11 @@
 
         newTable = (Object**) realloc(pRef->table, newSize * sizeof(Object*));
         if (newTable == NULL) {
-            LOGE("Unable to expand ref table (from %d to %d %d-byte entries)\n",
+            LOGE("Unable to expand ref table (from %d to %d %d-byte entries)",
                 pRef->allocEntries, newSize, sizeof(Object*));
             return false;
         }
-        LOGVV("Growing %p from %d to %d\n", pRef, pRef->allocEntries, newSize);
+        LOGVV("Growing %p from %d to %d", pRef, pRef->allocEntries, newSize);
 
         /* update entries; adjust "nextEntry" in case memory moved */
         pRef->nextEntry = newTable + (pRef->nextEntry - pRef->table);
@@ -141,10 +141,10 @@
     if (moveCount != 0) {
         /* remove from middle, slide the rest down */
         memmove(ptr, ptr+1, moveCount * sizeof(Object*));
-        //LOGV("LREF delete %p, shift %d down\n", obj, moveCount);
+        //LOGV("LREF delete %p, shift %d down", obj, moveCount);
     } else {
         /* last entry, falls off the end */
-        //LOGV("LREF delete %p from end\n", obj);
+        //LOGV("LREF delete %p from end", obj);
     }
 
     return true;
@@ -205,7 +205,7 @@
 static void logObject(const Object* obj, size_t elems, int identical, int equiv)
 {
     if (obj == NULL) {
-        LOGW("  NULL reference (count=%d)\n", equiv);
+        LOGW("  NULL reference (count=%d)", equiv);
         return;
     }
 
@@ -222,10 +222,10 @@
     }
 
     if (identical + equiv != 0) {
-        LOGW("%5d of %s%s (%d unique)\n", identical + equiv +1,
+        LOGW("%5d of %s%s (%d unique)", identical + equiv +1,
             descriptor, elemStr, equiv +1);
     } else {
-        LOGW("%5d of %s%s\n", identical + equiv +1, descriptor, elemStr);
+        LOGW("%5d of %s%s", identical + equiv +1, descriptor, elemStr);
     }
 }
 
@@ -239,7 +239,7 @@
     const char* descr)
 {
     if (count == 0) {
-        LOGW("%s reference table has no entries\n", descr);
+        LOGW("%s reference table has no entries", descr);
         return;
     }
 
@@ -247,7 +247,7 @@
      * Dump the most recent N entries.
      */
     const size_t kLast = 10;
-    LOGW("Last %d entries in %s reference table:\n", kLast, descr);
+    LOGW("Last %d entries in %s reference table:", kLast, descr);
     int start = count - kLast;
     if (start < 0)
         start = 0;
@@ -263,16 +263,16 @@
         if (ref->clazz == NULL) {
             /* should only be possible right after a plain dvmMalloc() */
             size_t size = dvmObjectSizeInHeap(ref);
-            LOGW("%5d: %p cls=(raw) (%zd bytes)\n", idx, ref, size);
+            LOGW("%5d: %p cls=(raw) (%zd bytes)", idx, ref, size);
         } else if (dvmIsClassObject(ref)) {
             ClassObject* clazz = (ClassObject*) ref;
-            LOGW("%5d: %p cls=%s '%s'\n", idx, ref, ref->clazz->descriptor,
+            LOGW("%5d: %p cls=%s '%s'", idx, ref, ref->clazz->descriptor,
                 clazz->descriptor);
         } else if (elems != 0) {
-            LOGW("%5d: %p cls=%s [%zd]\n",
+            LOGW("%5d: %p cls=%s [%zd]",
                 idx, ref, ref->clazz->descriptor, elems);
         } else {
-            LOGW("%5d: %p cls=%s\n", idx, ref, ref->clazz->descriptor);
+            LOGW("%5d: %p cls=%s", idx, ref, ref->clazz->descriptor);
         }
     }
 
@@ -281,7 +281,7 @@
      */
     Object** tableCopy = (Object**)malloc(sizeof(Object*) * count);
     if (tableCopy == NULL) {
-        LOGE("Unable to copy table with %d elements\n", count);
+        LOGE("Unable to copy table with %d elements", count);
         return;
     }
     memcpy(tableCopy, refs, sizeof(Object*) * count);
@@ -304,7 +304,7 @@
     /*
      * Dump uniquified table summary.
      */
-    LOGW("%s reference table summary (%d entries):\n", descr, count);
+    LOGW("%s reference table summary (%d entries):", descr, count);
     size_t equiv, identical;
     equiv = identical = 0;
     for (idx = 1; idx < count; idx++) {
diff --git a/vm/SignalCatcher.cpp b/vm/SignalCatcher.cpp
index a24764a..0b4c3c0 100644
--- a/vm/SignalCatcher.cpp
+++ b/vm/SignalCatcher.cpp
@@ -65,7 +65,7 @@
     pthread_kill(gDvm.signalCatcherHandle, SIGQUIT);
 
     pthread_join(gDvm.signalCatcherHandle, NULL);
-    LOGV("signal catcher has shut down\n");
+    LOGV("signal catcher has shut down");
 }
 
 
@@ -156,7 +156,7 @@
         /* write to memory buffer */
         FILE* memfp = open_memstream(&traceBuf, &traceLen);
         if (memfp == NULL) {
-            LOGE("Unable to create memstream for stack traces\n");
+            LOGE("Unable to create memstream for stack traces");
             traceBuf = NULL;        /* make sure it didn't touch this */
             /* continue on */
         } else {
@@ -186,16 +186,16 @@
          */
         int fd = open(gDvm.stackTraceFile, O_WRONLY | O_APPEND | O_CREAT, 0666);
         if (fd < 0) {
-            LOGE("Unable to open stack trace file '%s': %s\n",
+            LOGE("Unable to open stack trace file '%s': %s",
                 gDvm.stackTraceFile, strerror(errno));
         } else {
             ssize_t actual = write(fd, traceBuf, traceLen);
             if (actual != (ssize_t) traceLen) {
-                LOGE("Failed to write stack traces to %s (%d of %zd): %s\n",
+                LOGE("Failed to write stack traces to %s (%d of %zd): %s",
                     gDvm.stackTraceFile, (int) actual, traceLen,
                     strerror(errno));
             } else {
-                LOGI("Wrote stack traces to '%s'\n", gDvm.stackTraceFile);
+                LOGI("Wrote stack traces to '%s'", gDvm.stackTraceFile);
             }
             close(fd);
         }
@@ -210,7 +210,7 @@
  */
 static void handleSigUsr1()
 {
-    LOGI("SIGUSR1 forcing GC (no HPROF)\n");
+    LOGI("SIGUSR1 forcing GC (no HPROF)");
     dvmCollectGarbage();
 }
 
@@ -257,7 +257,7 @@
 
     UNUSED_PARAMETER(arg);
 
-    LOGV("Signal catcher thread started (threadid=%d)\n", self->threadId);
+    LOGV("Signal catcher thread started (threadid=%d)", self->threadId);
 
     /* set up mask with signals we want to handle */
     sigemptyset(&mask);
@@ -285,14 +285,14 @@
         cc = sigwait(&mask, &rcvd);
         if (cc != 0) {
             if (cc == EINTR) {
-                //LOGV("sigwait: EINTR\n");
+                //LOGV("sigwait: EINTR");
                 goto loop;
             }
             assert(!"bad result from sigwait");
         }
 
         if (!gDvm.haltSignalCatcher) {
-            LOGI("threadid=%d: reacting to signal %d\n",
+            LOGI("threadid=%d: reacting to signal %d",
                 dvmThreadSelf()->threadId, rcvd);
         }
 
@@ -315,7 +315,7 @@
             break;
 #endif
         default:
-            LOGE("unexpected signal %d\n", rcvd);
+            LOGE("unexpected signal %d", rcvd);
             break;
         }
     }
diff --git a/vm/StdioConverter.cpp b/vm/StdioConverter.cpp
index a98d473..45c2668 100644
--- a/vm/StdioConverter.cpp
+++ b/vm/StdioConverter.cpp
@@ -69,16 +69,16 @@
         return false;
 
     if (pipe(pipeStorage->stdoutPipe) != 0) {
-        LOGW("pipe failed: %s\n", strerror(errno));
+        LOGW("pipe failed: %s", strerror(errno));
         return false;
     }
     if (pipe(pipeStorage->stderrPipe) != 0) {
-        LOGW("pipe failed: %s\n", strerror(errno));
+        LOGW("pipe failed: %s", strerror(errno));
         return false;
     }
 
     if (dup2(pipeStorage->stdoutPipe[1], kFilenoStdout) != kFilenoStdout) {
-        LOGW("dup2(1) failed: %s\n", strerror(errno));
+        LOGW("dup2(1) failed: %s", strerror(errno));
         return false;
     }
     close(pipeStorage->stdoutPipe[1]);
@@ -87,7 +87,7 @@
     /* don't redirect stderr on sim -- logs get written there! */
     /* (don't need this on the sim anyway) */
     if (dup2(pipeStorage->stderrPipe[1], kFilenoStderr) != kFilenoStderr) {
-        LOGW("dup2(2) failed: %d %s\n", errno, strerror(errno));
+        LOGW("dup2(2) failed: %d %s", errno, strerror(errno));
         return false;
     }
     close(pipeStorage->stderrPipe[1]);
@@ -132,7 +132,7 @@
     printf("Shutting down\n");
     fflush(stdout);
 
-    LOGD("Joining stdio converter...\n");
+    LOGD("Joining stdio converter...");
     pthread_join(gDvm.stdioConverterHandle, NULL);
 }
 
@@ -181,12 +181,12 @@
 
         if (fdCount < 0) {
             if (errno != EINTR) {
-                LOGE("select on stdout/stderr failed\n");
+                LOGE("select on stdout/stderr failed");
                 break;
             }
-            LOGD("Got EINTR, ignoring\n");
+            LOGD("Got EINTR, ignoring");
         } else if (fdCount == 0) {
-            LOGD("WEIRD: select returned zero\n");
+            LOGD("WEIRD: select returned zero");
         } else {
             bool err = false;
             if (FD_ISSET(pipeStorage->stdoutPipe[0], &readfds)) {
@@ -200,7 +200,7 @@
 
             /* probably EOF; give up */
             if (err) {
-                LOGW("stdio converter got read error; shutting it down\n");
+                LOGW("stdio converter got read error; shutting it down");
                 break;
             }
         }
@@ -232,11 +232,11 @@
     want = kMaxLine - data->count;
     actual = read(fd, data->buf + data->count, want);
     if (actual <= 0) {
-        LOGW("read %s: (%d,%d) failed (%d): %s\n",
+        LOGW("read %s: (%d,%d) failed (%d): %s",
             tag, fd, want, (int)actual, strerror(errno));
         return false;
     } else {
-        //LOGI("read %s: %d at %d\n", tag, actual, data->count);
+        //LOGI("read %s: %d at %d", tag, actual, data->count);
     }
     data->count += actual;
 
@@ -250,7 +250,7 @@
     for (i = data->count; i > 0; i--, cp++) {
         if (*cp == '\n' || (*cp == '\r' && i != 0 && *(cp+1) != '\n')) {
             *cp = '\0';
-            //LOGW("GOT %d at %d '%s'\n", cp - start, start - data->buf, start);
+            //LOGW("GOT %d at %d '%s'", cp - start, start - data->buf, start);
             LOG(LOG_INFO, tag, "%s", start);
             start = cp+1;
         }
diff --git a/vm/Sync.cpp b/vm/Sync.cpp
index f3781b3..8257f80 100644
--- a/vm/Sync.cpp
+++ b/vm/Sync.cpp
@@ -98,11 +98,11 @@
 
     mon = (Monitor*) calloc(1, sizeof(Monitor));
     if (mon == NULL) {
-        LOGE("Unable to allocate monitor\n");
+        LOGE("Unable to allocate monitor");
         dvmAbort();
     }
     if (((u4)mon & 7) != 0) {
-        LOGE("Misaligned monitor: %p\n", mon);
+        LOGE("Misaligned monitor: %p", mon);
         dvmAbort();
     }
     mon->obj = obj;
@@ -560,7 +560,7 @@
 #endif
     endSec = ts->tv_sec + msec / 1000;
     if (endSec >= 0x7fffffff) {
-        LOGV("NOTE: end time exceeds epoch\n");
+        LOGV("NOTE: end time exceeds epoch");
         endSec = 0x7ffffffe;
     }
     ts->tv_sec = endSec;
diff --git a/vm/Thread.cpp b/vm/Thread.cpp
index 0e54701..5dea339 100644
--- a/vm/Thread.cpp
+++ b/vm/Thread.cpp
@@ -253,13 +253,13 @@
 
     /* allocate a TLS slot */
     if (pthread_key_create(&gDvm.pthreadKeySelf, threadExitCheck) != 0) {
-        LOGE("ERROR: pthread_key_create failed\n");
+        LOGE("ERROR: pthread_key_create failed");
         return false;
     }
 
     /* test our pthread lib */
     if (pthread_getspecific(gDvm.pthreadKeySelf) != NULL)
-        LOGW("WARNING: newly-created pthread TLS slot is not NULL\n");
+        LOGW("WARNING: newly-created pthread TLS slot is not NULL");
 
     /* prep thread-related locks and conditions */
     dvmInitMutex(&gDvm.threadListLock);
@@ -550,12 +550,12 @@
                 gDvm.offJavaLangThread_daemon))
         {
             /* should never happen; suspend it with the rest */
-            LOGW("threadid=%d: non-daemon id=%d still running at shutdown?!\n",
+            LOGW("threadid=%d: non-daemon id=%d still running at shutdown?!",
                 threadId, target->threadId);
         }
 
         char* threadName = dvmGetThreadName(target);
-        LOGV("threadid=%d: suspending daemon id=%d name='%s'\n",
+        LOGV("threadid=%d: suspending daemon id=%d name='%s'",
             threadId, target->threadId, threadName);
         free(threadName);
 
@@ -607,7 +607,7 @@
 
                 if (target->status == THREAD_RUNNING) {
                     if (!complained)
-                        LOGD("threadid=%d not ready yet\n", target->threadId);
+                        LOGD("threadid=%d not ready yet", target->threadId);
                     allSuspended = false;
                     /* keep going so we log each running daemon once */
                 }
@@ -616,12 +616,12 @@
             }
 
             if (allSuspended) {
-                LOGV("threadid=%d: all daemons have suspended\n", threadId);
+                LOGV("threadid=%d: all daemons have suspended", threadId);
                 break;
             } else {
                 if (!complained) {
                     complained = true;
-                    LOGD("threadid=%d: waiting briefly for daemon suspension\n",
+                    LOGD("threadid=%d: waiting briefly for daemon suspension",
                         threadId);
                 }
             }
@@ -687,7 +687,7 @@
     Method* init;
     JValue unused;
 
-    LOGV("+++ finishing prep on main VM thread\n");
+    LOGV("+++ finishing prep on main VM thread");
 
     /* main thread is always first in list at this point */
     thread = gDvm.threadList;
@@ -698,14 +698,14 @@
      * we create an instance of them.
      */
     if (!dvmInitClass(gDvm.classJavaLangClass)) {
-        LOGE("'Class' class failed to initialize\n");
+        LOGE("'Class' class failed to initialize");
         return false;
     }
     if (!dvmInitClass(gDvm.classJavaLangThreadGroup) ||
         !dvmInitClass(gDvm.classJavaLangThread) ||
         !dvmInitClass(gDvm.classJavaLangVMThread))
     {
-        LOGE("thread classes failed to initialize\n");
+        LOGE("thread classes failed to initialize");
         return false;
     }
 
@@ -719,7 +719,7 @@
      */
     threadObj = dvmAllocObject(gDvm.classJavaLangThread, ALLOC_DEFAULT);
     if (threadObj == NULL) {
-        LOGE("unable to allocate main thread object\n");
+        LOGE("unable to allocate main thread object");
         return false;
     }
     dvmReleaseTrackedAlloc(threadObj, NULL);
@@ -735,7 +735,7 @@
     dvmCallMethod(thread, init, threadObj, &unused, groupObj, threadNameStr,
         THREAD_NORM_PRIORITY, false);
     if (dvmCheckException(thread)) {
-        LOGE("exception thrown while constructing main thread object\n");
+        LOGE("exception thrown while constructing main thread object");
         return false;
     }
 
@@ -744,7 +744,7 @@
      */
     vmThreadObj = dvmAllocObject(gDvm.classJavaLangVMThread, ALLOC_DEFAULT);
     if (vmThreadObj == NULL) {
-        LOGE("unable to allocate main vmthread object\n");
+        LOGE("unable to allocate main vmthread object");
         return false;
     }
     dvmReleaseTrackedAlloc(vmThreadObj, NULL);
@@ -753,7 +753,7 @@
             "(Ljava/lang/Thread;)V");
     dvmCallMethod(thread, init, vmThreadObj, &unused, threadObj);
     if (dvmCheckException(thread)) {
-        LOGE("exception thrown while constructing main vmthread object\n");
+        LOGE("exception thrown while constructing main vmthread object");
         return false;
     }
 
@@ -781,7 +781,7 @@
      */
     Object* systemLoader = dvmGetSystemClassLoader();
     if (systemLoader == NULL) {
-        LOGW("WARNING: system class loader is NULL (setting main ctxt)\n");
+        LOGW("WARNING: system class loader is NULL (setting main ctxt)");
         /* keep going? */
     } else {
         dvmSetFieldObject(threadObj, gDvm.offJavaLangThread_contextClassLoader,
@@ -902,7 +902,7 @@
     thread->handle = pthread_self();
     thread->systemTid = dvmGetSysThreadId();
 
-    //LOGI("SYSTEM TID IS %d (pid is %d)\n", (int) thread->systemTid,
+    //LOGI("SYSTEM TID IS %d (pid is %d)", (int) thread->systemTid,
     //    (int) getpid());
     /*
      * If we were called by dvmAttachCurrentThread, the self value is
@@ -910,7 +910,7 @@
      */
     setThreadSelf(thread);
 
-    LOGV("threadid=%d: interp stack at %p\n",
+    LOGV("threadid=%d: interp stack at %p",
         thread->threadId, thread->interpStackStart - thread->interpStackSize);
 
     /*
@@ -950,7 +950,7 @@
  */
 static void unlinkThread(Thread* thread)
 {
-    LOG_THREAD("threadid=%d: removing from list\n", thread->threadId);
+    LOG_THREAD("threadid=%d: removing from list", thread->threadId);
     if (thread == gDvm.threadList) {
         assert(thread->prev == NULL);
         gDvm.threadList = thread->next;
@@ -972,7 +972,7 @@
         return;
 
     /* thread->threadId is zero at this point */
-    LOGVV("threadid=%d: freeing\n", thread->threadId);
+    LOGVV("threadid=%d: freeing", thread->threadId);
 
     if (thread->interpStackStart != NULL) {
         u1* interpStackBottom;
@@ -983,7 +983,7 @@
         free(interpStackBottom);
 #else
         if (munmap(interpStackBottom, thread->interpStackSize) != 0)
-            LOGW("munmap(thread stack) failed\n");
+            LOGW("munmap(thread stack) failed");
 #endif
     }
 
@@ -1022,7 +1022,7 @@
          * here to ensure we clean up after ourselves.
          */
         if (thread != NULL) {
-            LOGE("pthread_setspecific(%p) failed, err=%d\n", thread, cc);
+            LOGE("pthread_setspecific(%p) failed, err=%d", thread, cc);
             dvmAbort();     /* the world is fundamentally hosed */
         }
     }
@@ -1055,11 +1055,11 @@
     Thread* self = (Thread*) arg;
     assert(self != NULL);
 
-    LOGV("threadid=%d: threadExitCheck(%p) count=%d\n",
+    LOGV("threadid=%d: threadExitCheck(%p) count=%d",
         self->threadId, arg, self->threadExitCheckCount);
 
     if (self->status == THREAD_ZOMBIE) {
-        LOGW("threadid=%d: Weird -- shouldn't be in threadExitCheck\n",
+        LOGW("threadid=%d: Weird -- shouldn't be in threadExitCheck",
             self->threadId);
         return;
     }
@@ -1068,17 +1068,17 @@
         /*
          * Spin a couple of times to let other destructors fire.
          */
-        LOGD("threadid=%d: thread exiting, not yet detached (count=%d)\n",
+        LOGD("threadid=%d: thread exiting, not yet detached (count=%d)",
             self->threadId, self->threadExitCheckCount);
         self->threadExitCheckCount++;
         int cc = pthread_setspecific(gDvm.pthreadKeySelf, self);
         if (cc != 0) {
-            LOGE("threadid=%d: unable to re-add thread to TLS\n",
+            LOGE("threadid=%d: unable to re-add thread to TLS",
                 self->threadId);
             dvmAbort();
         }
     } else {
-        LOGE("threadid=%d: native thread exited without detaching\n",
+        LOGE("threadid=%d: native thread exited without detaching",
             self->threadId);
         dvmAbort();
     }
@@ -1102,7 +1102,7 @@
      */
     int num = dvmAllocBit(gDvm.threadIdMap);
     if (num < 0) {
-        LOGE("Ran out of thread IDs\n");
+        LOGE("Ran out of thread IDs");
         dvmAbort();     // TODO: make this a non-fatal error result
     }
 
@@ -1199,13 +1199,13 @@
     buf[sizeof(buf)-1] = '\0';
     int err = pthread_setname_np(pthread_self(), buf);
     if (err != 0) {
-        LOGW("Unable to set the name of current thread to '%s': %s\n",
+        LOGW("Unable to set the name of current thread to '%s': %s",
             buf, strerror(err));
     }
 #elif defined(HAVE_PRCTL)
     prctl(PR_SET_NAME, (unsigned long) s, 0, 0, 0);
 #else
-    LOGD("No way to set current thread's name (%s)\n", s);
+    LOGD("No way to set current thread's name (%s)", s);
 #endif
 }
 
@@ -1309,7 +1309,7 @@
          * resource limits.  VirtualMachineError is probably too severe,
          * so use OutOfMemoryError.
          */
-        LOGE("Thread creation failed (err=%s)\n", strerror(errno));
+        LOGE("Thread creation failed (err=%s)", strerror(errno));
 
         dvmSetFieldObject(threadObj, gDvm.offJavaLangThread_vmThread, NULL);
 
@@ -1402,7 +1402,7 @@
     while (newThread->status != THREAD_STARTING)
         pthread_cond_wait(&gDvm.threadStartCond, &gDvm.threadListLock);
 
-    LOG_THREAD("threadid=%d: adding to list\n", newThread->threadId);
+    LOG_THREAD("threadid=%d: adding to list", newThread->threadId);
     newThread->next = gDvm.threadList->next;
     if (newThread->next != NULL)
         newThread->next->prev = newThread;
@@ -1465,7 +1465,7 @@
     dvmLockThreadList(self);
     prepareThread(self);
 
-    LOG_THREAD("threadid=%d: created from interp\n", self->threadId);
+    LOG_THREAD("threadid=%d: created from interp", self->threadId);
 
     /*
      * Change our status and wake our parent, who will add us to the
@@ -1532,10 +1532,10 @@
     Method* run = self->threadObj->clazz->vtable[gDvm.voffJavaLangThread_run];
     JValue unused;
 
-    LOGV("threadid=%d: calling run()\n", self->threadId);
+    LOGV("threadid=%d: calling run()", self->threadId);
     assert(strcmp(run->name, "run") == 0);
     dvmCallMethod(self, run, self->threadObj, &unused);
-    LOGV("threadid=%d: exiting\n", self->threadId);
+    LOGV("threadid=%d: exiting", self->threadId);
 
     /*
      * Remove the thread from various lists, report its death, and free
@@ -1565,7 +1565,7 @@
     Object* handlerObj;
     Method* uncaughtHandler;
 
-    LOGW("threadid=%d: thread exiting with uncaught exception (group=%p)\n",
+    LOGW("threadid=%d: thread exiting with uncaught exception (group=%p)",
         self->threadId, group);
     assert(group != NULL);
 
@@ -1597,14 +1597,14 @@
             "uncaughtException", "(Ljava/lang/Thread;Ljava/lang/Throwable;)V");
 
     if (uncaughtHandler != NULL) {
-        //LOGI("+++ calling %s.uncaughtException\n",
+        //LOGI("+++ calling %s.uncaughtException",
         //     handlerObj->clazz->descriptor);
         JValue unused;
         dvmCallMethod(self, uncaughtHandler, handlerObj, &unused,
             self->threadObj, exception);
     } else {
         /* should be impossible, but handle it anyway */
-        LOGW("WARNING: no 'uncaughtException' method in class %s\n",
+        LOGW("WARNING: no 'uncaughtException' method in class %s",
             handlerObj->clazz->descriptor);
         dvmSetException(self, exception);
         dvmLogExceptionStackTrace();
@@ -1658,7 +1658,7 @@
     if (pthread_create(pHandle, &threadAttr, internalThreadStart,
             pArgs) != 0)
     {
-        LOGE("internal thread creation failed\n");
+        LOGE("internal thread creation failed");
         free(pArgs->name);
         free(pArgs);
         return false;
@@ -1686,7 +1686,7 @@
         pthread_cond_wait(&gDvm.threadStartCond, &gDvm.threadListLock);
 
     if (newThread == NULL) {
-        LOGW("internal thread create failed (createStatus=%d)\n", createStatus);
+        LOGW("internal thread create failed (createStatus=%d)", createStatus);
         assert(createStatus < 0);
         /* don't free pArgs -- if pthread_create succeeded, child owns it */
         dvmUnlockThreadList();
@@ -1735,7 +1735,7 @@
         pthread_cond_broadcast(&gDvm.threadStartCond);
         dvmUnlockThreadList();
 
-        LOG_THREAD("threadid=%d: internal '%s'\n",
+        LOG_THREAD("threadid=%d: internal '%s'",
             dvmThreadSelf()->threadId, pArgs->name);
 
         /* execute */
@@ -1811,7 +1811,7 @@
      * The native side of the thread is ready; add it to the list.  Once
      * it's on the list the thread is visible to the JDWP code and the GC.
      */
-    LOG_THREAD("threadid=%d: adding to list (attached)\n", self->threadId);
+    LOG_THREAD("threadid=%d: adding to list (attached)", self->threadId);
 
     dvmLockThreadList(self);
 
@@ -1893,7 +1893,7 @@
     dvmCallMethod(self, init, threadObj, &unused, (Object*)pArgs->group,
         threadNameStr, getThreadPriorityFromSystem(), isDaemon);
     if (dvmCheckException(self)) {
-        LOGE("exception thrown while constructing attached thread object\n");
+        LOGE("exception thrown while constructing attached thread object");
         goto fail_unlink;
     }
 
@@ -1912,7 +1912,7 @@
      * way that ensures another thread can't call start() on it.
      */
     if (dvmGetFieldObject(threadObj, gDvm.offJavaLangThread_vmThread) != NULL) {
-        LOGW("WOW: thread start hijack\n");
+        LOGW("WOW: thread start hijack");
         dvmThrowIllegalThreadStateException(
             "thread has already been started");
         /* We don't want to free anything associated with the thread
@@ -1938,7 +1938,7 @@
     dvmReleaseTrackedAlloc(vmThreadObj, self);
     dvmReleaseTrackedAlloc((Object*)threadNameStr, self);
 
-    LOG_THREAD("threadid=%d: attached from native, name=%s\n",
+    LOG_THREAD("threadid=%d: attached from native, name=%s",
         self->threadId, pArgs->name);
 
     /* tell the debugger & DDM */
@@ -2019,7 +2019,7 @@
         }
 
         if (!topIsNative) {
-            LOGE("ERROR: detaching thread with interp frames (count=%d)\n",
+            LOGE("ERROR: detaching thread with interp frames (count=%d)",
                 curDepth);
             dvmDumpThread(self, false);
             dvmAbort();
@@ -2027,7 +2027,7 @@
     }
 
     group = dvmGetFieldObject(self->threadObj, gDvm.offJavaLangThread_group);
-    LOG_THREAD("threadid=%d: detach (group=%p)\n", self->threadId, group);
+    LOG_THREAD("threadid=%d: detach (group=%p)", self->threadId, group);
 
     /*
      * Release any held monitors.  Since there are no interpreted stack
@@ -2113,7 +2113,7 @@
 
     dvmLockMutex(&traceState->startStopLock);
     if (traceState->traceEnabled) {
-        LOGI("threadid=%d: waiting for method trace to finish\n",
+        LOGI("threadid=%d: waiting for method trace to finish",
             self->threadId);
         while (traceState->traceEnabled) {
             dvmWaitCond(&traceState->threadExitCond,
@@ -2147,7 +2147,7 @@
         if (gDvm.nonDaemonThreadCount == 0) {
             int cc;
 
-            LOGV("threadid=%d: last non-daemon thread\n", self->threadId);
+            LOGV("threadid=%d: last non-daemon thread", self->threadId);
             //dvmDumpAllThreads(false);
             // cond var guarded by threadListLock, which we already hold
             cc = pthread_cond_signal(&gDvm.vmExitCond);
@@ -2155,7 +2155,7 @@
         }
     }
 
-    LOGV("threadid=%d: bye!\n", self->threadId);
+    LOGV("threadid=%d: bye!", self->threadId);
     releaseThreadId(self);
     dvmUnlockThreadList();
 
@@ -2185,7 +2185,7 @@
     lockThreadSuspendCount();
     dvmAddToSuspendCounts(thread, 1, 1);
 
-    LOG_THREAD("threadid=%d: suspend++, now=%d\n",
+    LOG_THREAD("threadid=%d: suspend++, now=%d",
         thread->threadId, thread->suspendCount);
     unlockThreadSuspendCount();
 
@@ -2213,11 +2213,11 @@
     if (thread->suspendCount > 0) {
         dvmAddToSuspendCounts(thread, -1, -1);
     } else {
-        LOG_THREAD("threadid=%d:  suspendCount already zero\n",
+        LOG_THREAD("threadid=%d:  suspendCount already zero",
             thread->threadId);
     }
 
-    LOG_THREAD("threadid=%d: suspend--, now=%d\n",
+    LOG_THREAD("threadid=%d: suspend--, now=%d",
         thread->threadId, thread->suspendCount);
 
     if (thread->suspendCount == 0) {
@@ -2254,7 +2254,7 @@
      */
     assert(self->suspendCount > 0);
     self->status = THREAD_SUSPENDED;
-    LOG_THREAD("threadid=%d: self-suspending (dbg)\n", self->threadId);
+    LOG_THREAD("threadid=%d: self-suspending (dbg)", self->threadId);
 
     /*
      * Tell JDWP that we've completed suspension.  The JDWP thread can't
@@ -2264,7 +2264,7 @@
      * If we got here via waitForDebugger(), don't do this part.
      */
     if (jdwpActivity) {
-        //LOGI("threadid=%d: clearing wait-for-event (my handle=%08x)\n",
+        //LOGI("threadid=%d: clearing wait-for-event (my handle=%08x)",
         //    self->threadId, (int) self->handle);
         dvmJdwpClearWaitForEventThread(gDvm.jdwpState);
     }
@@ -2279,13 +2279,13 @@
              * dump event is pending (assuming SignalCatcher was resumed for
              * just long enough to try to grab the thread-suspend lock).
              */
-            LOGD("threadid=%d: still suspended after undo (sc=%d dc=%d)\n",
+            LOGD("threadid=%d: still suspended after undo (sc=%d dc=%d)",
                 self->threadId, self->suspendCount, self->dbgSuspendCount);
         }
     }
     assert(self->suspendCount == 0 && self->dbgSuspendCount == 0);
     self->status = THREAD_RUNNING;
-    LOG_THREAD("threadid=%d: self-reviving (dbg), status=%d\n",
+    LOG_THREAD("threadid=%d: self-reviving (dbg), status=%d",
         self->threadId, self->status);
 
     unlockThreadSuspendCount();
@@ -2321,12 +2321,12 @@
     errno = 0;
     *pSavedThreadPrio = getpriority(PRIO_PROCESS, thread->systemTid);
     if (errno != 0) {
-        LOGW("Unable to get priority for threadid=%d sysTid=%d\n",
+        LOGW("Unable to get priority for threadid=%d sysTid=%d",
             thread->threadId, thread->systemTid);
         return 0;
     }
     if (get_sched_policy(thread->systemTid, pSavedThreadPolicy) != 0) {
-        LOGW("Unable to get policy for threadid=%d sysTid=%d\n",
+        LOGW("Unable to get policy for threadid=%d sysTid=%d",
             thread->threadId, thread->systemTid);
         return 0;
     }
@@ -2338,10 +2338,10 @@
      */
     if (*pSavedThreadPolicy == SP_BACKGROUND) {
         if (set_sched_policy(thread->systemTid, SP_FOREGROUND) != 0) {
-            LOGW("Couldn't set fg policy on tid %d\n", thread->systemTid);
+            LOGW("Couldn't set fg policy on tid %d", thread->systemTid);
         } else {
             changeFlags |= kChangedPolicy;
-            LOGD("Temporarily moving tid %d to fg (was %d)\n",
+            LOGD("Temporarily moving tid %d to fg (was %d)",
                 thread->systemTid, *pSavedThreadPolicy);
         }
     }
@@ -2353,11 +2353,11 @@
     if (*pSavedThreadPrio > 0) {
         const int kHigher = 0;
         if (setpriority(PRIO_PROCESS, thread->systemTid, kHigher) != 0) {
-            LOGW("Couldn't raise priority on tid %d to %d\n",
+            LOGW("Couldn't raise priority on tid %d to %d",
                 thread->systemTid, kHigher);
         } else {
             changeFlags |= kChangedPriority;
-            LOGD("Temporarily raised priority on tid %d (%d -> %d)\n",
+            LOGD("Temporarily raised priority on tid %d (%d -> %d)",
                 thread->systemTid, *pSavedThreadPrio, kHigher);
         }
     }
@@ -2373,10 +2373,10 @@
 {
     if ((changeFlags & kChangedPolicy) != 0) {
         if (set_sched_policy(thread->systemTid, savedThreadPolicy) != 0) {
-            LOGW("NOTE: couldn't reset tid %d to (%d)\n",
+            LOGW("NOTE: couldn't reset tid %d to (%d)",
                 thread->systemTid, savedThreadPolicy);
         } else {
-            LOGD("Restored policy of %d to %d\n",
+            LOGD("Restored policy of %d to %d",
                 thread->systemTid, savedThreadPolicy);
         }
     }
@@ -2384,10 +2384,10 @@
     if ((changeFlags & kChangedPriority) != 0) {
         if (setpriority(PRIO_PROCESS, thread->systemTid, savedThreadPrio) != 0)
         {
-            LOGW("NOTE: couldn't reset priority on thread %d to %d\n",
+            LOGW("NOTE: couldn't reset priority on thread %d to %d",
                 thread->systemTid, savedThreadPrio);
         } else {
-            LOGD("Restored priority on %d to %d\n",
+            LOGD("Restored priority on %d to %d",
                 thread->systemTid, savedThreadPrio);
         }
     }
@@ -2471,7 +2471,7 @@
          */
         if (!dvmIterativeSleep(sleepIter++, spinSleepTime, startWhen)) {
             if (spinSleepTime != FIRST_SLEEP) {
-                LOGW("threadid=%d: spin on suspend #%d threadid=%d (pcf=%d)\n",
+                LOGW("threadid=%d: spin on suspend #%d threadid=%d (pcf=%d)",
                     self->threadId, retryCount,
                     thread->threadId, priChangeFlags);
                 if (retryCount > 1) {
@@ -2486,11 +2486,11 @@
             spinSleepTime = MORE_SLEEP;
 
             if (retryCount++ == kMaxRetries) {
-                LOGE("Fatal spin-on-suspend, dumping threads\n");
+                LOGE("Fatal spin-on-suspend, dumping threads");
                 dvmDumpAllThreads(false);
 
                 /* log this after -- long traces will scroll off log */
-                LOGE("threadid=%d: stuck on threadid=%d, giving up\n",
+                LOGE("threadid=%d: stuck on threadid=%d, giving up",
                     self->threadId, thread->threadId);
 
                 /* try to get a debuggerd dump from the spinning thread */
@@ -2502,7 +2502,7 @@
     }
 
     if (complained) {
-        LOGW("threadid=%d: spin on suspend resolved in %lld msec\n",
+        LOGW("threadid=%d: spin on suspend resolved in %lld msec",
             self->threadId,
             (dvmGetRelativeTimeUsec() - firstStartWhen) / 1000);
         //dvmDumpThread(thread, false);   /* suspended, so dump is safe */
@@ -2551,7 +2551,7 @@
      */
     lockThreadSuspend("susp-all", why);
 
-    LOG_THREAD("threadid=%d: SuspendAll starting\n", self->threadId);
+    LOG_THREAD("threadid=%d: SuspendAll starting", self->threadId);
 
     /*
      * This is possible if the current thread was in VMWAIT mode when a
@@ -2609,7 +2609,7 @@
         /* wait for the other thread to see the pending suspend */
         waitForThreadSuspend(self, thread);
 
-        LOG_THREAD("threadid=%d:   threadid=%d status=%d sc=%d dc=%d\n",
+        LOG_THREAD("threadid=%d:   threadid=%d status=%d sc=%d dc=%d",
             self->threadId, thread->threadId, thread->status,
             thread->suspendCount, thread->dbgSuspendCount);
     }
@@ -2617,7 +2617,7 @@
     dvmUnlockThreadList();
     unlockThreadSuspend();
 
-    LOG_THREAD("threadid=%d: SuspendAll complete\n", self->threadId);
+    LOG_THREAD("threadid=%d: SuspendAll complete", self->threadId);
 }
 
 /*
@@ -2632,7 +2632,7 @@
     int cc;
 
     lockThreadSuspend("res-all", why);  /* one suspend/resume at a time */
-    LOG_THREAD("threadid=%d: ResumeAll starting\n", self->threadId);
+    LOG_THREAD("threadid=%d: ResumeAll starting", self->threadId);
 
     /*
      * Decrement the suspend counts for all threads.  No need for atomic
@@ -2658,7 +2658,7 @@
                                   why == SUSPEND_FOR_DEBUG_EVENT)
                                   ? -1 : 0);
         } else {
-            LOG_THREAD("threadid=%d:  suspendCount already zero\n",
+            LOG_THREAD("threadid=%d:  suspendCount already zero",
                 thread->threadId);
         }
     }
@@ -2699,7 +2699,7 @@
      * the correct order of acquisition, but it feels weird.)
      */
 
-    LOG_THREAD("threadid=%d: ResumeAll waking others\n", self->threadId);
+    LOG_THREAD("threadid=%d: ResumeAll waking others", self->threadId);
     unlockThreadSuspend();
 
     /*
@@ -2711,7 +2711,7 @@
     assert(cc == 0);
     unlockThreadSuspendCount();
 
-    LOG_THREAD("threadid=%d: ResumeAll complete\n", self->threadId);
+    LOG_THREAD("threadid=%d: ResumeAll complete", self->threadId);
 }
 
 /*
@@ -2725,7 +2725,7 @@
     int cc;
 
     lockThreadSuspend("undo", SUSPEND_FOR_DEBUG);
-    LOG_THREAD("threadid=%d: UndoDebuggerSusp starting\n", self->threadId);
+    LOG_THREAD("threadid=%d: UndoDebuggerSusp starting", self->threadId);
 
     /*
      * Decrement the suspend counts for all threads.  No need for atomic
@@ -2762,7 +2762,7 @@
 
     unlockThreadSuspend();
 
-    LOG_THREAD("threadid=%d: UndoDebuggerSusp complete\n", self->threadId);
+    LOG_THREAD("threadid=%d: UndoDebuggerSusp complete", self->threadId);
 }
 
 /*
@@ -2814,7 +2814,7 @@
 {
     Thread* self = dvmThreadSelf();
 
-    LOG_THREAD("threadid=%d: waiting for threadid=%d to sleep\n",
+    LOG_THREAD("threadid=%d: waiting for threadid=%d to sleep",
         self->threadId, thread->threadId);
 
     assert(thread->handle != dvmJdwpGetDebugThread(gDvm.jdwpState));
@@ -2823,7 +2823,7 @@
 
     waitForThreadSuspend(self, thread);
 
-    LOG_THREAD("threadid=%d: threadid=%d is now asleep\n",
+    LOG_THREAD("threadid=%d: threadid=%d is now asleep",
         self->threadId, thread->threadId);
 }
 
@@ -2846,7 +2846,7 @@
 
     bool needSuspend = (self->suspendCount != 0);
     if (needSuspend) {
-        LOG_THREAD("threadid=%d: self-suspending\n", self->threadId);
+        LOG_THREAD("threadid=%d: self-suspending", self->threadId);
         ThreadStatus oldStatus = self->status;      /* should be RUNNING */
         self->status = THREAD_SUSPENDED;
 
@@ -2861,7 +2861,7 @@
         }
         assert(self->suspendCount == 0 && self->dbgSuspendCount == 0);
         self->status = oldStatus;
-        LOG_THREAD("threadid=%d: self-reviving, status=%d\n",
+        LOG_THREAD("threadid=%d: self-reviving, status=%d",
             self->threadId, self->status);
     }
 
@@ -2898,7 +2898,7 @@
     if (self == NULL)
         self = dvmThreadSelf();
 
-    LOGVV("threadid=%d: (status %d -> %d)\n",
+    LOGVV("threadid=%d: (status %d -> %d)",
         self->threadId, self->status, newStatus);
 
     oldStatus = self->status;
@@ -2991,13 +2991,13 @@
     groupField = dvmFindStaticField(gDvm.classJavaLangThreadGroup,
         fieldName, "Ljava/lang/ThreadGroup;");
     if (groupField == NULL) {
-        LOGE("java.lang.ThreadGroup does not have an '%s' field\n", fieldName);
+        LOGE("java.lang.ThreadGroup does not have an '%s' field", fieldName);
         dvmThrowInternalError("bad definition for ThreadGroup");
         return NULL;
     }
     groupObj = dvmGetStaticFieldObject(groupField);
     if (groupObj == NULL) {
-        LOGE("java.lang.ThreadGroup.%s not initialized\n", fieldName);
+        LOGE("java.lang.ThreadGroup.%s not initialized", fieldName);
         dvmThrowInternalError(NULL);
         return NULL;
     }
@@ -3036,7 +3036,7 @@
         }
 
         if (thread == NULL) {
-            LOGW("WARNING: vmThreadObj=%p has thread=%p, not in thread list\n",
+            LOGW("WARNING: vmThreadObj=%p has thread=%p, not in thread list",
                 vmThreadObj, (Thread*)vmData);
             vmData = 0;
         }
@@ -3109,7 +3109,7 @@
     int newNice;
 
     if (newPriority < 1 || newPriority > 10) {
-        LOGW("bad priority %d\n", newPriority);
+        LOGW("bad priority %d", newPriority);
         newPriority = 5;
     }
     newNice = kNiceValues[newPriority-1];
@@ -3122,11 +3122,11 @@
 
     if (setpriority(PRIO_PROCESS, pid, newNice) != 0) {
         char* str = dvmGetThreadName(thread);
-        LOGI("setPriority(%d) '%s' to prio=%d(n=%d) failed: %s\n",
+        LOGI("setPriority(%d) '%s' to prio=%d(n=%d) failed: %s",
             pid, str, newPriority, newNice, strerror(errno));
         free(str);
     } else {
-        LOGV("setPriority(%d) to prio=%d(n=%d)\n",
+        LOGV("setPriority(%d) to prio=%d(n=%d)",
             pid, newPriority, newNice);
     }
 }
@@ -3144,7 +3144,7 @@
     errno = 0;
     sysprio = getpriority(PRIO_PROCESS, 0);
     if (sysprio == -1 && errno != 0) {
-        LOGW("getpriority() failed: %s\n", strerror(errno));
+        LOGW("getpriority() failed: %s", strerror(errno));
         return THREAD_NORM_PRIORITY;
     }
 
@@ -3324,7 +3324,7 @@
      */
     threadObj = thread->threadObj;
     if (threadObj == NULL) {
-        LOGI("Can't dump thread %d: threadObj not set\n", thread->threadId);
+        LOGI("Can't dump thread %d: threadObj not set", thread->threadId);
         return;
     }
     dvmAddTrackedAlloc(threadObj, NULL);
@@ -3337,7 +3337,7 @@
     isDaemon = dvmGetFieldBoolean(threadObj, gDvm.offJavaLangThread_daemon);
 
     if (pthread_getschedparam(pthread_self(), &policy, &sp) != 0) {
-        LOGW("Warning: pthread_getschedparam failed\n");
+        LOGW("Warning: pthread_getschedparam failed");
         policy = -1;
         sp.sched_priority = -1;
     }
@@ -3427,7 +3427,7 @@
     StringObject* nameObj;
 
     if (thread->threadObj == NULL) {
-        LOGW("threadObj is NULL, name not available\n");
+        LOGW("threadObj is NULL, name not available");
         return strdup("-unknown-");
     }
 
@@ -3529,17 +3529,17 @@
         dvmThreadSelf()->threadId, thread->threadId, thread->systemTid);
     killResult = pthread_kill(thread->handle, SIGSTKFLT);
     if (killResult != 0) {
-        LOGD("NOTE: pthread_kill #1 failed: %s\n", strerror(killResult));
+        LOGD("NOTE: pthread_kill #1 failed: %s", strerror(killResult));
     }
     usleep(2 * 1000 * 1000);    // TODO: timed-wait until debuggerd attaches
     killResult = pthread_kill(thread->handle, SIGSTKFLT);
     if (killResult != 0) {
-        LOGD("NOTE: pthread_kill #2 failed: %s\n", strerror(killResult));
+        LOGD("NOTE: pthread_kill #2 failed: %s", strerror(killResult));
     }
-    LOGD("Sent, pausing to let debuggerd run\n");
+    LOGD("Sent, pausing to let debuggerd run");
     usleep(8 * 1000 * 1000);    // TODO: timed-wait until debuggerd finishes
 
     /* ignore SIGSEGV so the eventual dmvAbort() doesn't notify debuggerd */
     signal(SIGSEGV, SIG_IGN);
-    LOGD("Continuing\n");
+    LOGD("Continuing");
 }
diff --git a/vm/UtfString.cpp b/vm/UtfString.cpp
index 0b7e4a0..a4bf6a8 100644
--- a/vm/UtfString.cpp
+++ b/vm/UtfString.cpp
@@ -48,7 +48,7 @@
     if (!dvmIsClassInitialized(gDvm.classJavaLangString)) {
         /* Perform first-time use initialization of the class. */
         if (!dvmInitClass(gDvm.classJavaLangString)) {
-            LOGE("FATAL: Could not initialize class String\n");
+            LOGE("FATAL: Could not initialize class String");
             dvmAbort();
         }
     }
diff --git a/vm/alloc/Alloc.cpp b/vm/alloc/Alloc.cpp
index 45ed53f..1dbac53 100644
--- a/vm/alloc/Alloc.cpp
+++ b/vm/alloc/Alloc.cpp
@@ -109,14 +109,14 @@
     /* find class, initialize if necessary */
     clazz = dvmFindSystemClass(descriptor);
     if (clazz == NULL) {
-        LOGE("Unable to find %s\n", descriptor);
+        LOGE("Unable to find %s", descriptor);
         return NULL;
     }
 
     init = dvmFindDirectMethodByDescriptor(clazz, "<init>",
             "(Ljava/lang/String;)V");
     if (init == NULL) {
-        LOGE("Unable to find String-arg constructor for %s\n", descriptor);
+        LOGE("Unable to find String-arg constructor for %s", descriptor);
         return NULL;
     }
 
@@ -129,7 +129,7 @@
     } else {
         msgStr = dvmCreateStringFromCstr(msg);
         if (msgStr == NULL) {
-            LOGW("Could not allocate message string \"%s\"\n", msg);
+            LOGW("Could not allocate message string \"%s\"", msg);
             dvmReleaseTrackedAlloc(obj, self);
             return NULL;
         }
@@ -175,7 +175,7 @@
     if (gDvm.outOfMemoryObj == NULL || gDvm.internalErrorObj == NULL ||
         gDvm.noClassDefFoundErrorObj == NULL)
     {
-        LOGW("Unable to create stock exceptions\n");
+        LOGW("Unable to create stock exceptions");
         return false;
     }
 
@@ -269,7 +269,7 @@
     assert(obj != NULL);
     assert(self != NULL);
     if (!dvmAddToReferenceTable(&self->internalLocalRefTable, obj)) {
-        LOGE("threadid=%d: unable to add %p to internal ref table\n",
+        LOGE("threadid=%d: unable to add %p to internal ref table",
             self->threadId, obj);
         dvmDumpThread(self, false);
         dvmAbort();
@@ -294,7 +294,7 @@
     if (!dvmRemoveFromReferenceTable(&self->internalLocalRefTable,
             self->internalLocalRefTable.table, obj))
     {
-        LOGE("threadid=%d: failed to remove %p from internal ref table\n",
+        LOGE("threadid=%d: failed to remove %p from internal ref table",
             self->threadId, obj);
         dvmAbort();
     }
diff --git a/vm/alloc/Copying.cpp b/vm/alloc/Copying.cpp
index 47df05f..b53b96f 100644
--- a/vm/alloc/Copying.cpp
+++ b/vm/alloc/Copying.cpp
@@ -1133,7 +1133,7 @@
         //      we can schedule them next time.  Watch out,
         //      because we may be expecting to free up space
         //      by calling finalizers.
-        LOG_REF("no room for pending finalizations\n");
+        LOG_REF("no room for pending finalizations");
         dvmAbort();
     }
 
@@ -1153,7 +1153,7 @@
                 if (!dvmHeapAddToHeapRefTable(&newPendingRefs, *ref)) {
                     //TODO: add the current table and allocate
                     //      a new, smaller one.
-                    LOG_REF("no room for any more pending finalizations: %zd\n",
+                    LOG_REF("no room for any more pending finalizations: %zd",
                             dvmHeapNumHeapRefTableEntries(&newPendingRefs));
                     dvmAbort();
                 }
@@ -1178,7 +1178,7 @@
         totalPendCount += newPendCount;
         finRefs = finRefs->next;
     }
-    LOG_REF("%zd finalizers triggered.\n", totalPendCount);
+    LOG_REF("%zd finalizers triggered.", totalPendCount);
     if (totalPendCount == 0) {
         /* No objects required finalization.
          * Free the empty temporary table.
@@ -1192,7 +1192,7 @@
     if (!dvmHeapAddTableToLargeTable(&gDvm.gcHeap->pendingFinalizationRefs,
                 &newPendingRefs))
     {
-        LOG_REF("can't insert new pending finalizations\n");
+        LOG_REF("can't insert new pending finalizations");
         dvmAbort();
     }
 
@@ -1537,7 +1537,7 @@
 #ifdef COUNT_PRECISE_METHODS
             /* the GC is running, so no lock required */
             if (dvmPointerSetAddEntry(gDvm.preciseMethods, method))
-                LOG_SCAV("PGC: added %s.%s %p\n",
+                LOG_SCAV("PGC: added %s.%s %p",
                              method->clazz->descriptor, method->name, method);
 #endif
 #if WITH_EXTRA_GC_CHECKS > 1
@@ -1580,13 +1580,13 @@
                  * some value.
                  */
                 if (saveArea->xtra.currentPc != thread->currentPc2) {
-                    LOGW("PGC: savedPC(%p) != current PC(%p), %s.%s ins=%p\n",
+                    LOGW("PGC: savedPC(%p) != current PC(%p), %s.%s ins=%p",
                         saveArea->xtra.currentPc, thread->currentPc2,
                         method->clazz->descriptor, method->name, method->insns);
                     if (saveArea->xtra.currentPc != NULL)
-                        LOGE("  pc inst = 0x%04x\n", *saveArea->xtra.currentPc);
+                        LOGE("  pc inst = 0x%04x", *saveArea->xtra.currentPc);
                     if (thread->currentPc2 != NULL)
-                        LOGE("  pc2 inst = 0x%04x\n", *thread->currentPc2);
+                        LOGE("  pc2 inst = 0x%04x", *thread->currentPc2);
                     dvmDumpThread(thread, false);
                 }
             } else {
@@ -1612,7 +1612,7 @@
             Method* nonConstMethod = (Method*) method;  // quiet gcc
             pMap = dvmGetExpandedRegisterMap(nonConstMethod);
 
-            //LOG_SCAV("PGC: %s.%s\n", method->clazz->descriptor, method->name);
+            //LOG_SCAV("PGC: %s.%s", method->clazz->descriptor, method->name);
 
             if (pMap != NULL) {
                 /* found map, get registers for this address */
@@ -1620,10 +1620,10 @@
                 regVector = dvmRegisterMapGetLine(pMap, addr);
                 /*
                 if (regVector == NULL) {
-                    LOG_SCAV("PGC: map but no entry for %s.%s addr=0x%04x\n",
+                    LOG_SCAV("PGC: map but no entry for %s.%s addr=0x%04x",
                                  method->clazz->descriptor, method->name, addr);
                 } else {
-                    LOG_SCAV("PGC: found map for %s.%s 0x%04x (t=%d)\n",
+                    LOG_SCAV("PGC: found map for %s.%s 0x%04x (t=%d)",
                                  method->clazz->descriptor, method->name, addr,
                                  thread->threadId);
                 }
@@ -1637,7 +1637,7 @@
                  * worth yelling a little.
                  */
                 if (gDvm.preciseGc) {
-                    LOG_SCAV("PGC: no map for %s.%s\n", method->clazz->descriptor, method->name);
+                    LOG_SCAV("PGC: no map for %s.%s", method->clazz->descriptor, method->name);
                 }
                 regVector = NULL;
             }
@@ -1673,7 +1673,7 @@
 #if WITH_EXTRA_GC_CHECKS > 0
                         if ((rval & 0x3) != 0 || !dvmIsValidObject((Object*) rval)) {
                             /* this is very bad */
-                            LOGE("PGC: invalid ref in reg %d: 0x%08x\n",
+                            LOGE("PGC: invalid ref in reg %d: 0x%08x",
                                 method->registersSize-1 - i, rval);
                         } else
 #endif
@@ -1690,7 +1690,7 @@
 #if WITH_EXTRA_GC_CHECKS > 1
                         if (dvmIsValidObject((Object*) rval)) {
                             /* this is normal, but we feel chatty */
-                            LOGD("PGC: ignoring valid ref in reg %d: 0x%08x\n",
+                            LOGD("PGC: ignoring valid ref in reg %d: 0x%08x",
                                  method->registersSize-1 - i, rval);
                         }
 #endif
@@ -1771,7 +1771,7 @@
              * native methods don't move around.  We can do a precise scan
              * of the arguments by examining the method signature.
              */
-            LOG_PIN("+++ native scan %s.%s\n",
+            LOG_PIN("+++ native scan %s.%s",
                     method->clazz->descriptor, method->name);
             assert(method->registersSize == method->insSize);
             if (!dvmIsStaticMethod(method)) {
@@ -1809,7 +1809,7 @@
                     obj = (Object *)*framePtr;          // debug, remove
                     if (dvmIsValidObject(obj)) {        // debug, remove
                         /* if we see a lot of these, our scan might be off */
-                        LOG_PIN("+++ did NOT pin obj %p\n", obj);
+                        LOG_PIN("+++ did NOT pin obj %p", obj);
                     }
                     break;
                 }
@@ -1818,7 +1818,7 @@
             const RegisterMap* pMap = dvmGetExpandedRegisterMap(method);
             const u1* regVector = NULL;
 
-            LOGI("conservative : %s.%s\n", method->clazz->descriptor, method->name);
+            LOGI("conservative : %s.%s", method->clazz->descriptor, method->name);
 
             if (pMap != NULL) {
                 int addr = saveArea->xtra.currentPc - method->insns;
@@ -2019,10 +2019,10 @@
     describeBlockQueue(heapSource);
     while (heapSource->queueHead != QUEUE_TAIL) {
         block = heapSource->queueHead;
-        LOG_SCAV("Dequeueing block %zu\n", block);
+        LOG_SCAV("Dequeueing block %zu", block);
         scavengeBlock(heapSource, block);
         heapSource->queueHead = heapSource->blockQueue[block];
-        LOG_SCAV("New queue head is %zu\n", heapSource->queueHead);
+        LOG_SCAV("New queue head is %zu", heapSource->queueHead);
     }
     LOG_SCAV("<<< scavengeBlockQueue()");
 }
diff --git a/vm/alloc/DdmHeap.cpp b/vm/alloc/DdmHeap.cpp
index ce2cb6a..62b8037 100644
--- a/vm/alloc/DdmHeap.cpp
+++ b/vm/alloc/DdmHeap.cpp
@@ -69,7 +69,7 @@
      */
     if (reason == gDvm.gcHeap->ddmHpifWhen) {
         if (shouldLock && ! dvmLockHeap()) {
-            LOGW("%s(): can't lock heap to clear when\n", __func__);
+            LOGW("%s(): can't lock heap to clear when", __func__);
             goto skip_when;
         }
         if (reason == gDvm.gcHeap->ddmHpifWhen) {
@@ -135,12 +135,12 @@
             gDvm.gcHeap->ddmHpifWhen = when;
             dvmUnlockHeap();
         } else {
-            LOGI("%s(): can't lock heap to set when\n", __func__);
+            LOGI("%s(): can't lock heap to set when", __func__);
             return false;
         }
         break;
     default:
-        LOGI("%s(): bad when value 0x%08x\n", __func__, when);
+        LOGI("%s(): bad when value 0x%08x", __func__, when);
         return false;
     }
 
@@ -228,7 +228,7 @@
 
         bytesLeft = ctx->bufLen - (size_t)(ctx->p - ctx->buf);
         if (bytesLeft < needed) {
-            LOGW("chunk is too big to transmit (chunklen=%zd, %zd bytes)\n",
+            LOGW("chunk is too big to transmit (chunklen=%zd, %zd bytes)",
                 chunklen, needed);
             return;
         }
@@ -414,7 +414,7 @@
         }
     }
     if (shouldLock && !dvmLockHeap()) {
-        LOGW("Can't lock heap for DDM HPSx dump\n");
+        LOGW("Can't lock heap for DDM HPSx dump");
         return;
     }
 
@@ -451,14 +451,14 @@
 
 bool dvmDdmHandleHpsgNhsgChunk(int when, int what, bool native)
 {
-    LOGI("dvmDdmHandleHpsgChunk(when %d, what %d, heap %d)\n", when, what,
+    LOGI("dvmDdmHandleHpsgChunk(when %d, what %d, heap %d)", when, what,
          native);
     switch (when) {
     case HPSG_WHEN_NEVER:
     case HPSG_WHEN_EVERY_GC:
         break;
     default:
-        LOGI("%s(): bad when value 0x%08x\n", __func__, when);
+        LOGI("%s(): bad when value 0x%08x", __func__, when);
         return false;
     }
 
@@ -467,7 +467,7 @@
     case HPSG_WHAT_DISTINCT_OBJECTS:
         break;
     default:
-        LOGI("%s(): bad what value 0x%08x\n", __func__, what);
+        LOGI("%s(): bad what value 0x%08x", __func__, what);
         return false;
     }
 
@@ -482,7 +482,7 @@
 //TODO: if what says we should dump immediately, signal (or do) it from here
         dvmUnlockHeap();
     } else {
-        LOGI("%s(): can't lock heap to set when/what\n", __func__);
+        LOGI("%s(): can't lock heap to set when/what", __func__);
         return false;
     }
 
diff --git a/vm/alloc/Heap.cpp b/vm/alloc/Heap.cpp
index 34f56cc..97df20f 100644
--- a/vm/alloc/Heap.cpp
+++ b/vm/alloc/Heap.cpp
@@ -259,7 +259,7 @@
      */
 //TODO: wait for the finalizers from the previous GC to finish
 collect_soft_refs:
-    LOGI_HEAP("Forcing collection of SoftReferences for %zu-byte allocation\n",
+    LOGI_HEAP("Forcing collection of SoftReferences for %zu-byte allocation",
             size);
     gcForMalloc(true);
     ptr = dvmHeapSourceAllocAndGrow(size);
@@ -268,7 +268,7 @@
     }
 //TODO: maybe wait for finalizers and try one last time
 
-    LOGE_HEAP("Out of memory on a %zd-byte allocation.\n", size);
+    LOGE_HEAP("Out of memory on a %zd-byte allocation.", size);
 //TODO: tell the HeapSource to dump its state
     dvmDumpThread(dvmThreadSelf(), false);
 
@@ -525,7 +525,7 @@
      */
 
     if (gcHeap->gcRunning) {
-        LOGW_HEAP("Attempted recursive GC\n");
+        LOGW_HEAP("Attempted recursive GC");
         return;
     }
 
@@ -553,7 +553,7 @@
     /* Set up the marking context.
      */
     if (!dvmHeapBeginMarkStep(spec->isPartial)) {
-        LOGE_HEAP("dvmHeapBeginMarkStep failed; aborting\n");
+        LOGE_HEAP("dvmHeapBeginMarkStep failed; aborting");
         dvmAbort();
     }
 
@@ -740,15 +740,15 @@
              rootTime, dirtyTime);
     }
     if (gcHeap->ddmHpifWhen != 0) {
-        LOGD_HEAP("Sending VM heap info to DDM\n");
+        LOGD_HEAP("Sending VM heap info to DDM");
         dvmDdmSendHeapInfo(gcHeap->ddmHpifWhen, false);
     }
     if (gcHeap->ddmHpsgWhen != 0) {
-        LOGD_HEAP("Dumping VM heap to DDM\n");
+        LOGD_HEAP("Dumping VM heap to DDM");
         dvmDdmSendHeapSegments(false, false);
     }
     if (gcHeap->ddmNhsgWhen != 0) {
-        LOGD_HEAP("Dumping native heap to DDM\n");
+        LOGD_HEAP("Dumping native heap to DDM");
         dvmDdmSendHeapSegments(false, true);
     }
 }
diff --git a/vm/alloc/HeapSource.cpp b/vm/alloc/HeapSource.cpp
index 29551a0..aa084ab 100644
--- a/vm/alloc/HeapSource.cpp
+++ b/vm/alloc/HeapSource.cpp
@@ -289,7 +289,7 @@
      * memory in the case where a process uses even less
      * than the starting size.
      */
-    LOGV_HEAP("Creating VM heap of size %zu\n", startSize);
+    LOGV_HEAP("Creating VM heap of size %zu", startSize);
     errno = 0;
 
     mspace msp = create_contiguous_mspace_with_base(startSize/2,
@@ -303,7 +303,7 @@
         /* There's no guarantee that errno has meaning when the call
          * fails, but it often does.
          */
-        LOGE_HEAP("Can't create VM heap of size (%zu,%zu): %s\n",
+        LOGE_HEAP("Can't create VM heap of size (%zu,%zu): %s",
             startSize/2, maximumSize, strerror(errno));
     }
 
@@ -340,7 +340,7 @@
 
     assert(hs != NULL);
     if (hs->numHeaps >= HEAP_SOURCE_MAX_HEAP_COUNT) {
-        LOGE("Attempt to create too many heaps (%zd >= %zd)\n",
+        LOGE("Attempt to create too many heaps (%zd >= %zd)",
                 hs->numHeaps, HEAP_SOURCE_MAX_HEAP_COUNT);
         dvmAbort();
         return false;
@@ -505,14 +505,14 @@
 
     gcHeap = (GcHeap *)malloc(sizeof(*gcHeap));
     if (gcHeap == NULL) {
-        LOGE_HEAP("Can't allocate heap descriptor\n");
+        LOGE_HEAP("Can't allocate heap descriptor");
         goto fail;
     }
     memset(gcHeap, 0, sizeof(*gcHeap));
 
     hs = (HeapSource *)malloc(sizeof(*hs));
     if (hs == NULL) {
-        LOGE_HEAP("Can't allocate heap source\n");
+        LOGE_HEAP("Can't allocate heap source");
         free(gcHeap);
         goto fail;
     }
@@ -530,15 +530,15 @@
     hs->heapBase = (char *)base;
     hs->heapLength = length;
     if (!addInitialHeap(hs, msp, growthLimit)) {
-        LOGE_HEAP("Can't add initial heap\n");
+        LOGE_HEAP("Can't add initial heap");
         goto fail;
     }
     if (!dvmHeapBitmapInit(&hs->liveBits, base, length, "dalvik-bitmap-1")) {
-        LOGE_HEAP("Can't create liveBits\n");
+        LOGE_HEAP("Can't create liveBits");
         goto fail;
     }
     if (!dvmHeapBitmapInit(&hs->markBits, base, length, "dalvik-bitmap-2")) {
-        LOGE_HEAP("Can't create markBits\n");
+        LOGE_HEAP("Can't create markBits");
         dvmHeapBitmapDelete(&hs->liveBits);
         goto fail;
     }
@@ -581,7 +581,7 @@
         /* Create a new heap for post-fork zygote allocations.  We only
          * try once, even if it fails.
          */
-        LOGV("Splitting out new zygote heap\n");
+        LOGV("Splitting out new zygote heap");
         gDvm.newZygoteHeapAllocated = true;
         dvmClearCardTable();
         return addNewHeap(gHs);
@@ -773,7 +773,7 @@
          * This allocation would push us over the soft limit; act as
          * if the heap is full.
          */
-        LOGV_HEAP("softLimit of %zd.%03zdMB hit for %zd-byte allocation\n",
+        LOGV_HEAP("softLimit of %zd.%03zdMB hit for %zd-byte allocation",
                   FRACTIONAL_MB(hs->softLimit), n);
         return NULL;
     }
@@ -1118,7 +1118,7 @@
     HeapSource *hs = gHs;
     size_t maximumSize = getMaximumSize(hs);
     if (max > maximumSize) {
-        LOGI_HEAP("Clamp target GC heap from %zd.%03zdMB to %u.%03uMB\n",
+        LOGI_HEAP("Clamp target GC heap from %zd.%03zdMB to %u.%03uMB",
                 FRACTIONAL_MB(max),
                 FRACTIONAL_MB(maximumSize));
         max = maximumSize;
@@ -1183,7 +1183,7 @@
 
     hs->targetUtilization =
             (size_t)(newTarget * (float)HEAP_UTILIZATION_MAX);
-    LOGV("Set heap target utilization to %zd/%d (%f)\n",
+    LOGV("Set heap target utilization to %zd/%d (%f)",
             hs->targetUtilization, HEAP_UTILIZATION_MAX, newTarget);
 }
 
@@ -1302,7 +1302,7 @@
     size_t nativeBytes = 0;
     dlmalloc_walk_free_pages(releasePagesInRange, &nativeBytes);
 
-    LOGD_HEAP("madvised %zd (GC) + %zd (native) = %zd total bytes\n",
+    LOGD_HEAP("madvised %zd (GC) + %zd (native) = %zd total bytes",
             heapBytes, nativeBytes, heapBytes + nativeBytes);
 }
 
diff --git a/vm/analysis/CodeVerify.cpp b/vm/analysis/CodeVerify.cpp
index bb847d0..0c30dac 100644
--- a/vm/analysis/CodeVerify.cpp
+++ b/vm/analysis/CodeVerify.cpp
@@ -225,7 +225,7 @@
     for (i = 0; i < kRegTypeMAX; i++) {
         for (j = i; j < kRegTypeMAX; j++) {
             if (gDvmMergeTab[i][j] != gDvmMergeTab[j][i]) {
-                LOGE("Symmetry violation: %d,%d vs %d,%d\n", i, j, j, i);
+                LOGE("Symmetry violation: %d,%d vs %d,%d", i, j, j, i);
                 dvmAbort();
             }
         }
@@ -260,7 +260,7 @@
     assert(checkType >= kRegType1nrSTART && checkType <= kRegType1nrEND);
 #if 0
     if (checkType < kRegType1nrSTART || checkType > kRegType1nrEND) {
-        LOG_VFY("Unexpected checkType %d (srcType=%d)\n", checkType, srcType);
+        LOG_VFY("Unexpected checkType %d (srcType=%d)", checkType, srcType);
         assert(false);
         return false;
     }
@@ -462,7 +462,7 @@
             if (uninitMap->map[idx].clazz != NULL &&
                 uninitMap->map[idx].clazz != clazz)
             {
-                LOG_VFY("VFY: addr %d already set to %p, not setting to %p\n",
+                LOG_VFY("VFY: addr %d already set to %p, not setting to %p",
                     addr, uninitMap->map[idx].clazz, clazz);
                 return -1;          // already set to something else??
             }
@@ -471,7 +471,7 @@
         }
     }
 
-    LOG_VFY("VFY: addr %d not found in uninit map\n", addr);
+    LOG_VFY("VFY: addr %d not found in uninit map", addr);
     assert(false);      // shouldn't happen
     return -1;
 }
@@ -505,7 +505,7 @@
     if ((type & 0x01) == 0) {
         return (ClassObject*) type;
     } else {
-        //LOG_VFY("VFY: attempted to use uninitialized reference\n");
+        //LOG_VFY("VFY: attempted to use uninitialized reference");
         return NULL;
     }
 }
@@ -586,16 +586,16 @@
      * allows the verifier to process the class successfully.
      */
 
-    //LOGI("Looking up '%s'\n", typeStr);
+    //LOGI("Looking up '%s'", typeStr);
     ClassObject* clazz;
     clazz = dvmFindClassNoInit(pDescriptor, meth->clazz->classLoader);
     if (clazz == NULL) {
         dvmClearOptException(dvmThreadSelf());
         if (strchr(pDescriptor, '$') != NULL) {
-            LOGV("VFY: unable to find class referenced in signature (%s)\n",
+            LOGV("VFY: unable to find class referenced in signature (%s)",
                 pDescriptor);
         } else {
-            LOG_VFY("VFY: unable to find class referenced in signature (%s)\n",
+            LOG_VFY("VFY: unable to find class referenced in signature (%s)",
                 pDescriptor);
         }
 
@@ -606,7 +606,7 @@
              * There should never be a problem loading primitive arrays.
              */
             if (pDescriptor[1] != 'L' && pDescriptor[1] != '[') {
-                LOG_VFY("VFY: invalid char in signature in '%s'\n",
+                LOG_VFY("VFY: invalid char in signature in '%s'",
                     pDescriptor);
                 *pFailure = VERIFY_ERROR_GENERIC;
             }
@@ -629,7 +629,7 @@
             clazz = gDvm.classJavaLangObject;
         } else {
             /* We are looking at a primitive type. */
-            LOG_VFY("VFY: invalid char in signature in '%s'\n", pDescriptor);
+            LOG_VFY("VFY: invalid char in signature in '%s'", pDescriptor);
             *pFailure = VERIFY_ERROR_GENERIC;
         }
 
@@ -639,7 +639,7 @@
     }
 
     if (dvmIsPrimitiveClass(clazz)) {
-        LOG_VFY("VFY: invalid use of primitive type '%s'\n", pDescriptor);
+        LOG_VFY("VFY: invalid use of primitive type '%s'", pDescriptor);
         *pFailure = VERIFY_ERROR_GENERIC;
         clazz = NULL;
     }
@@ -667,7 +667,7 @@
     while (*++endp != ';' && *endp != '\0')
         ;
     if (*endp != ';') {
-        LOG_VFY("VFY: bad signature component '%s' (missing ';')\n", sig);
+        LOG_VFY("VFY: bad signature component '%s' (missing ';')", sig);
         *pFailure = VERIFY_ERROR_GENERIC;
         return NULL;
     }
@@ -707,7 +707,7 @@
         while (*++endp != ';' && *endp != '\0')
             ;
         if (*endp != ';') {
-            LOG_VFY("VFY: bad signature component '%s' (missing ';')\n", sig);
+            LOG_VFY("VFY: bad signature component '%s' (missing ';')", sig);
             *pFailure = VERIFY_ERROR_GENERIC;
             return NULL;
         }
@@ -774,7 +774,7 @@
         }
 
         if (actualArgs >= expectedArgs) {
-            LOG_VFY("VFY: expected %d args, found more (%s)\n",
+            LOG_VFY("VFY: expected %d args, found more (%s)",
                 expectedArgs, descriptor);
             goto bad_sig;
         }
@@ -834,13 +834,13 @@
             actualArgs += 2;
             break;
         default:
-            LOG_VFY("VFY: unexpected signature type char '%c'\n", *descriptor);
+            LOG_VFY("VFY: unexpected signature type char '%c'", *descriptor);
             goto bad_sig;
         }
     }
 
     if (actualArgs != expectedArgs) {
-        LOG_VFY("VFY: expected %d args, found %d\n", expectedArgs, actualArgs);
+        LOG_VFY("VFY: expected %d args, found %d", expectedArgs, actualArgs);
         goto bad_sig;
     }
 
@@ -892,13 +892,13 @@
     return true;
 
 //fail:
-//    LOG_VFY_METH(meth, "VFY:  bad sig\n");
+//    LOG_VFY_METH(meth, "VFY:  bad sig");
 //    return false;
 
 bad_sig:
     {
         char* desc = dexProtoCopyMethodDescriptor(&meth->prototype);
-        LOG_VFY("VFY: bad signature '%s' for %s.%s\n",
+        LOG_VFY("VFY: bad signature '%s' for %s.%s",
             desc, meth->clazz->descriptor, meth->name);
         free(desc);
     }
@@ -1099,7 +1099,7 @@
             //char* curMethodDesc =
             //    dexProtoCopyMethodDescriptor(&meth->prototype);
 
-            LOGI("Could not find method %s.%s, referenced from method %s.%s\n",
+            LOGI("Could not find method %s.%s, referenced from method %s.%s",
                 dotMissingClass, methodName/*, methodDesc*/,
                 dotMethClass, meth->name/*, curMethodDesc*/);
 
@@ -1108,7 +1108,7 @@
             //free(curMethodDesc);
         }
 
-        LOG_VFY("VFY: unable to resolve %s method %u: %s.%s %s\n",
+        LOG_VFY("VFY: unable to resolve %s method %u: %s.%s %s",
             dvmMethodTypeStr(methodType), pDecInsn->vB,
             classDescriptor, methodName, methodDesc);
         free(methodDesc);
@@ -1124,7 +1124,7 @@
      */
     if (resMethod->name[0] == '<') {
         if (methodType != METHOD_DIRECT || !isInitMethod(resMethod)) {
-            LOG_VFY("VFY: invalid call to %s.%s\n",
+            LOG_VFY("VFY: invalid call to %s.%s",
                     resMethod->clazz->descriptor, resMethod->name);
             goto bad_sig;
         }
@@ -1135,7 +1135,7 @@
      * access flags for the target method.
      */
     if (!isCorrectInvokeKind(methodType, resMethod)) {
-        LOG_VFY("VFY: invoke type does not match method type of %s.%s\n",
+        LOG_VFY("VFY: invoke type does not match method type of %s.%s",
             resMethod->clazz->descriptor, resMethod->name);
         goto fail;
     }
@@ -1149,7 +1149,7 @@
         ClassObject* super = meth->clazz->super;
         if (super == NULL || resMethod->methodIndex > super->vtableCount) {
             char* desc = dexProtoCopyMethodDescriptor(&resMethod->prototype);
-            LOG_VFY("VFY: invalid invoke-super from %s.%s to super %s.%s %s\n",
+            LOG_VFY("VFY: invalid invoke-super from %s.%s to super %s.%s %s",
                     meth->clazz->descriptor, meth->name,
                     (super == NULL) ? "-" : super->descriptor,
                     resMethod->name, desc);
@@ -1174,7 +1174,7 @@
     assert(isRange || expectedArgs <= 5);
 
     if (expectedArgs > meth->outsSize) {
-        LOG_VFY("VFY: invalid arg count (%d) exceeds outsSize (%d)\n",
+        LOG_VFY("VFY: invalid arg count (%d) exceeds outsSize (%d)",
             expectedArgs, meth->outsSize);
         goto fail;
     }
@@ -1198,13 +1198,13 @@
 
         if (regTypeIsUninitReference(actualArgType) && resMethod->name[0] != '<')
         {
-            LOG_VFY("VFY: 'this' arg must be initialized\n");
+            LOG_VFY("VFY: 'this' arg must be initialized");
             goto fail;
         }
         if (methodType != METHOD_INTERFACE && actualArgType != kRegTypeZero) {
             actualThisRef = regTypeReferenceToClass(actualArgType, uninitMap);
             if (!dvmInstanceof(actualThisRef, resMethod->clazz)) {
-                LOG_VFY("VFY: 'this' arg '%s' not instance of '%s'\n",
+                LOG_VFY("VFY: 'this' arg '%s' not instance of '%s'",
                         actualThisRef->descriptor,
                         resMethod->clazz->descriptor);
                 goto fail;
@@ -1219,7 +1219,7 @@
      */
     while (*sig != '\0' && *sig != ')') {
         if (actualArgs >= expectedArgs) {
-            LOG_VFY("VFY: expected %d args, found more (%c)\n",
+            LOG_VFY("VFY: expected %d args, found more (%c)",
                 expectedArgs, *sig);
             goto bad_sig;
         }
@@ -1239,7 +1239,7 @@
                 verifyRegisterType(registerLine, getReg,
                     regTypeFromClass(clazz), pFailure);
                 if (!VERIFY_OK(*pFailure)) {
-                    LOG_VFY("VFY: bad arg %d (into %s)\n",
+                    LOG_VFY("VFY: bad arg %d (into %s)",
                             actualArgs, clazz->descriptor);
                     goto bad_sig;
                 }
@@ -1255,7 +1255,7 @@
                 verifyRegisterType(registerLine, getReg,
                     regTypeFromClass(clazz), pFailure);
                 if (!VERIFY_OK(*pFailure)) {
-                    LOG_VFY("VFY: bad arg %d (into %s)\n",
+                    LOG_VFY("VFY: bad arg %d (into %s)",
                             actualArgs, clazz->descriptor);
                     goto bad_sig;
                 }
@@ -1295,7 +1295,7 @@
             actualArgs += 2;
             break;
         default:
-            LOG_VFY("VFY: invocation target: bad signature type char '%c'\n",
+            LOG_VFY("VFY: invocation target: bad signature type char '%c'",
                 *sig);
             goto bad_sig;
         }
@@ -1304,13 +1304,13 @@
     }
     if (*sig != ')') {
         char* desc = dexProtoCopyMethodDescriptor(&resMethod->prototype);
-        LOG_VFY("VFY: invocation target: bad signature '%s'\n", desc);
+        LOG_VFY("VFY: invocation target: bad signature '%s'", desc);
         free(desc);
         goto bad_sig;
     }
 
     if (actualArgs != expectedArgs) {
-        LOG_VFY("VFY: expected %d args, found %d\n", expectedArgs, actualArgs);
+        LOG_VFY("VFY: expected %d args, found %d", expectedArgs, actualArgs);
         goto bad_sig;
     }
 
@@ -1320,7 +1320,7 @@
 bad_sig:
     if (resMethod != NULL) {
         char* desc = dexProtoCopyMethodDescriptor(&resMethod->prototype);
-        LOG_VFY("VFY:  rejecting call to %s.%s %s\n",
+        LOG_VFY("VFY:  rejecting call to %s.%s %s",
             resMethod->clazz->descriptor, resMethod->name, desc);
         free(desc);
     }
@@ -1355,7 +1355,7 @@
 
     if (fieldClass == NULL) {
         dvmClearOptException(dvmThreadSelf());
-        LOGV("VFY: unable to find class '%s' for field %s.%s, trying Object\n",
+        LOGV("VFY: unable to find class '%s' for field %s.%s, trying Object",
             field->signature, meth->clazz->descriptor, field->name);
         fieldClass = gDvm.classJavaLangObject;
     } else {
@@ -1404,13 +1404,13 @@
         goto bail;
 
     if (!regTypeIsReference(type)) {
-        LOG_VFY("VFY: tried to get class from non-ref register v%d (type=%d)\n",
+        LOG_VFY("VFY: tried to get class from non-ref register v%d (type=%d)",
             vsrc, type);
         *pFailure = VERIFY_ERROR_GENERIC;
         goto bail;
     }
     if (regTypeIsUninitReference(type)) {
-        LOG_VFY("VFY: register %u holds uninitialized reference\n", vsrc);
+        LOG_VFY("VFY: register %u holds uninitialized reference", vsrc);
         *pFailure = VERIFY_ERROR_GENERIC;
         goto bail;
     }
@@ -1437,7 +1437,7 @@
     RegType thisType = kRegTypeUnknown;
 
     if (pDecInsn->vA < 1) {
-        LOG_VFY("VFY: invoke lacks 'this'\n");
+        LOG_VFY("VFY: invoke lacks 'this'");
         *pFailure = VERIFY_ERROR_GENERIC;
         goto bail;
     }
@@ -1445,7 +1445,7 @@
     /* get the element type of the array held in vsrc */
     thisType = getRegisterType(registerLine, pDecInsn->vC);
     if (!regTypeIsReference(thisType)) {
-        LOG_VFY("VFY: tried to get class from non-ref register v%d (type=%d)\n",
+        LOG_VFY("VFY: tried to get class from non-ref register v%d (type=%d)",
             pDecInsn->vC, thisType);
         *pFailure = VERIFY_ERROR_GENERIC;
         goto bail;
@@ -1493,7 +1493,7 @@
     case kRegTypeLongHi:
     case kRegTypeDoubleHi:
         /* should never set these explicitly */
-        LOGE("BUG: explicit set of high register type\n");
+        LOGE("BUG: explicit set of high register type");
         dvmAbort();
         break;
 
@@ -1518,7 +1518,7 @@
         /* bad type - fall through */
 
     case kRegTypeConflict:      // should only be set during a merge
-        LOGE("BUG: set register to unknown type %d\n", newType);
+        LOGE("BUG: set register to unknown type %d", newType);
         dvmAbort();
         break;
     }
@@ -1549,7 +1549,7 @@
     const RegType* insnRegs = registerLine->regTypes;
     RegType srcType = insnRegs[vsrc];
 
-    //LOGD("check-reg v%u = %d\n", vsrc, checkType);
+    //LOGD("check-reg v%u = %d", vsrc, checkType);
     switch (checkType) {
     case kRegTypeFloat:
     case kRegTypeBoolean:
@@ -1560,7 +1560,7 @@
     case kRegTypeChar:
     case kRegTypeInteger:
         if (!canConvertTo1nr(srcType, checkType)) {
-            LOG_VFY("VFY: register1 v%u type %d, wanted %d\n",
+            LOG_VFY("VFY: register1 v%u type %d, wanted %d",
                 vsrc, srcType, checkType);
             *pFailure = VERIFY_ERROR_GENERIC;
         }
@@ -1568,11 +1568,11 @@
     case kRegTypeLongLo:
     case kRegTypeDoubleLo:
         if (insnRegs[vsrc+1] != srcType+1) {
-            LOG_VFY("VFY: register2 v%u-%u values %d,%d\n",
+            LOG_VFY("VFY: register2 v%u-%u values %d,%d",
                 vsrc, vsrc+1, insnRegs[vsrc], insnRegs[vsrc+1]);
             *pFailure = VERIFY_ERROR_GENERIC;
         } else if (!canConvertTo2(srcType, checkType)) {
-            LOG_VFY("VFY: register2 v%u type %d, wanted %d\n",
+            LOG_VFY("VFY: register2 v%u type %d, wanted %d",
                 vsrc, srcType, checkType);
             *pFailure = VERIFY_ERROR_GENERIC;
         }
@@ -1592,24 +1592,24 @@
     default:
         /* make sure checkType is initialized reference */
         if (!regTypeIsReference(checkType)) {
-            LOG_VFY("VFY: unexpected check type %d\n", checkType);
+            LOG_VFY("VFY: unexpected check type %d", checkType);
             assert(false);
             *pFailure = VERIFY_ERROR_GENERIC;
             break;
         }
         if (regTypeIsUninitReference(checkType)) {
-            LOG_VFY("VFY: uninitialized ref not expected as reg check\n");
+            LOG_VFY("VFY: uninitialized ref not expected as reg check");
             *pFailure = VERIFY_ERROR_GENERIC;
             break;
         }
         /* make sure srcType is initialized reference or always-NULL */
         if (!regTypeIsReference(srcType)) {
-            LOG_VFY("VFY: register1 v%u type %d, wanted ref\n", vsrc, srcType);
+            LOG_VFY("VFY: register1 v%u type %d, wanted ref", vsrc, srcType);
             *pFailure = VERIFY_ERROR_GENERIC;
             break;
         }
         if (regTypeIsUninitReference(srcType)) {
-            LOG_VFY("VFY: register1 v%u holds uninitialized ref\n", vsrc);
+            LOG_VFY("VFY: register1 v%u holds uninitialized ref", vsrc);
             *pFailure = VERIFY_ERROR_GENERIC;
             break;
         }
@@ -1630,14 +1630,14 @@
                 if (srcClass != checkClass &&
                     !dvmImplements(srcClass, checkClass))
                 {
-                    LOG_VFY("VFY: %s does not implement %s\n",
+                    LOG_VFY("VFY: %s does not implement %s",
                             srcClass->descriptor, checkClass->descriptor);
                     *pFailure = VERIFY_ERROR_GENERIC;
                 }
                 */
             } else {
                 if (!dvmInstanceof(srcClass, checkClass)) {
-                    LOG_VFY("VFY: %s is not instance of %s\n",
+                    LOG_VFY("VFY: %s is not instance of %s",
                             srcClass->descriptor, checkClass->descriptor);
                     *pFailure = VERIFY_ERROR_GENERIC;
                 }
@@ -1673,7 +1673,7 @@
 
     clazz = getUninitInstance(uninitMap, regTypeToUninitIndex(uninitType));
     if (clazz == NULL) {
-        LOGE("VFY: unable to find type=0x%x (idx=%d)\n",
+        LOGE("VFY: unable to find type=0x%x (idx=%d)",
             uninitType, regTypeToUninitIndex(uninitType));
         *pFailure = VERIFY_ERROR_GENERIC;
         return;
@@ -1687,7 +1687,7 @@
             changed++;
         }
     }
-    //LOGD("VFY: marked %d registers as initialized\n", changed);
+    //LOGD("VFY: marked %d registers as initialized", changed);
     assert(changed > 0);
 
     return;
@@ -1717,7 +1717,7 @@
     }
 
     //if (changed)
-    //    LOGD("VFY: marked %d uninitialized registers as invalid\n", changed);
+    //    LOGD("VFY: marked %d uninitialized registers as invalid", changed);
 }
 
 /*
@@ -1791,18 +1791,18 @@
         result = memcmp(line1->monitorEntries, line2->monitorEntries,
             regTable->insnRegCountPlus * sizeof(MonitorEntries));
         if (result != 0) {
-            LOG_VFY("monitorEntries mismatch\n");
+            LOG_VFY("monitorEntries mismatch");
             return result;
         }
         result = line1->monitorStackTop - line2->monitorStackTop;
         if (result != 0) {
-            LOG_VFY("monitorStackTop mismatch\n");
+            LOG_VFY("monitorStackTop mismatch");
             return result;
         }
         result = memcmp(line1->monitorStack, line2->monitorStack,
             line1->monitorStackTop);
         if (result != 0) {
-            LOG_VFY("monitorStack mismatch\n");
+            LOG_VFY("monitorStack mismatch");
             return result;
         }
     }
@@ -1909,7 +1909,7 @@
     RegType type = getRegisterType(registerLine, vsrc);
     checkTypeCategory(type, cat, pFailure);
     if (!VERIFY_OK(*pFailure)) {
-        LOG_VFY("VFY: copy1 v%u<-v%u type=%d cat=%d\n", vdst, vsrc, type, cat);
+        LOG_VFY("VFY: copy1 v%u<-v%u type=%d cat=%d", vdst, vsrc, type, cat);
     } else {
         setRegisterType(registerLine, vdst, type);
         if (cat == kTypeCategoryRef && registerLine->monitorEntries != NULL) {
@@ -1932,7 +1932,7 @@
     checkTypeCategory(typel, kTypeCategory2, pFailure);
     checkWidePair(typel, typeh, pFailure);
     if (!VERIFY_OK(*pFailure)) {
-        LOG_VFY("VFY: copy2 v%u<-v%u type=%d/%d\n", vdst, vsrc, typel, typeh);
+        LOG_VFY("VFY: copy2 v%u<-v%u type=%d/%d", vdst, vsrc, typel, typeh);
     } else {
         setRegisterType(registerLine, vdst, typel);
         /* target monitor stack bits will be cleared */
@@ -1955,7 +1955,7 @@
     type = getRegisterType(registerLine, vsrc);
     checkTypeCategory(type, cat, pFailure);
     if (!VERIFY_OK(*pFailure)) {
-        LOG_VFY("VFY: copyRes1 v%u<-v%u cat=%d type=%d\n",
+        LOG_VFY("VFY: copyRes1 v%u<-v%u cat=%d type=%d",
             vdst, vsrc, cat, type);
     } else {
         setRegisterType(registerLine, vdst, type);
@@ -1982,7 +1982,7 @@
     checkTypeCategory(typel, kTypeCategory2, pFailure);
     checkWidePair(typel, typeh, pFailure);
     if (!VERIFY_OK(*pFailure)) {
-        LOG_VFY("VFY: copyRes2 v%u<-v%u type=%d/%d\n",
+        LOG_VFY("VFY: copyRes2 v%u<-v%u type=%d/%d",
             vdst, vsrc, typel, typeh);
     } else {
         setRegisterType(registerLine, vdst, typel);
@@ -2148,7 +2148,7 @@
         newType = srcType;
 
     if (shiftCount >= 32) {
-        LOG_VFY("Got unexpectedly large shift count %u\n", shiftCount);
+        LOG_VFY("Got unexpectedly large shift count %u", shiftCount);
         /* fail? */
         return newType;
     }
@@ -2204,10 +2204,10 @@
     }
 
     if (newType != srcType) {
-        LOGVV("narrowing: %d(%d) --> %d to %d\n",
+        LOGVV("narrowing: %d(%d) --> %d to %d",
             shiftCount, isUnsignedShift, srcType, newType);
     } else {
-        LOGVV("not narrowed: %d(%d) --> %d\n",
+        LOGVV("not narrowed: %d(%d) --> %d",
             shiftCount, isUnsignedShift, srcType);
     }
     return newType;
@@ -2251,7 +2251,7 @@
     depth2 = getClassDepth(c2);
 
     if (gDebugVerbose) {
-        LOGVV("COMMON: %s(%d) + %s(%d)\n",
+        LOGVV("COMMON: %s(%d) + %s(%d)",
             c1->descriptor, depth1, c2->descriptor, depth2);
     }
 
@@ -2277,7 +2277,7 @@
     }
 
     if (gDebugVerbose) {
-        LOGVV("      : --> %s\n", c1->descriptor);
+        LOGVV("      : --> %s", c1->descriptor);
     }
     return c1;
 }
@@ -2360,7 +2360,7 @@
     }
     assert(arrayClass != NULL);
 
-    LOGVV("ArrayMerge '%s' + '%s' --> '%s'\n",
+    LOGVV("ArrayMerge '%s' + '%s' --> '%s'",
         c1->descriptor, c2->descriptor, arrayClass->descriptor);
     return arrayClass;
 }
@@ -2404,13 +2404,13 @@
 
     if (dvmIsInterfaceClass(c1) && dvmImplements(c2, c1)) {
         if (gDebugVerbose)
-            LOGVV("COMMON/I1: %s + %s --> %s\n",
+            LOGVV("COMMON/I1: %s + %s --> %s",
                 c1->descriptor, c2->descriptor, c1->descriptor);
         return c1;
     }
     if (dvmIsInterfaceClass(c2) && dvmImplements(c1, c2)) {
         if (gDebugVerbose)
-            LOGVV("COMMON/I2: %s + %s --> %s\n",
+            LOGVV("COMMON/I2: %s + %s --> %s",
                 c1->descriptor, c2->descriptor, c2->descriptor);
         return c2;
     }
@@ -2528,7 +2528,7 @@
          * way a register can transition out of "unknown", so this is not
          * just an optimization.)
          */
-        LOGVV("COPY into 0x%04x\n", nextInsn);
+        LOGVV("COPY into 0x%04x", nextInsn);
         copyLineToTable(regTable, nextInsn, workLine);
         dvmInsnSetChanged(insnFlags, nextInsn, true);
 #ifdef VERIFIER_STATS
@@ -2536,7 +2536,7 @@
 #endif
     } else {
         if (gDebugVerbose) {
-            LOGVV("MERGE into 0x%04x\n", nextInsn);
+            LOGVV("MERGE into 0x%04x", nextInsn);
             //dumpRegTypes(vdata, targetRegs, 0, "targ", NULL, 0);
             //dumpRegTypes(vdata, workRegs, 0, "work", NULL, 0);
         }
@@ -2564,7 +2564,7 @@
             if (memcmp(targetLine->monitorStack, workLine->monitorStack,
                     targetLine->monitorStackTop * sizeof(u4)) != 0)
             {
-                LOG_VFY_METH(meth, "VFY: mismatched monitor stacks at 0x%04x\n",
+                LOG_VFY_METH(meth, "VFY: mismatched monitor stacks at 0x%04x",
                     nextInsn);
                 return false;
             }
@@ -2581,7 +2581,7 @@
         }
 
         if (gDebugVerbose) {
-            //LOGI(" RESULT (changed=%d)\n", changed);
+            //LOGI(" RESULT (changed=%d)", changed);
             //dumpRegTypes(vdata, targetRegs, 0, "rslt", NULL, 0);
         }
 #ifdef VERIFIER_STATS
@@ -2630,7 +2630,7 @@
     bool mustBeLocal = false;
 
     if (!regTypeIsReference(objType)) {
-        LOG_VFY("VFY: attempt to access field in non-reference type %d\n",
+        LOG_VFY("VFY: attempt to access field in non-reference type %d",
             objType);
         *pFailure = VERIFY_ERROR_GENERIC;
         goto bail;
@@ -2638,7 +2638,7 @@
 
     instField = dvmOptResolveInstField(meth->clazz, fieldIdx, pFailure);
     if (instField == NULL) {
-        LOG_VFY("VFY: unable to resolve instance field %u\n", fieldIdx);
+        LOG_VFY("VFY: unable to resolve instance field %u", fieldIdx);
         assert(!VERIFY_OK(*pFailure));
         goto bail;
     }
@@ -2655,7 +2655,7 @@
     assert(objClass != NULL);
     if (regTypeIsUninitReference(objType)) {
         if (!isInitMethod(meth) || meth->clazz != objClass) {
-            LOG_VFY("VFY: attempt to access field via uninitialized ref\n");
+            LOG_VFY("VFY: attempt to access field via uninitialized ref");
             *pFailure = VERIFY_ERROR_GENERIC;
             goto bail;
         }
@@ -2663,7 +2663,7 @@
     }
 
     if (!dvmInstanceof(objClass, instField->clazz)) {
-        LOG_VFY("VFY: invalid field access (field %s.%s, through %s ref)\n",
+        LOG_VFY("VFY: invalid field access (field %s.%s, through %s ref)",
                 instField->clazz->descriptor, instField->name,
                 objClass->descriptor);
         *pFailure = VERIFY_ERROR_NO_FIELD;
@@ -2675,7 +2675,7 @@
         if (instField < objClass->ifields ||
             instField >= objClass->ifields + objClass->ifieldCount)
         {
-            LOG_VFY("VFY: invalid constructor field access (field %s in %s)\n",
+            LOG_VFY("VFY: invalid constructor field access (field %s in %s)",
                     instField->name, objClass->descriptor);
             *pFailure = VERIFY_ERROR_GENERIC;
             goto bail;
@@ -2704,7 +2704,7 @@
 
         pFieldId = dexGetFieldId(pDexFile, fieldIdx);
 
-        LOG_VFY("VFY: unable to resolve static field %u (%s) in %s\n", fieldIdx,
+        LOG_VFY("VFY: unable to resolve static field %u (%s) in %s", fieldIdx,
             dexStringById(pDexFile, pFieldId->nameIdx),
             dexStringByTypeIdx(pDexFile, pFieldId->classIdx));
         assert(!VERIFY_OK(*pFailure));
@@ -2729,7 +2729,7 @@
 
     /* make sure we're in the same class */
     if (meth->clazz != field->clazz) {
-        LOG_VFY_METH(meth, "VFY: can't modify final field %s.%s\n",
+        LOG_VFY_METH(meth, "VFY: can't modify final field %s.%s",
             field->clazz->descriptor, field->name);
         *pFailure = VERIFY_ERROR_ACCESS_FIELD;
         return;
@@ -2775,7 +2775,7 @@
          */
         checkTypeCategory(regType, kTypeCategory1nr, pFailure);
         if (!VERIFY_OK(*pFailure)) {
-            LOG_VFY_METH(meth, "Invalid reg type for array index (%d)\n",
+            LOG_VFY_METH(meth, "Invalid reg type for array index (%d)",
                 regType);
         }
     }
@@ -2805,7 +2805,7 @@
 
     for (i = 0; i < insnRegCount; i++) {
         if (insnRegs[i] == uninitThis) {
-            LOG_VFY("VFY: <init> returning without calling superclass init\n");
+            LOG_VFY("VFY: <init> returning without calling superclass init");
             return false;
         }
     }
@@ -2826,7 +2826,7 @@
     assert(insnIdx >= 0 && insnIdx < (int)dvmGetMethodInsnsSize(meth));
 
     if ((meth->insns[insnIdx] & 0xff) == OP_MOVE_EXCEPTION) {
-        LOG_VFY("VFY: invalid use of move-exception\n");
+        LOG_VFY("VFY: invalid use of move-exception");
         return false;
     }
     return true;
@@ -2888,7 +2888,7 @@
                                 &localFailure);
 
                 if (clazz == NULL) {
-                    LOG_VFY("VFY: unable to resolve exception class %u (%s)\n",
+                    LOG_VFY("VFY: unable to resolve exception class %u (%s)",
                         handler->typeIdx,
                         dexStringByTypeIdx(pDexFile, handler->typeIdx));
                     /* TODO: do we want to keep going?  If we don't fail
@@ -3082,7 +3082,7 @@
     storage = assignLineStorage(storage, &regTable->savedLine,
         trackMonitors, regTypeSize, monEntSize, stackSize);
 
-    //LOGD("Tracking registers for [%d], total %d in %d units\n",
+    //LOGD("Tracking registers for [%d], total %d in %d units",
     //    trackRegsFor, interestingCount-kExtraLines, insnsSize);
 
     assert(storage - (u1*)regTable->lineAlloc ==
@@ -3130,7 +3130,7 @@
     } else {
         expectedType = primitiveTypeToRegType(elemType);
     }
-    //LOGI("filled-new-array: %s -> %d\n", resClass->descriptor, expectedType);
+    //LOGI("filled-new-array: %s -> %d", resClass->descriptor, expectedType);
 
     /*
      * Verify each register.  If "argCount" is bad, verifyRegisterType()
@@ -3147,7 +3147,7 @@
 
         verifyRegisterType(registerLine, getReg, expectedType, pFailure);
         if (!VERIFY_OK(*pFailure)) {
-            LOG_VFY("VFY: filled-new-array arg %u(%u) not valid\n", ui, getReg);
+            LOG_VFY("VFY: filled-new-array arg %u(%u) not valid", ui, getReg);
             return;
         }
     }
@@ -3288,7 +3288,7 @@
 
     default:
         /* could handle this in a generic way, but this is probably safer */
-        LOG_VFY("GLITCH: verifier asked to replace opcode 0x%02x\n", opcode);
+        LOG_VFY("GLITCH: verifier asked to replace opcode 0x%02x", opcode);
         goto bail;
     }
 
@@ -3309,7 +3309,7 @@
         break;
     default:
         /* whoops */
-        LOGE("ERROR: stomped a %d-unit instruction with a verifier error\n",
+        LOGE("ERROR: stomped a %d-unit instruction with a verifier error",
             width);
         dvmAbort();
     }
@@ -3344,7 +3344,7 @@
     VerifyError* pFailure)
 {
     if (!regTypeIsReference(getRegisterType(workLine, regIdx))) {
-        LOG_VFY("VFY: monitor-enter on non-object\n");
+        LOG_VFY("VFY: monitor-enter on non-object");
         *pFailure = VERIFY_ERROR_GENERIC;
         return;
     }
@@ -3356,7 +3356,7 @@
     }
 
     if (workLine->monitorStackTop == kMaxMonitorStackDepth) {
-        LOG_VFY("VFY: monitor-enter stack overflow (%d)\n",
+        LOG_VFY("VFY: monitor-enter stack overflow (%d)",
             kMaxMonitorStackDepth);
         *pFailure = VERIFY_ERROR_GENERIC;
         return;
@@ -3377,7 +3377,7 @@
     VerifyError* pFailure)
 {
     if (!regTypeIsReference(getRegisterType(workLine, regIdx))) {
-        LOG_VFY("VFY: monitor-exit on non-object\n");
+        LOG_VFY("VFY: monitor-exit on non-object");
         *pFailure = VERIFY_ERROR_GENERIC;
         return;
     }
@@ -3389,7 +3389,7 @@
     }
 
     if (workLine->monitorStackTop == 0) {
-        LOG_VFY("VFY: monitor-exit stack underflow\n");
+        LOG_VFY("VFY: monitor-exit stack underflow");
         *pFailure = VERIFY_ERROR_GENERIC;
         return;
     }
@@ -3403,7 +3403,7 @@
     if ((workLine->monitorEntries[regIdx] & (1 << workLine->monitorStackTop))
             == 0)
     {
-        LOG_VFY("VFY: monitor-exit bit %d not set: addr=0x%04x (bits[%d]=0x%x)\n",
+        LOG_VFY("VFY: monitor-exit bit %d not set: addr=0x%04x (bits[%d]=0x%x)",
             workLine->monitorStackTop, insnIdx, regIdx,
             workLine->monitorEntries[regIdx]);
         *pFailure = VERIFY_ERROR_GENERIC;
@@ -3612,10 +3612,10 @@
     if (dvmWantVerboseVerification(meth)) {
         IF_LOGI() {
             char* desc = dexProtoCopyMethodDescriptor(&meth->prototype);
-            LOGI("Now verifying: %s.%s %s (ins=%d regs=%d)\n",
+            LOGI("Now verifying: %s.%s %s (ins=%d regs=%d)",
                 meth->clazz->descriptor, meth->name, desc,
                 meth->insSize, meth->registersSize);
-            LOGI(" ------ [0    4    8    12   16   20   24   28   32   36\n");
+            LOGI(" ------ [0    4    8    12   16   20   24   28   32   36");
             free(desc);
         }
         debugVerbose = true;
@@ -3676,7 +3676,7 @@
                 compareLineToTable(regTable, insnIdx, &regTable->workLine) != 0)
             {
                 char* desc = dexProtoCopyMethodDescriptor(&meth->prototype);
-                LOG_VFY("HUH? workLine diverged in %s.%s %s\n",
+                LOG_VFY("HUH? workLine diverged in %s.%s %s",
                         meth->clazz->descriptor, meth->name, desc);
                 free(desc);
                 dumpRegTypes(vdata, registerLine, 0, "work",
@@ -3691,12 +3691,12 @@
                 NULL, uninitMap, SHOW_REG_DETAILS);
         }
 
-        //LOGI("process %s.%s %s %d\n",
+        //LOGI("process %s.%s %s %d",
         //    meth->clazz->descriptor, meth->name, meth->descriptor, insnIdx);
         if (!verifyInstruction(meth, insnFlags, regTable, insnIdx,
                 uninitMap, &startGuess))
         {
-            //LOGD("+++ %s bailing at %d\n", meth->name, insnIdx);
+            //LOGD("+++ %s bailing at %d", meth->name, insnIdx);
             goto bail;
         }
 
@@ -3743,7 +3743,7 @@
                 IF_LOGD() {
                     char* desc =
                         dexProtoCopyMethodDescriptor(&meth->prototype);
-                    LOGD("VFY: dead code 0x%04x-%04x in %s.%s %s\n",
+                    LOGD("VFY: dead code 0x%04x-%04x in %s.%s %s",
                         deadStart, insnIdx-1,
                         meth->clazz->descriptor, meth->name, desc);
                     free(desc);
@@ -3755,7 +3755,7 @@
         if (deadStart >= 0) {
             IF_LOGD() {
                 char* desc = dexProtoCopyMethodDescriptor(&meth->prototype);
-                LOGD("VFY: dead code 0x%04x-%04x in %s.%s %s\n",
+                LOGD("VFY: dead code 0x%04x-%04x in %s.%s %s",
                     deadStart, insnIdx-1,
                     meth->clazz->descriptor, meth->name, desc);
                 free(desc);
@@ -3862,7 +3862,7 @@
          * the course of executing code then we have a problem.
          */
         if (decInsn.vA != 0) {
-            LOG_VFY("VFY: encountered data table in instruction stream\n");
+            LOG_VFY("VFY: encountered data table in instruction stream");
             failure = VERIFY_ERROR_GENERIC;
         }
         break;
@@ -3930,7 +3930,7 @@
         if (!checkConstructorReturn(meth, workLine, insnRegCount)) {
             failure = VERIFY_ERROR_GENERIC;
         } else if (getMethodReturnType(meth) != kRegTypeUnknown) {
-            LOG_VFY("VFY: return-void not expected\n");
+            LOG_VFY("VFY: return-void not expected");
             failure = VERIFY_ERROR_GENERIC;
         }
         break;
@@ -3942,13 +3942,13 @@
             RegType returnType = getMethodReturnType(meth);
             checkTypeCategory(returnType, kTypeCategory1nr, &failure);
             if (!VERIFY_OK(failure))
-                LOG_VFY("VFY: return-1nr not expected\n");
+                LOG_VFY("VFY: return-1nr not expected");
 
             /* check the register contents */
             returnType = getRegisterType(workLine, decInsn.vA);
             checkTypeCategory(returnType, kTypeCategory1nr, &failure);
             if (!VERIFY_OK(failure)) {
-                LOG_VFY("VFY: return-1nr on invalid register v%d\n",
+                LOG_VFY("VFY: return-1nr on invalid register v%d",
                     decInsn.vA);
             }
         }
@@ -3963,7 +3963,7 @@
             returnType = getMethodReturnType(meth);
             checkTypeCategory(returnType, kTypeCategory2, &failure);
             if (!VERIFY_OK(failure))
-                LOG_VFY("VFY: return-wide not expected\n");
+                LOG_VFY("VFY: return-wide not expected");
 
             /* check the register contents */
             returnType = getRegisterType(workLine, decInsn.vA);
@@ -3971,7 +3971,7 @@
             checkTypeCategory(returnType, kTypeCategory2, &failure);
             checkWidePair(returnType, returnTypeHi, &failure);
             if (!VERIFY_OK(failure)) {
-                LOG_VFY("VFY: return-wide on invalid register pair v%d\n",
+                LOG_VFY("VFY: return-wide on invalid register pair v%d",
                     decInsn.vA);
             }
         }
@@ -3983,7 +3983,7 @@
             RegType returnType = getMethodReturnType(meth);
             checkTypeCategory(returnType, kTypeCategoryRef, &failure);
             if (!VERIFY_OK(failure)) {
-                LOG_VFY("VFY: return-object not expected\n");
+                LOG_VFY("VFY: return-object not expected");
                 break;
             }
 
@@ -4011,7 +4011,7 @@
                 if (!dvmIsInterfaceClass(declClass) &&
                     !dvmInstanceof(resClass, declClass))
                 {
-                    LOG_VFY("VFY: returning %s (cl=%p), declared %s (cl=%p)\n",
+                    LOG_VFY("VFY: returning %s (cl=%p), declared %s (cl=%p)",
                             resClass->descriptor, resClass->classLoader,
                             declClass->descriptor, declClass->classLoader);
                     failure = VERIFY_ERROR_GENERIC;
@@ -4054,7 +4054,7 @@
         if (resClass == NULL) {
             const char* badClassDesc = dexStringByTypeIdx(pDexFile, decInsn.vB);
             dvmLogUnableToResolveClass(badClassDesc, meth);
-            LOG_VFY("VFY: unable to resolve const-class %d (%s) in %s\n",
+            LOG_VFY("VFY: unable to resolve const-class %d (%s) in %s",
                 decInsn.vB, badClassDesc, meth->clazz->descriptor);
             assert(failure != VERIFY_ERROR_GENERIC);
         } else {
@@ -4106,7 +4106,7 @@
         if (resClass == NULL) {
             const char* badClassDesc = dexStringByTypeIdx(pDexFile, decInsn.vB);
             dvmLogUnableToResolveClass(badClassDesc, meth);
-            LOG_VFY("VFY: unable to resolve check-cast %d (%s) in %s\n",
+            LOG_VFY("VFY: unable to resolve check-cast %d (%s) in %s",
                 decInsn.vB, badClassDesc, meth->clazz->descriptor);
             assert(failure != VERIFY_ERROR_GENERIC);
         } else {
@@ -4114,7 +4114,7 @@
 
             origType = getRegisterType(workLine, decInsn.vA);
             if (!regTypeIsReference(origType)) {
-                LOG_VFY("VFY: check-cast on non-reference in v%u\n",decInsn.vA);
+                LOG_VFY("VFY: check-cast on non-reference in v%u",decInsn.vA);
                 failure = VERIFY_ERROR_GENERIC;
                 break;
             }
@@ -4126,7 +4126,7 @@
         /* make sure we're checking a reference type */
         tmpType = getRegisterType(workLine, decInsn.vB);
         if (!regTypeIsReference(tmpType)) {
-            LOG_VFY("VFY: vB not a reference (%d)\n", tmpType);
+            LOG_VFY("VFY: vB not a reference (%d)", tmpType);
             failure = VERIFY_ERROR_GENERIC;
             break;
         }
@@ -4136,7 +4136,7 @@
         if (resClass == NULL) {
             const char* badClassDesc = dexStringByTypeIdx(pDexFile, decInsn.vC);
             dvmLogUnableToResolveClass(badClassDesc, meth);
-            LOG_VFY("VFY: unable to resolve instanceof %d (%s) in %s\n",
+            LOG_VFY("VFY: unable to resolve instanceof %d (%s) in %s",
                 decInsn.vC, badClassDesc, meth->clazz->descriptor);
             assert(failure != VERIFY_ERROR_GENERIC);
         } else {
@@ -4150,7 +4150,7 @@
         if (!VERIFY_OK(failure))
             break;
         if (resClass != NULL && !dvmIsArrayClass(resClass)) {
-            LOG_VFY("VFY: array-length on non-array\n");
+            LOG_VFY("VFY: array-length on non-array");
             failure = VERIFY_ERROR_GENERIC;
             break;
         }
@@ -4163,7 +4163,7 @@
         if (resClass == NULL) {
             const char* badClassDesc = dexStringByTypeIdx(pDexFile, decInsn.vB);
             dvmLogUnableToResolveClass(badClassDesc, meth);
-            LOG_VFY("VFY: unable to resolve new-instance %d (%s) in %s\n",
+            LOG_VFY("VFY: unable to resolve new-instance %d (%s) in %s",
                 decInsn.vB, badClassDesc, meth->clazz->descriptor);
             assert(failure != VERIFY_ERROR_GENERIC);
         } else {
@@ -4171,7 +4171,7 @@
 
             /* can't create an instance of an interface or abstract class */
             if (dvmIsAbstractClass(resClass) || dvmIsInterfaceClass(resClass)) {
-                LOG_VFY("VFY: new-instance on interface or abstract class %s\n",
+                LOG_VFY("VFY: new-instance on interface or abstract class %s",
                     resClass->descriptor);
                 failure = VERIFY_ERROR_INSTANTIATION;
                 break;
@@ -4199,11 +4199,11 @@
         if (resClass == NULL) {
             const char* badClassDesc = dexStringByTypeIdx(pDexFile, decInsn.vC);
             dvmLogUnableToResolveClass(badClassDesc, meth);
-            LOG_VFY("VFY: unable to resolve new-array %d (%s) in %s\n",
+            LOG_VFY("VFY: unable to resolve new-array %d (%s) in %s",
                 decInsn.vC, badClassDesc, meth->clazz->descriptor);
             assert(failure != VERIFY_ERROR_GENERIC);
         } else if (!dvmIsArrayClass(resClass)) {
-            LOG_VFY("VFY: new-array on non-array class\n");
+            LOG_VFY("VFY: new-array on non-array class");
             failure = VERIFY_ERROR_GENERIC;
         } else {
             /* make sure "size" register is valid type */
@@ -4219,11 +4219,11 @@
         if (resClass == NULL) {
             const char* badClassDesc = dexStringByTypeIdx(pDexFile, decInsn.vB);
             dvmLogUnableToResolveClass(badClassDesc, meth);
-            LOG_VFY("VFY: unable to resolve filled-array %d (%s) in %s\n",
+            LOG_VFY("VFY: unable to resolve filled-array %d (%s) in %s",
                 decInsn.vB, badClassDesc, meth->clazz->descriptor);
             assert(failure != VERIFY_ERROR_GENERIC);
         } else if (!dvmIsArrayClass(resClass)) {
-            LOG_VFY("VFY: filled-new-array on non-array class\n");
+            LOG_VFY("VFY: filled-new-array on non-array class");
             failure = VERIFY_ERROR_GENERIC;
         } else {
             bool isRange = (decInsn.opcode == OP_FILLED_NEW_ARRAY_RANGE ||
@@ -4261,7 +4261,7 @@
         resClass = getClassFromRegister(workLine, decInsn.vA, &failure);
         if (VERIFY_OK(failure) && resClass != NULL) {
             if (!dvmInstanceof(resClass, gDvm.exThrowable)) {
-                LOG_VFY("VFY: thrown class %s not instanceof Throwable\n",
+                LOG_VFY("VFY: thrown class %s not instanceof Throwable",
                         resClass->descriptor);
                 failure = VERIFY_ERROR_GENERIC;
             }
@@ -4299,7 +4299,7 @@
                 resClass->elementClass->primitiveType == PRIM_NOT ||
                 resClass->elementClass->primitiveType == PRIM_VOID)
             {
-                LOG_VFY("VFY: invalid fill-array-data on %s\n",
+                LOG_VFY("VFY: invalid fill-array-data on %s",
                         resClass->descriptor);
                 failure = VERIFY_ERROR_GENERIC;
                 break;
@@ -4315,7 +4315,7 @@
              */
             arrayData = insns + (insns[1] | (((s4)insns[2]) << 16));
             if (arrayData[0] != kArrayDataSignature) {
-                LOG_VFY("VFY: invalid magic for array-data\n");
+                LOG_VFY("VFY: invalid magic for array-data");
                 failure = VERIFY_ERROR_GENERIC;
                 break;
             }
@@ -4348,7 +4348,7 @@
              * class.
              */
             if (arrayData[1] != elemWidth) {
-                LOG_VFY("VFY: array-data size mismatch (%d vs %d)\n",
+                LOG_VFY("VFY: array-data size mismatch (%d vs %d)",
                         arrayData[1], elemWidth);
                 failure = VERIFY_ERROR_GENERIC;
             }
@@ -4371,7 +4371,7 @@
             checkTypeCategory(type1, kTypeCategory1nr, &failure);
             checkTypeCategory(type2, kTypeCategory1nr, &failure);
             if (!VERIFY_OK(failure)) {
-                LOG_VFY("VFY: args to if-eq/if-ne must both be refs or cat1\n");
+                LOG_VFY("VFY: args to if-eq/if-ne must both be refs or cat1");
                 break;
             }
         }
@@ -4383,13 +4383,13 @@
         tmpType = getRegisterType(workLine, decInsn.vA);
         checkTypeCategory(tmpType, kTypeCategory1nr, &failure);
         if (!VERIFY_OK(failure)) {
-            LOG_VFY("VFY: args to 'if' must be cat-1nr\n");
+            LOG_VFY("VFY: args to 'if' must be cat-1nr");
             break;
         }
         tmpType = getRegisterType(workLine, decInsn.vB);
         checkTypeCategory(tmpType, kTypeCategory1nr, &failure);
         if (!VERIFY_OK(failure)) {
-            LOG_VFY("VFY: args to 'if' must be cat-1nr\n");
+            LOG_VFY("VFY: args to 'if' must be cat-1nr");
             break;
         }
         break;
@@ -4400,7 +4400,7 @@
             break;
         checkTypeCategory(tmpType, kTypeCategory1nr, &failure);
         if (!VERIFY_OK(failure))
-            LOG_VFY("VFY: expected cat-1 arg to if\n");
+            LOG_VFY("VFY: expected cat-1 arg to if");
         break;
     case OP_IF_LTZ:
     case OP_IF_GEZ:
@@ -4409,7 +4409,7 @@
         tmpType = getRegisterType(workLine, decInsn.vA);
         checkTypeCategory(tmpType, kTypeCategory1nr, &failure);
         if (!VERIFY_OK(failure))
-            LOG_VFY("VFY: expected cat-1 arg to if\n");
+            LOG_VFY("VFY: expected cat-1 arg to if");
         break;
 
     case OP_AGET:
@@ -4444,7 +4444,7 @@
                 if (!dvmIsArrayClass(resClass) || resClass->arrayDim != 1 ||
                     resClass->elementClass->primitiveType == PRIM_NOT)
                 {
-                    LOG_VFY("VFY: invalid aget-1nr target %s\n",
+                    LOG_VFY("VFY: invalid aget-1nr target %s",
                         resClass->descriptor);
                     failure = VERIFY_ERROR_GENERIC;
                     break;
@@ -4484,7 +4484,7 @@
                 if (!dvmIsArrayClass(resClass) || resClass->arrayDim != 1 ||
                     resClass->elementClass->primitiveType == PRIM_NOT)
                 {
-                    LOG_VFY("VFY: invalid aget-wide target %s\n",
+                    LOG_VFY("VFY: invalid aget-wide target %s",
                         resClass->descriptor);
                     failure = VERIFY_ERROR_GENERIC;
                     break;
@@ -4499,7 +4499,7 @@
                     dstType = kRegTypeDoubleLo;
                     break;
                 default:
-                    LOG_VFY("VFY: invalid aget-wide on %s\n",
+                    LOG_VFY("VFY: invalid aget-wide on %s",
                         resClass->descriptor);
                     dstType = kRegTypeUnknown;
                     failure = VERIFY_ERROR_GENERIC;
@@ -4536,7 +4536,7 @@
 
                 assert(resClass != NULL);
                 if (!dvmIsArrayClass(resClass)) {
-                    LOG_VFY("VFY: aget-object on non-array class\n");
+                    LOG_VFY("VFY: aget-object on non-array class");
                     failure = VERIFY_ERROR_GENERIC;
                     break;
                 }
@@ -4555,7 +4555,7 @@
                     assert(resClass->arrayDim == 1);
                     elementClass = resClass->elementClass;
                 } else {
-                    LOG_VFY("VFY: aget-object on non-ref array class (%s)\n",
+                    LOG_VFY("VFY: aget-object on non-ref array class (%s)",
                         resClass->descriptor);
                     failure = VERIFY_ERROR_GENERIC;
                     break;
@@ -4602,7 +4602,7 @@
             /* make sure the source register has the correct type */
             srcType = getRegisterType(workLine, decInsn.vA);
             if (!canConvertTo1nr(srcType, tmpType)) {
-                LOG_VFY("VFY: invalid reg type %d on aput instr (need %d)\n",
+                LOG_VFY("VFY: invalid reg type %d on aput instr (need %d)",
                     srcType, tmpType);
                 failure = VERIFY_ERROR_GENERIC;
                 break;
@@ -4619,7 +4619,7 @@
             if (!dvmIsArrayClass(resClass) || resClass->arrayDim != 1 ||
                 resClass->elementClass->primitiveType == PRIM_NOT)
             {
-                LOG_VFY("VFY: invalid aput-1nr on %s\n", resClass->descriptor);
+                LOG_VFY("VFY: invalid aput-1nr on %s", resClass->descriptor);
                 failure = VERIFY_ERROR_GENERIC;
                 break;
             }
@@ -4630,7 +4630,7 @@
             assert(dstType != kRegTypeUnknown);
 
             if (!checkFieldArrayStore1nr(tmpType, dstType)) {
-                LOG_VFY("VFY: invalid aput-1nr on %s (inst=%d dst=%d)\n",
+                LOG_VFY("VFY: invalid aput-1nr on %s (inst=%d dst=%d)",
                         resClass->descriptor, tmpType, dstType);
                 failure = VERIFY_ERROR_GENERIC;
                 break;
@@ -4660,7 +4660,7 @@
             if (!dvmIsArrayClass(resClass) || resClass->arrayDim != 1 ||
                 resClass->elementClass->primitiveType == PRIM_NOT)
             {
-                LOG_VFY("VFY: invalid aput-wide on %s\n",
+                LOG_VFY("VFY: invalid aput-wide on %s",
                         resClass->descriptor);
                 failure = VERIFY_ERROR_GENERIC;
                 break;
@@ -4672,7 +4672,7 @@
                 /* these are okay */
                 break;
             default:
-                LOG_VFY("VFY: invalid aput-wide on %s\n",
+                LOG_VFY("VFY: invalid aput-wide on %s",
                         resClass->descriptor);
                 failure = VERIFY_ERROR_GENERIC;
                 break;
@@ -4703,7 +4703,7 @@
             if (arrayClass != NULL) {
                 /* see if the array holds a compatible type */
                 if (!dvmIsArrayClass(arrayClass)) {
-                    LOG_VFY("VFY: invalid aput-object on %s\n",
+                    LOG_VFY("VFY: invalid aput-object on %s",
                             arrayClass->descriptor);
                     failure = VERIFY_ERROR_GENERIC;
                     break;
@@ -4728,7 +4728,7 @@
                     elementClass = arrayClass->elementClass;
                 }
                 if (elementClass->primitiveType != PRIM_NOT) {
-                    LOG_VFY("VFY: invalid aput-object of %s into %s\n",
+                    LOG_VFY("VFY: invalid aput-object of %s into %s",
                             resClass->descriptor, arrayClass->descriptor);
                     failure = VERIFY_ERROR_GENERIC;
                     break;
@@ -4773,7 +4773,7 @@
             if (fieldType == kRegTypeUnknown ||
                 !checkFieldArrayStore1nr(tmpType, fieldType))
             {
-                LOG_VFY("VFY: invalid iget-1nr of %s.%s (inst=%d field=%d)\n",
+                LOG_VFY("VFY: invalid iget-1nr of %s.%s (inst=%d field=%d)",
                         instField->clazz->descriptor,
                         instField->name, tmpType, fieldType);
                 failure = VERIFY_ERROR_GENERIC;
@@ -4804,7 +4804,7 @@
                 dstType = kRegTypeLongLo;
                 break;
             default:
-                LOG_VFY("VFY: invalid iget-wide of %s.%s\n",
+                LOG_VFY("VFY: invalid iget-wide of %s.%s",
                         instField->clazz->descriptor,
                         instField->name);
                 dstType = kRegTypeUnknown;
@@ -4831,7 +4831,7 @@
             fieldClass = getFieldClass(meth, instField);
             if (fieldClass == NULL) {
                 /* class not found or primitive type */
-                LOG_VFY("VFY: unable to recover field class from '%s'\n",
+                LOG_VFY("VFY: unable to recover field class from '%s'",
                     instField->signature);
                 failure = VERIFY_ERROR_GENERIC;
                 break;
@@ -4879,7 +4879,7 @@
 
             /* make sure the source register has the correct type */
             if (!canConvertTo1nr(srcType, tmpType)) {
-                LOG_VFY("VFY: invalid reg type %d on iput instr (need %d)\n",
+                LOG_VFY("VFY: invalid reg type %d on iput instr (need %d)",
                     srcType, tmpType);
                 failure = VERIFY_ERROR_GENERIC;
                 break;
@@ -4899,7 +4899,7 @@
             if (fieldType == kRegTypeUnknown ||
                 !checkFieldArrayStore1nr(tmpType, fieldType))
             {
-                LOG_VFY("VFY: invalid iput-1nr of %s.%s (inst=%d field=%d)\n",
+                LOG_VFY("VFY: invalid iput-1nr of %s.%s (inst=%d field=%d)",
                         instField->clazz->descriptor,
                         instField->name, tmpType, fieldType);
                 failure = VERIFY_ERROR_GENERIC;
@@ -4935,7 +4935,7 @@
                 /* these are okay (and interchangeable) */
                 break;
             default:
-                LOG_VFY("VFY: invalid iput-wide of %s.%s\n",
+                LOG_VFY("VFY: invalid iput-wide of %s.%s",
                         instField->clazz->descriptor,
                         instField->name);
                 failure = VERIFY_ERROR_GENERIC;
@@ -4962,7 +4962,7 @@
 
             fieldClass = getFieldClass(meth, instField);
             if (fieldClass == NULL) {
-                LOG_VFY("VFY: unable to recover field class from '%s'\n",
+                LOG_VFY("VFY: unable to recover field class from '%s'",
                     instField->signature);
                 failure = VERIFY_ERROR_GENERIC;
                 break;
@@ -4970,7 +4970,7 @@
 
             valueType = getRegisterType(workLine, decInsn.vA);
             if (!regTypeIsReference(valueType)) {
-                LOG_VFY("VFY: storing non-ref v%d into ref field '%s' (%s)\n",
+                LOG_VFY("VFY: storing non-ref v%d into ref field '%s' (%s)",
                         decInsn.vA, instField->name,
                         fieldClass->descriptor);
                 failure = VERIFY_ERROR_GENERIC;
@@ -4979,7 +4979,7 @@
             if (valueType != kRegTypeZero) {
                 valueClass = regTypeInitializedReferenceToClass(valueType);
                 if (valueClass == NULL) {
-                    LOG_VFY("VFY: storing uninit ref v%d into ref field\n",
+                    LOG_VFY("VFY: storing uninit ref v%d into ref field",
                         decInsn.vA);
                     failure = VERIFY_ERROR_GENERIC;
                     break;
@@ -4988,7 +4988,7 @@
                 if (!dvmIsInterfaceClass(fieldClass) &&
                     !dvmInstanceof(valueClass, fieldClass))
                 {
-                    LOG_VFY("VFY: storing type '%s' into field type '%s' (%s.%s)\n",
+                    LOG_VFY("VFY: storing type '%s' into field type '%s' (%s.%s)",
                             valueClass->descriptor, fieldClass->descriptor,
                             instField->clazz->descriptor,
                             instField->name);
@@ -5038,7 +5038,7 @@
              */
             fieldType = primSigCharToRegType(staticField->signature[0]);
             if (!checkFieldArrayStore1nr(tmpType, fieldType)) {
-                LOG_VFY("VFY: invalid sget-1nr of %s.%s (inst=%d actual=%d)\n",
+                LOG_VFY("VFY: invalid sget-1nr of %s.%s (inst=%d actual=%d)",
                     staticField->clazz->descriptor,
                     staticField->name, tmpType, fieldType);
                 failure = VERIFY_ERROR_GENERIC;
@@ -5066,7 +5066,7 @@
                 dstType = kRegTypeLongLo;
                 break;
             default:
-                LOG_VFY("VFY: invalid sget-wide of %s.%s\n",
+                LOG_VFY("VFY: invalid sget-wide of %s.%s",
                         staticField->clazz->descriptor,
                         staticField->name);
                 dstType = kRegTypeUnknown;
@@ -5089,13 +5089,13 @@
                 break;
             fieldClass = getFieldClass(meth, staticField);
             if (fieldClass == NULL) {
-                LOG_VFY("VFY: unable to recover field class from '%s'\n",
+                LOG_VFY("VFY: unable to recover field class from '%s'",
                     staticField->signature);
                 failure = VERIFY_ERROR_GENERIC;
                 break;
             }
             if (dvmIsPrimitiveClass(fieldClass)) {
-                LOG_VFY("VFY: attempt to get prim field with sget-object\n");
+                LOG_VFY("VFY: attempt to get prim field with sget-object");
                 failure = VERIFY_ERROR_GENERIC;
                 break;
             }
@@ -5138,7 +5138,7 @@
 
             /* make sure the source register has the correct type */
             if (!canConvertTo1nr(srcType, tmpType)) {
-                LOG_VFY("VFY: invalid reg type %d on sput instr (need %d)\n",
+                LOG_VFY("VFY: invalid reg type %d on sput instr (need %d)",
                     srcType, tmpType);
                 failure = VERIFY_ERROR_GENERIC;
                 break;
@@ -5160,7 +5160,7 @@
              */
             fieldType = primSigCharToRegType(staticField->signature[0]);
             if (!checkFieldArrayStore1nr(tmpType, fieldType)) {
-                LOG_VFY("VFY: invalid sput-1nr of %s.%s (inst=%d actual=%d)\n",
+                LOG_VFY("VFY: invalid sput-1nr of %s.%s (inst=%d actual=%d)",
                     staticField->clazz->descriptor,
                     staticField->name, tmpType, fieldType);
                 failure = VERIFY_ERROR_GENERIC;
@@ -5193,7 +5193,7 @@
                 /* these are okay */
                 break;
             default:
-                LOG_VFY("VFY: invalid sput-wide of %s.%s\n",
+                LOG_VFY("VFY: invalid sput-wide of %s.%s",
                         staticField->clazz->descriptor,
                         staticField->name);
                 failure = VERIFY_ERROR_GENERIC;
@@ -5218,7 +5218,7 @@
 
             fieldClass = getFieldClass(meth, staticField);
             if (fieldClass == NULL) {
-                LOG_VFY("VFY: unable to recover field class from '%s'\n",
+                LOG_VFY("VFY: unable to recover field class from '%s'",
                     staticField->signature);
                 failure = VERIFY_ERROR_GENERIC;
                 break;
@@ -5226,7 +5226,7 @@
 
             valueType = getRegisterType(workLine, decInsn.vA);
             if (!regTypeIsReference(valueType)) {
-                LOG_VFY("VFY: storing non-ref v%d into ref field '%s' (%s)\n",
+                LOG_VFY("VFY: storing non-ref v%d into ref field '%s' (%s)",
                         decInsn.vA, staticField->name,
                         fieldClass->descriptor);
                 failure = VERIFY_ERROR_GENERIC;
@@ -5235,7 +5235,7 @@
             if (valueType != kRegTypeZero) {
                 valueClass = regTypeInitializedReferenceToClass(valueType);
                 if (valueClass == NULL) {
-                    LOG_VFY("VFY: storing uninit ref v%d into ref field\n",
+                    LOG_VFY("VFY: storing uninit ref v%d into ref field",
                         decInsn.vA);
                     failure = VERIFY_ERROR_GENERIC;
                     break;
@@ -5244,7 +5244,7 @@
                 if (!dvmIsInterfaceClass(fieldClass) &&
                     !dvmInstanceof(valueClass, fieldClass))
                 {
-                    LOG_VFY("VFY: storing type '%s' into field type '%s' (%s.%s)\n",
+                    LOG_VFY("VFY: storing type '%s' into field type '%s' (%s.%s)",
                             valueClass->descriptor, fieldClass->descriptor,
                             staticField->clazz->descriptor,
                             staticField->name);
@@ -5318,7 +5318,7 @@
 
                 /* no null refs allowed (?) */
                 if (thisType == kRegTypeZero) {
-                    LOG_VFY("VFY: unable to initialize null ref\n");
+                    LOG_VFY("VFY: unable to initialize null ref");
                     failure = VERIFY_ERROR_GENERIC;
                     break;
                 }
@@ -5345,7 +5345,7 @@
 
                 /* arg must be an uninitialized reference */
                 if (!regTypeIsUninitReference(thisType)) {
-                    LOG_VFY("VFY: can only initialize the uninitialized\n");
+                    LOG_VFY("VFY: can only initialize the uninitialized");
                     failure = VERIFY_ERROR_GENERIC;
                     break;
                 }
@@ -5420,7 +5420,7 @@
 
                 thisClass = regTypeInitializedReferenceToClass(thisType);
                 if (thisClass == NULL) {
-                    LOG_VFY("VFY: interface call on uninitialized\n");
+                    LOG_VFY("VFY: interface call on uninitialized");
                     failure = VERIFY_ERROR_GENERIC;
                     break;
                 }
@@ -5435,7 +5435,7 @@
                     thisClass != gDvm.classJavaLangObject &&
                     !dvmImplements(thisClass, absMethod->clazz))
                 {
-                    LOG_VFY("VFY: unable to match absMethod '%s' with %s interfaces\n",
+                    LOG_VFY("VFY: unable to match absMethod '%s' with %s interfaces",
                             absMethod->name, thisClass->descriptor);
                     failure = VERIFY_ERROR_GENERIC;
                     break;
@@ -5999,15 +5999,15 @@
     if (!VERIFY_OK(failure)) {
         if (failure == VERIFY_ERROR_GENERIC || gDvm.optimizing) {
             /* immediate failure, reject class */
-            LOG_VFY_METH(meth, "VFY:  rejecting opcode 0x%02x at 0x%04x\n",
+            LOG_VFY_METH(meth, "VFY:  rejecting opcode 0x%02x at 0x%04x",
                 decInsn.opcode, insnIdx);
             goto bail;
         } else {
             /* replace opcode and continue on */
-            LOGD("VFY: replacing opcode 0x%02x at 0x%04x\n",
+            LOGD("VFY: replacing opcode 0x%02x at 0x%04x",
                 decInsn.opcode, insnIdx);
             if (!replaceFailingInstruction(meth, insnFlags, insnIdx, failure)) {
-                LOG_VFY_METH(meth, "VFY:  rejecting opcode 0x%02x at 0x%04x\n",
+                LOG_VFY_METH(meth, "VFY:  rejecting opcode 0x%02x at 0x%04x",
                     decInsn.opcode, insnIdx);
                 goto bail;
             }
@@ -6088,7 +6088,7 @@
                 &isConditional))
         {
             /* should never happen after static verification */
-            LOG_VFY_METH(meth, "VFY: bad branch at %d\n", insnIdx);
+            LOG_VFY_METH(meth, "VFY: bad branch at %d", insnIdx);
             goto bail;
         }
         assert(isConditional || (nextFlags & kInstrCanContinue) == 0);
@@ -6205,7 +6205,7 @@
      * is empty.
      */
     if ((nextFlags & kInstrCanReturn) != 0 && workLine->monitorStackTop != 0) {
-        LOG_VFY_METH(meth, "VFY: return with stack depth=%d at 0x%04x\n",
+        LOG_VFY_METH(meth, "VFY: return with stack depth=%d at 0x%04x",
             workLine->monitorStackTop, insnIdx);
         goto bail;
     }
@@ -6245,7 +6245,7 @@
 
     if (addr >= (int) startAddress && addr < (int) endAddress)
     {
-        LOGI("        %2d: '%s' %s\n", reg, name, descriptor);
+        LOGI("        %2d: '%s' %s", reg, name, descriptor);
     }
 }
 
@@ -6316,10 +6316,10 @@
     }
 
     if (addr == 0 && addrName != NULL) {
-        LOGI("%c%s %s mst=%d\n", branchTarget ? '>' : ' ',
+        LOGI("%c%s %s mst=%d", branchTarget ? '>' : ' ',
             addrName, regChars, registerLine->monitorStackTop);
     } else {
-        LOGI("%c0x%04x %s mst=%d\n", branchTarget ? '>' : ' ',
+        LOGI("%c0x%04x %s mst=%d", branchTarget ? '>' : ' ',
             addr, regChars, registerLine->monitorStackTop);
     }
     if (displayFlags & DRT_SHOW_LIVENESS) {
@@ -6337,9 +6337,9 @@
                 bool isLive = dvmIsBitSet(liveRegs, i);
                 liveChars[i + 1 + (i / 4)] = isLive ? '+' : '-';
             }
-            LOGI("        %s\n", liveChars);
+            LOGI("        %s", liveChars);
         } else {
-            LOGI("        %c\n", '#');
+            LOGI("        %c", '#');
         }
     }
 
@@ -6352,12 +6352,12 @@
                 clazz = regTypeReferenceToClass(addrRegs[i], uninitMap);
                 assert(dvmIsValidObject((Object*)clazz));
                 if (i < regCount) {
-                    LOGI("        %2d: 0x%08x %s%s\n",
+                    LOGI("        %2d: 0x%08x %s%s",
                         i, addrRegs[i],
                         regTypeIsUninitReference(addrRegs[i]) ? "[U]" : "",
                         clazz->descriptor);
                 } else {
-                    LOGI("        RS: 0x%08x %s%s\n",
+                    LOGI("        RS: 0x%08x %s%s",
                         addrRegs[i],
                         regTypeIsUninitReference(addrRegs[i]) ? "[U]" : "",
                         clazz->descriptor);
diff --git a/vm/analysis/DexPrepare.cpp b/vm/analysis/DexPrepare.cpp
index 4337ffa..1a817f5 100644
--- a/vm/analysis/DexPrepare.cpp
+++ b/vm/analysis/DexPrepare.cpp
@@ -98,7 +98,7 @@
         fd = open(cacheFileName, O_RDONLY, 0);
         if (fd < 0) {
             if (createIfMissing) {
-                LOGE("Can't open dex cache '%s': %s\n",
+                LOGE("Can't open dex cache '%s': %s",
                     cacheFileName, strerror(errno));
             }
             return fd;
@@ -113,21 +113,21 @@
      * working on it, we'll block here until they complete.  Because
      * we're waiting on an external resource, we go into VMWAIT mode.
      */
-    LOGV("DexOpt: locking cache file %s (fd=%d, boot=%d)\n",
+    LOGV("DexOpt: locking cache file %s (fd=%d, boot=%d)",
         cacheFileName, fd, isBootstrap);
     ThreadStatus oldStatus = dvmChangeStatus(NULL, THREAD_VMWAIT);
     cc = flock(fd, LOCK_EX | LOCK_NB);
     if (cc != 0) {
-        LOGD("DexOpt: sleeping on flock(%s)\n", cacheFileName);
+        LOGD("DexOpt: sleeping on flock(%s)", cacheFileName);
         cc = flock(fd, LOCK_EX);
     }
     dvmChangeStatus(NULL, oldStatus);
     if (cc != 0) {
-        LOGE("Can't lock dex cache '%s': %d\n", cacheFileName, cc);
+        LOGE("Can't lock dex cache '%s': %d", cacheFileName, cc);
         close(fd);
         return -1;
     }
-    LOGV("DexOpt:  locked cache file\n");
+    LOGV("DexOpt:  locked cache file");
 
     /*
      * Check to see if the fd we opened and locked matches the file in
@@ -138,16 +138,16 @@
      */
     cc = fstat(fd, &fdStat);
     if (cc != 0) {
-        LOGE("Can't stat open file '%s'\n", cacheFileName);
-        LOGVV("DexOpt: unlocking cache file %s\n", cacheFileName);
+        LOGE("Can't stat open file '%s'", cacheFileName);
+        LOGVV("DexOpt: unlocking cache file %s", cacheFileName);
         goto close_fail;
     }
     cc = stat(cacheFileName, &fileStat);
     if (cc != 0 ||
         fdStat.st_dev != fileStat.st_dev || fdStat.st_ino != fileStat.st_ino)
     {
-        LOGD("DexOpt: our open cache file is stale; sleeping and retrying\n");
-        LOGVV("DexOpt: unlocking cache file %s\n", cacheFileName);
+        LOGD("DexOpt: our open cache file is stale; sleeping and retrying");
+        LOGVV("DexOpt: unlocking cache file %s", cacheFileName);
         flock(fd, LOCK_UN);
         close(fd);
         usleep(250 * 1000);     /* if something is hosed, don't peg machine */
@@ -163,14 +163,14 @@
      */
     if (fdStat.st_size == 0) {
         if (readOnly) {
-            LOGW("DexOpt: file has zero length and isn't writable\n");
+            LOGW("DexOpt: file has zero length and isn't writable");
             goto close_fail;
         }
         cc = dexOptCreateEmptyHeader(fd);
         if (cc != 0)
             goto close_fail;
         *pNewFile = true;
-        LOGV("DexOpt: successfully initialized new cache file\n");
+        LOGV("DexOpt: successfully initialized new cache file");
     } else {
         bool expectVerify, expectOpt;
 
@@ -191,7 +191,7 @@
             expectOpt = true;
         }
 
-        LOGV("checking deps, expecting vfy=%d opt=%d\n",
+        LOGV("checking deps, expecting vfy=%d opt=%d",
             expectVerify, expectOpt);
 
         if (!dvmCheckOptHeaderAndDependencies(fd, true, modWhen, crc,
@@ -205,7 +205,7 @@
                  * give up now.
                  */
                 if (createIfMissing) {
-                    LOGW("Cached DEX '%s' (%s) is stale and not writable\n",
+                    LOGW("Cached DEX '%s' (%s) is stale and not writable",
                         fileName, cacheFileName);
                 }
                 goto close_fail;
@@ -232,24 +232,24 @@
              * changes doing anything" purposes its best if we just make
              * everything crash when a DEX they're using gets updated.
              */
-            LOGD("ODEX file is stale or bad; removing and retrying (%s)\n",
+            LOGD("ODEX file is stale or bad; removing and retrying (%s)",
                 cacheFileName);
             if (ftruncate(fd, 0) != 0) {
-                LOGW("Warning: unable to truncate cache file '%s': %s\n",
+                LOGW("Warning: unable to truncate cache file '%s': %s",
                     cacheFileName, strerror(errno));
                 /* keep going */
             }
             if (unlink(cacheFileName) != 0) {
-                LOGW("Warning: unable to remove cache file '%s': %d %s\n",
+                LOGW("Warning: unable to remove cache file '%s': %d %s",
                     cacheFileName, errno, strerror(errno));
                 /* keep going; permission failure should probably be fatal */
             }
-            LOGVV("DexOpt: unlocking cache file %s\n", cacheFileName);
+            LOGVV("DexOpt: unlocking cache file %s", cacheFileName);
             flock(fd, LOCK_UN);
             close(fd);
             goto retry;
         } else {
-            LOGV("DexOpt: good deps in cache file\n");
+            LOGV("DexOpt: good deps in cache file");
         }
     }
 
@@ -269,7 +269,7 @@
  */
 bool dvmUnlockCachedDexFile(int fd)
 {
-    LOGVV("DexOpt: unlocking cache file fd=%d\n", fd);
+    LOGVV("DexOpt: unlocking cache file fd=%d", fd);
     return (flock(fd, LOCK_UN) == 0);
 }
 
@@ -307,7 +307,7 @@
     else
         lastPart = fileName;
 
-    LOGD("DexOpt: --- BEGIN '%s' (bootstrap=%d) ---\n", lastPart, isBootstrap);
+    LOGD("DexOpt: --- BEGIN '%s' (bootstrap=%d) ---", lastPart, isBootstrap);
 
     pid_t pid;
 
@@ -316,7 +316,7 @@
      * was all optimized, got rejected.
      */
     if (gDvm.optimizing) {
-        LOGW("Rejecting recursive optimization attempt on '%s'\n", fileName);
+        LOGW("Rejecting recursive optimization attempt on '%s'", fileName);
         return false;
     }
 
@@ -343,7 +343,7 @@
         /* full path to optimizer */
         androidRoot = getenv("ANDROID_ROOT");
         if (androidRoot == NULL) {
-            LOGW("ANDROID_ROOT not set, defaulting to /system\n");
+            LOGW("ANDROID_ROOT not set, defaulting to /system");
             androidRoot = "/system";
         }
         execFile = (char*)malloc(strlen(androidRoot) + strlen(kDexOptBin) + 1);
@@ -422,11 +422,11 @@
         else
             execv(execFile, const_cast<char**>(argv));
 
-        LOGE("execv '%s'%s failed: %s\n", execFile,
+        LOGE("execv '%s'%s failed: %s", execFile,
             kUseValgrind ? " [valgrind]" : "", strerror(errno));
         exit(1);
     } else {
-        LOGV("DexOpt: waiting for verify+opt, pid=%d\n", (int) pid);
+        LOGV("DexOpt: waiting for verify+opt, pid=%d", (int) pid);
         int status;
         pid_t gotPid;
 
@@ -438,23 +438,23 @@
         while (true) {
             gotPid = waitpid(pid, &status, 0);
             if (gotPid == -1 && errno == EINTR) {
-                LOGD("waitpid interrupted, retrying\n");
+                LOGD("waitpid interrupted, retrying");
             } else {
                 break;
             }
         }
         dvmChangeStatus(NULL, oldStatus);
         if (gotPid != pid) {
-            LOGE("waitpid failed: wanted %d, got %d: %s\n",
+            LOGE("waitpid failed: wanted %d, got %d: %s",
                 (int) pid, (int) gotPid, strerror(errno));
             return false;
         }
 
         if (WIFEXITED(status) && WEXITSTATUS(status) == 0) {
-            LOGD("DexOpt: --- END '%s' (success) ---\n", lastPart);
+            LOGD("DexOpt: --- END '%s' (success) ---", lastPart);
             return true;
         } else {
-            LOGW("DexOpt: --- END '%s' --- status=0x%04x, process failed\n",
+            LOGW("DexOpt: --- END '%s' --- status=0x%04x, process failed",
                 lastPart, status);
             return false;
         }
@@ -482,17 +482,17 @@
 
     assert(gDvm.optimizing);
 
-    LOGV("Continuing optimization (%s, isb=%d)\n", fileName, isBootstrap);
+    LOGV("Continuing optimization (%s, isb=%d)", fileName, isBootstrap);
 
     assert(dexOffset >= 0);
 
     /* quick test so we don't blow up on empty file */
     if (dexLength < (int) sizeof(DexHeader)) {
-        LOGE("too small to be DEX\n");
+        LOGE("too small to be DEX");
         return false;
     }
     if (dexOffset < (int) sizeof(DexOptHeader)) {
-        LOGE("not enough room for opt header\n");
+        LOGE("not enough room for opt header");
         return false;
     }
 
@@ -516,7 +516,7 @@
         mapAddr = mmap(NULL, dexOffset + dexLength, PROT_READ|PROT_WRITE,
                     MAP_SHARED, fd, 0);
         if (mapAddr == MAP_FAILED) {
-            LOGE("unable to mmap DEX cache: %s\n", strerror(errno));
+            LOGE("unable to mmap DEX cache: %s", strerror(errno));
             goto bail;
         }
 
@@ -557,7 +557,7 @@
             u1* dexAddr = ((u1*) mapAddr) + dexOffset;
 
             if (dvmDexFileOpenPartial(dexAddr, dexLength, &pDvmDex) != 0) {
-                LOGE("Unable to create DexFile\n");
+                LOGE("Unable to create DexFile");
                 success = false;
             } else {
                 /*
@@ -568,7 +568,7 @@
                 if (gDvm.generateRegisterMaps) {
                     pRegMapBuilder = dvmGenerateRegisterMaps(pDvmDex);
                     if (pRegMapBuilder == NULL) {
-                        LOGE("Failed generating register maps\n");
+                        LOGE("Failed generating register maps");
                         success = false;
                     }
                 }
@@ -582,7 +582,7 @@
 
         /* unmap the read-write version, forcing writes to disk */
         if (msync(mapAddr, dexOffset + dexLength, MS_SYNC) != 0) {
-            LOGW("msync failed: %s\n", strerror(errno));
+            LOGW("msync failed: %s", strerror(errno));
             // weird, but keep going
         }
 #if 1
@@ -593,7 +593,7 @@
          * Exclude this code when doing clean shutdown for valgrind.
          */
         if (munmap(mapAddr, dexOffset + dexLength) != 0) {
-            LOGE("munmap failed: %s\n", strerror(errno));
+            LOGE("munmap failed: %s", strerror(errno));
             goto bail;
         }
 #endif
@@ -609,12 +609,12 @@
 
     depsOffset = lseek(fd, 0, SEEK_END);
     if (depsOffset < 0) {
-        LOGE("lseek to EOF failed: %s\n", strerror(errno));
+        LOGE("lseek to EOF failed: %s", strerror(errno));
         goto bail;
     }
     adjOffset = (depsOffset + 7) & ~(0x07);
     if (adjOffset != depsOffset) {
-        LOGV("Adjusting deps start from %d to %d\n",
+        LOGV("Adjusting deps start from %d to %d",
             (int) depsOffset, (int) adjOffset);
         depsOffset = adjOffset;
         lseek(fd, depsOffset, SEEK_SET);
@@ -624,7 +624,7 @@
      * Append the dependency list.
      */
     if (writeDependencies(fd, modWhen, crc) != 0) {
-        LOGW("Failed writing dependencies\n");
+        LOGW("Failed writing dependencies");
         goto bail;
     }
 
@@ -634,7 +634,7 @@
 
     adjOffset = (optOffset + 7) & ~(0x07);
     if (adjOffset != optOffset) {
-        LOGV("Adjusting opt start from %d to %d\n",
+        LOGV("Adjusting opt start from %d to %d",
             (int) optOffset, (int) adjOffset);
         optOffset = adjOffset;
         lseek(fd, optOffset, SEEK_SET);
@@ -644,7 +644,7 @@
      * Append any optimized pre-computed data structures.
      */
     if (!writeOptData(fd, pClassLookup, pRegMapBuilder)) {
-        LOGW("Failed writing opt data\n");
+        LOGW("Failed writing opt data");
         goto bail;
     }
 
@@ -685,7 +685,7 @@
     if (sysWriteFully(fd, &optHdr, sizeof(optHdr), "DexOpt opt header") != 0)
         goto bail;
 
-    LOGV("Successfully wrote DEX header\n");
+    LOGV("Successfully wrote DEX header");
     result = true;
 
     //dvmRegisterMapDumpStats();
@@ -759,7 +759,7 @@
      * for it.
      */
     if (dvmDexFileOpenPartial(addr, len, &pDvmDex) != 0) {
-        LOGE("Unable to create DexFile\n");
+        LOGE("Unable to create DexFile");
         goto bail;
     }
 
@@ -820,7 +820,7 @@
         msgStr = "verify";
     else if (doOpt)
         msgStr = "opt";
-    LOGD("DexOpt: load %dms, %s %dms\n",
+    LOGD("DexOpt: load %dms, %s %dms",
         (int) (loadWhen - prepWhen) / 1000,
         msgStr,
         (int) (verifyOptWhen - loadWhen) / 1000);
@@ -873,7 +873,7 @@
     u4 idx;
     int loaded = 0;
 
-    LOGV("DexOpt: +++ trying to load %d classes\n", count);
+    LOGV("DexOpt: +++ trying to load %d classes", count);
 
     dvmSetBootPathExtraDex(pDvmDex);
 
@@ -900,7 +900,7 @@
      * list, but it costs very little to do it in all cases.)
      */
     if (!dvmInitClass(gDvm.classJavaLangClass)) {
-        LOGE("ERROR: failed to initialize the class Class!\n");
+        LOGE("ERROR: failed to initialize the class Class!");
         return false;
     }
 
@@ -918,7 +918,7 @@
         //        NULL);
         newClass = dvmFindSystemClassNoInit(classDescriptor);
         if (newClass == NULL) {
-            LOGV("DexOpt: failed loading '%s'\n", classDescriptor);
+            LOGV("DexOpt: failed loading '%s'", classDescriptor);
             dvmClearOptException(dvmThreadSelf());
         } else if (newClass->pDvmDex != pDvmDex) {
             /*
@@ -926,14 +926,14 @@
              * with the "multiple def" flag so the resolver doesn't try
              * to make it available.
              */
-            LOGD("DexOpt: '%s' has an earlier definition; blocking out\n",
+            LOGD("DexOpt: '%s' has an earlier definition; blocking out",
                 classDescriptor);
             SET_CLASS_FLAG(newClass, CLASS_MULTIPLE_DEFS);
         } else {
             loaded++;
         }
     }
-    LOGV("DexOpt: +++ successfully loaded %d classes\n", loaded);
+    LOGV("DexOpt: +++ successfully loaded %d classes", loaded);
 
     dvmSetBootPathExtraDex(NULL);
     return true;
@@ -964,22 +964,22 @@
 
         } else {
             // TODO: log when in verbose mode
-            LOGV("DexOpt: not optimizing unavailable class '%s'\n",
+            LOGV("DexOpt: not optimizing unavailable class '%s'",
                 classDescriptor);
         }
     }
 
 #ifdef VERIFIER_STATS
-    LOGI("Verifier stats:\n");
-    LOGI(" methods examined        : %u\n", gDvm.verifierStats.methodsExamined);
-    LOGI(" monitor-enter methods   : %u\n", gDvm.verifierStats.monEnterMethods);
-    LOGI(" instructions examined   : %u\n", gDvm.verifierStats.instrsExamined);
-    LOGI(" instructions re-examined: %u\n", gDvm.verifierStats.instrsReexamined);
-    LOGI(" copying of register sets: %u\n", gDvm.verifierStats.copyRegCount);
-    LOGI(" merging of register sets: %u\n", gDvm.verifierStats.mergeRegCount);
-    LOGI(" ...that caused changes  : %u\n", gDvm.verifierStats.mergeRegChanged);
-    LOGI(" uninit searches         : %u\n", gDvm.verifierStats.uninitSearches);
-    LOGI(" max memory required     : %u\n", gDvm.verifierStats.biggestAlloc);
+    LOGI("Verifier stats:");
+    LOGI(" methods examined        : %u", gDvm.verifierStats.methodsExamined);
+    LOGI(" monitor-enter methods   : %u", gDvm.verifierStats.monEnterMethods);
+    LOGI(" instructions examined   : %u", gDvm.verifierStats.instrsExamined);
+    LOGI(" instructions re-examined: %u", gDvm.verifierStats.instrsReexamined);
+    LOGI(" copying of register sets: %u", gDvm.verifierStats.copyRegCount);
+    LOGI(" merging of register sets: %u", gDvm.verifierStats.mergeRegCount);
+    LOGI(" ...that caused changes  : %u", gDvm.verifierStats.mergeRegChanged);
+    LOGI(" uninit searches         : %u", gDvm.verifierStats.uninitSearches);
+    LOGI(" max memory required     : %u", gDvm.verifierStats.biggestAlloc);
 #endif
 }
 
@@ -1000,7 +1000,7 @@
          * (a) not the one we want to examine, and (b) mapped read-only,
          * so we will seg fault if we try to rewrite instructions inside it.
          */
-        LOGD("DexOpt: not verifying/optimizing '%s': multiple definitions\n",
+        LOGD("DexOpt: not verifying/optimizing '%s': multiple definitions",
             clazz->descriptor);
         return;
     }
@@ -1023,7 +1023,7 @@
             verified = true;
         } else {
             // TODO: log when in verbose mode
-            LOGV("DexOpt: '%s' failed verification\n", classDescriptor);
+            LOGV("DexOpt: '%s' failed verification", classDescriptor);
         }
     }
 
@@ -1031,7 +1031,7 @@
         bool needVerify = (gDvm.dexOptMode == OPTIMIZE_MODE_VERIFIED ||
                            gDvm.dexOptMode == OPTIMIZE_MODE_FULL);
         if (!verified && needVerify) {
-            LOGV("DexOpt: not optimizing '%s': not verified\n",
+            LOGV("DexOpt: not optimizing '%s': not verified",
                 classDescriptor);
         } else {
             dvmOptimizeClass(clazz, false);
@@ -1054,7 +1054,7 @@
     case kCpeDex:
         return dvmGetRawDexFileCacheFileName((RawDexFile*) cpe->ptr);
     default:
-        LOGE("DexOpt: unexpected cpe kind %d\n", cpe->kind);
+        LOGE("DexOpt: unexpected cpe kind %d", cpe->kind);
         dvmAbort();
         return NULL;
     }
@@ -1075,7 +1075,7 @@
         pDvmDex = dvmGetRawDexFileDex((RawDexFile*) cpe->ptr);
         break;
     default:
-        LOGE("unexpected cpe kind %d\n", cpe->kind);
+        LOGE("unexpected cpe kind %d", cpe->kind);
         dvmAbort();
         pDvmDex = NULL;         // make gcc happy
     }
@@ -1128,7 +1128,7 @@
      * the first thing in the file.
      */
     if (lseek(fd, 0, SEEK_SET) != 0) {
-        LOGE("DexOpt: failed to seek to start of file: %s\n", strerror(errno));
+        LOGE("DexOpt: failed to seek to start of file: %s", strerror(errno));
         goto bail;
     }
 
@@ -1138,10 +1138,10 @@
      */
     actual = read(fd, &optHdr, sizeof(optHdr));
     if (actual < 0) {
-        LOGE("DexOpt: failed reading opt header: %s\n", strerror(errno));
+        LOGE("DexOpt: failed reading opt header: %s", strerror(errno));
         goto bail;
     } else if (actual != sizeof(optHdr)) {
-        LOGE("DexOpt: failed reading opt header (got %d of %zd)\n",
+        LOGE("DexOpt: failed reading opt header (got %d of %zd)",
             (int) actual, sizeof(optHdr));
         goto bail;
     }
@@ -1149,21 +1149,21 @@
     magic = optHdr.magic;
     if (memcmp(magic, DEX_MAGIC, 4) == 0) {
         /* somebody probably pointed us at the wrong file */
-        LOGD("DexOpt: expected optimized DEX, found unoptimized\n");
+        LOGD("DexOpt: expected optimized DEX, found unoptimized");
         goto bail;
     } else if (memcmp(magic, DEX_OPT_MAGIC, 4) != 0) {
         /* not a DEX file, or previous attempt was interrupted */
-        LOGD("DexOpt: incorrect opt magic number (0x%02x %02x %02x %02x)\n",
+        LOGD("DexOpt: incorrect opt magic number (0x%02x %02x %02x %02x)",
             magic[0], magic[1], magic[2], magic[3]);
         goto bail;
     }
     if (memcmp(magic+4, DEX_OPT_MAGIC_VERS, 4) != 0) {
-        LOGW("DexOpt: stale opt version (0x%02x %02x %02x %02x)\n",
+        LOGW("DexOpt: stale opt version (0x%02x %02x %02x %02x)",
             magic[4], magic[5], magic[6], magic[7]);
         goto bail;
     }
     if (optHdr.depsLength < kMinDepSize || optHdr.depsLength > kMaxDepSize) {
-        LOGW("DexOpt: weird deps length %d, bailing\n", optHdr.depsLength);
+        LOGW("DexOpt: weird deps length %d, bailing", optHdr.depsLength);
         goto bail;
     }
 
@@ -1179,7 +1179,7 @@
         expectedFlags |= DEX_OPT_FLAG_BIG;
 #endif
         if ((expectedFlags & matchMask) != (optHdr.flags & matchMask)) {
-            LOGI("DexOpt: header flag mismatch (0x%02x vs 0x%02x, mask=0x%02x)\n",
+            LOGI("DexOpt: header flag mismatch (0x%02x vs 0x%02x, mask=0x%02x)",
                 expectedFlags, optHdr.flags, matchMask);
             goto bail;
         }
@@ -1187,7 +1187,7 @@
 
     posn = lseek(fd, optHdr.depsOffset, SEEK_SET);
     if (posn < 0) {
-        LOGW("DexOpt: seek to deps failed: %s\n", strerror(errno));
+        LOGW("DexOpt: seek to deps failed: %s", strerror(errno));
         goto bail;
     }
 
@@ -1196,16 +1196,16 @@
      */
     depData = (u1*) malloc(optHdr.depsLength);
     if (depData == NULL) {
-        LOGW("DexOpt: unable to allocate %d bytes for deps\n",
+        LOGW("DexOpt: unable to allocate %d bytes for deps",
             optHdr.depsLength);
         goto bail;
     }
     actual = read(fd, depData, optHdr.depsLength);
     if (actual < 0) {
-        LOGW("DexOpt: failed reading deps: %s\n", strerror(errno));
+        LOGW("DexOpt: failed reading deps: %s", strerror(errno));
         goto bail;
     } else if (actual != (ssize_t) optHdr.depsLength) {
-        LOGW("DexOpt: failed reading deps: got %d of %d\n",
+        LOGW("DexOpt: failed reading deps: got %d of %d",
             (int) actual, optHdr.depsLength);
         goto bail;
     }
@@ -1219,18 +1219,18 @@
     ptr = depData;
     val = read4LE(&ptr);
     if (sourceAvail && val != modWhen) {
-        LOGI("DexOpt: source file mod time mismatch (%08x vs %08x)\n",
+        LOGI("DexOpt: source file mod time mismatch (%08x vs %08x)",
             val, modWhen);
         goto bail;
     }
     val = read4LE(&ptr);
     if (sourceAvail && val != crc) {
-        LOGI("DexOpt: source file CRC mismatch (%08x vs %08x)\n", val, crc);
+        LOGI("DexOpt: source file CRC mismatch (%08x vs %08x)", val, crc);
         goto bail;
     }
     val = read4LE(&ptr);
     if (val != DALVIK_VM_BUILD) {
-        LOGD("DexOpt: VM build version mismatch (%d vs %d)\n",
+        LOGD("DexOpt: VM build version mismatch (%d vs %d)",
             val, DALVIK_VM_BUILD);
         goto bail;
     }
@@ -1243,7 +1243,7 @@
     u4 numDeps;
 
     numDeps = read4LE(&ptr);
-    LOGV("+++ DexOpt: numDeps = %d\n", numDeps);
+    LOGV("+++ DexOpt: numDeps = %d", numDeps);
     for (cpe = gDvm.bootClassPath; cpe->ptr != NULL; cpe++) {
         const char* cacheFileName =
             dvmPathToAbsolutePortion(getCacheFileName(cpe));
@@ -1255,7 +1255,7 @@
 
         if (numDeps == 0) {
             /* more entries in bootclasspath than in deps list */
-            LOGI("DexOpt: not all deps represented\n");
+            LOGI("DexOpt: not all deps represented");
             goto bail;
         }
 
@@ -1263,7 +1263,7 @@
         if (len != storedStrLen ||
             strcmp(cacheFileName, (const char*) ptr) != 0)
         {
-            LOGI("DexOpt: mismatch dep name: '%s' vs. '%s'\n",
+            LOGI("DexOpt: mismatch dep name: '%s' vs. '%s'",
                 cacheFileName, ptr);
             goto bail;
         }
@@ -1271,25 +1271,25 @@
         ptr += storedStrLen;
 
         if (memcmp(signature, ptr, kSHA1DigestLen) != 0) {
-            LOGI("DexOpt: mismatch dep signature for '%s'\n", cacheFileName);
+            LOGI("DexOpt: mismatch dep signature for '%s'", cacheFileName);
             goto bail;
         }
         ptr += kSHA1DigestLen;
 
-        LOGV("DexOpt: dep match on '%s'\n", cacheFileName);
+        LOGV("DexOpt: dep match on '%s'", cacheFileName);
 
         numDeps--;
     }
 
     if (numDeps != 0) {
         /* more entries in deps list than in classpath */
-        LOGI("DexOpt: Some deps went away\n");
+        LOGI("DexOpt: Some deps went away");
         goto bail;
     }
 
     // consumed all data and no more?
     if (ptr != depData + optHdr.depsLength) {
-        LOGW("DexOpt: Spurious dep data? %d vs %d\n",
+        LOGW("DexOpt: Spurious dep data? %d vs %d",
             (int) (ptr - depData), optHdr.depsLength);
         assert(false);
     }
@@ -1322,7 +1322,7 @@
             dvmPathToAbsolutePortion(getCacheFileName(cpe));
         assert(cacheFileName != NULL); /* guaranteed by Class.c */
 
-        LOGV("+++ DexOpt: found dep '%s'\n", cacheFileName);
+        LOGV("+++ DexOpt: found dep '%s'", cacheFileName);
 
         numDeps++;
         bufLen += strlen(cacheFileName) +1;
@@ -1351,7 +1351,7 @@
         int len = strlen(cacheFileName) +1;
 
         if (ptr + 4 + len + kSHA1DigestLen > buf + bufLen) {
-            LOGE("DexOpt: overran buffer\n");
+            LOGE("DexOpt: overran buffer");
             dvmAbort();
         }
 
@@ -1390,7 +1390,7 @@
 
     assert(sizeof(header) == 8);
 
-    LOGV("Writing chunk, type=%.4s size=%d\n", (char*) &type, size);
+    LOGV("Writing chunk, type=%.4s size=%d", (char*) &type, size);
 
     header.ts.type = type;
     header.ts.size = (u4) size;
@@ -1408,7 +1408,7 @@
     /* if necessary, pad to 64-bit alignment */
     if ((size & 7) != 0) {
         int padSize = 8 - (size & 7);
-        LOGV("size was %d, inserting %d pad bytes\n", size, padSize);
+        LOGV("size was %d, inserting %d pad bytes", size, padSize);
         lseek(fd, padSize, SEEK_CUR);
     }
 
@@ -1466,7 +1466,7 @@
     uLong adler;
 
     if (lseek(fd, start, SEEK_SET) != start) {
-        LOGE("Unable to seek to start of checksum area (%ld): %s\n",
+        LOGE("Unable to seek to start of checksum area (%ld): %s",
             (long) start, strerror(errno));
         return false;
     }
@@ -1477,7 +1477,7 @@
         size_t wanted = (length < sizeof(readBuf)) ? length : sizeof(readBuf);
         actual = read(fd, readBuf, wanted);
         if (actual <= 0) {
-            LOGE("Read failed (%d) while computing checksum (len=%zu): %s\n",
+            LOGE("Read failed (%d) while computing checksum (len=%zu): %s",
                 (int) actual, length, strerror(errno));
             return false;
         }
diff --git a/vm/analysis/DexVerify.cpp b/vm/analysis/DexVerify.cpp
index 19513cb..f7217e6 100644
--- a/vm/analysis/DexVerify.cpp
+++ b/vm/analysis/DexVerify.cpp
@@ -42,19 +42,19 @@
     int i;
 
     if (dvmIsClassVerified(clazz)) {
-        LOGD("Ignoring duplicate verify attempt on %s\n", clazz->descriptor);
+        LOGD("Ignoring duplicate verify attempt on %s", clazz->descriptor);
         return true;
     }
 
     for (i = 0; i < clazz->directMethodCount; i++) {
         if (!verifyMethod(&clazz->directMethods[i])) {
-            LOG_VFY("Verifier rejected class %s\n", clazz->descriptor);
+            LOG_VFY("Verifier rejected class %s", clazz->descriptor);
             return false;
         }
     }
     for (i = 0; i < clazz->virtualMethodCount; i++) {
         if (!verifyMethod(&clazz->virtualMethods[i])) {
-            LOG_VFY("Verifier rejected class %s\n", clazz->descriptor);
+            LOG_VFY("Verifier rejected class %s", clazz->descriptor);
             return false;
         }
     }
@@ -94,7 +94,7 @@
     for (i = 0; i < (int) insnCount; /**/) {
         size_t width = dexGetWidthFromInstruction(insns);
         if (width == 0) {
-            LOG_VFY_METH(meth, "VFY: invalid instruction (0x%04x)\n", *insns);
+            LOG_VFY_METH(meth, "VFY: invalid instruction (0x%04x)", *insns);
             goto bail;
         } else if (width > 65535) {
             LOG_VFY_METH(meth,
@@ -112,7 +112,7 @@
         insns += width;
     }
     if (i != (int) vdata->insnsSize) {
-        LOG_VFY_METH(meth, "VFY: code did not end where expected (%d vs. %d)\n",
+        LOG_VFY_METH(meth, "VFY: code did not end where expected (%d vs. %d)",
             i, dvmGetMethodInsnsSize(meth));
         goto bail;
     }
@@ -273,7 +273,7 @@
      * sure that ins <= registers.
      */
     if (meth->insSize > meth->registersSize) {
-        LOG_VFY_METH(meth, "VFY: bad register counts (ins=%d regs=%d)\n",
+        LOG_VFY_METH(meth, "VFY: bad register counts (ins=%d regs=%d)",
             meth->insSize, meth->registersSize);
         goto bail;
     }
@@ -324,7 +324,7 @@
      * that's so rare that there's little point in checking.
      */
     if (!dvmVerifyCodeFlow(&vdata)) {
-        //LOGD("+++ %s failed code flow\n", meth->name);
+        //LOGD("+++ %s failed code flow", meth->name);
         goto bail;
     }
 
@@ -369,7 +369,7 @@
 
     /* make sure the table is 32-bit aligned */
     if ((((u4) arrayData) & 0x03) != 0) {
-        LOG_VFY("VFY: unaligned array data table: at %d, data offset %d\n",
+        LOG_VFY("VFY: unaligned array data table: at %d, data offset %d",
             curOffset, offsetToArrayData);
         return false;
     }
@@ -402,14 +402,14 @@
     const char* classDescriptor;
 
     if (idx >= pDvmDex->pHeader->typeIdsSize) {
-        LOG_VFY("VFY: bad type index %d (max %d)\n",
+        LOG_VFY("VFY: bad type index %d (max %d)",
             idx, pDvmDex->pHeader->typeIdsSize);
         return false;
     }
 
     classDescriptor = dexStringByTypeIdx(pDvmDex->pDexFile, idx);
     if (classDescriptor[0] != 'L') {
-        LOG_VFY("VFY: can't call new-instance on type '%s'\n",
+        LOG_VFY("VFY: can't call new-instance on type '%s'",
             classDescriptor);
         return false;
     }
@@ -427,7 +427,7 @@
     const char* classDescriptor;
 
     if (idx >= pDvmDex->pHeader->typeIdsSize) {
-        LOG_VFY("VFY: bad type index %d (max %d)\n",
+        LOG_VFY("VFY: bad type index %d (max %d)",
             idx, pDvmDex->pHeader->typeIdsSize);
         return false;
     }
@@ -441,12 +441,12 @@
 
     if (bracketCount == 0) {
         /* The given class must be an array type. */
-        LOG_VFY("VFY: can't new-array class '%s' (not an array)\n",
+        LOG_VFY("VFY: can't new-array class '%s' (not an array)",
             classDescriptor);
         return false;
     } else if (bracketCount > 255) {
         /* It is illegal to create an array of more than 255 dimensions. */
-        LOG_VFY("VFY: can't new-array class '%s' (exceeds limit)\n",
+        LOG_VFY("VFY: can't new-array class '%s' (exceeds limit)",
             classDescriptor);
         return false;
     }
@@ -461,7 +461,7 @@
 static bool checkTypeIndex(const DvmDex* pDvmDex, u4 idx)
 {
     if (idx >= pDvmDex->pHeader->typeIdsSize) {
-        LOG_VFY("VFY: bad type index %d (max %d)\n",
+        LOG_VFY("VFY: bad type index %d (max %d)",
             idx, pDvmDex->pHeader->typeIdsSize);
         return false;
     }
@@ -475,7 +475,7 @@
 static bool checkFieldIndex(const DvmDex* pDvmDex, u4 idx)
 {
     if (idx >= pDvmDex->pHeader->fieldIdsSize) {
-        LOG_VFY("VFY: bad field index %d (max %d)\n",
+        LOG_VFY("VFY: bad field index %d (max %d)",
             idx, pDvmDex->pHeader->fieldIdsSize);
         return false;
     }
@@ -489,7 +489,7 @@
 static bool checkMethodIndex(const DvmDex* pDvmDex, u4 idx)
 {
     if (idx >= pDvmDex->pHeader->methodIdsSize) {
-        LOG_VFY("VFY: bad method index %d (max %d)\n",
+        LOG_VFY("VFY: bad method index %d (max %d)",
             idx, pDvmDex->pHeader->methodIdsSize);
         return false;
     }
@@ -502,7 +502,7 @@
 static bool checkStringIndex(const DvmDex* pDvmDex, u4 idx)
 {
     if (idx >= pDvmDex->pHeader->stringIdsSize) {
-        LOG_VFY("VFY: bad string index %d (max %d)\n",
+        LOG_VFY("VFY: bad string index %d (max %d)",
             idx, pDvmDex->pHeader->stringIdsSize);
         return false;
     }
@@ -515,7 +515,7 @@
 static bool checkRegisterIndex(const Method* meth, u4 idx)
 {
     if (idx >= meth->registersSize) {
-        LOG_VFY("VFY: register index out of range (%d >= %d)\n",
+        LOG_VFY("VFY: register index out of range (%d >= %d)",
             idx, meth->registersSize);
         return false;
     }
@@ -528,7 +528,7 @@
 static bool checkWideRegisterIndex(const Method* meth, u4 idx)
 {
     if (idx+1 >= meth->registersSize) {
-        LOG_VFY("VFY: wide register index out of range (%d+1 >= %d)\n",
+        LOG_VFY("VFY: wide register index out of range (%d+1 >= %d)",
             idx, meth->registersSize);
         return false;
     }
@@ -553,14 +553,14 @@
     unsigned int idx;
 
     if (pDecInsn->vA > 5) {
-        LOG_VFY("VFY: invalid arg count (%d) in non-range invoke)\n",
+        LOG_VFY("VFY: invalid arg count (%d) in non-range invoke)",
             pDecInsn->vA);
         return false;
     }
 
     for (idx = 0; idx < pDecInsn->vA; idx++) {
         if (pDecInsn->arg[idx] > registersSize) {
-            LOG_VFY("VFY: invalid reg index (%d) in non-range invoke (> %d)\n",
+            LOG_VFY("VFY: invalid reg index (%d) in non-range invoke (> %d)",
                 pDecInsn->arg[idx], registersSize);
             return false;
         }
@@ -585,7 +585,7 @@
      * so there's no risk of integer overflow when adding them here.
      */
     if (pDecInsn->vA + pDecInsn->vC > registersSize) {
-        LOG_VFY("VFY: invalid reg index %d+%d in range invoke (> %d)\n",
+        LOG_VFY("VFY: invalid reg index %d+%d in range invoke (> %d)",
             pDecInsn->vA, pDecInsn->vC, registersSize);
         return false;
     }
@@ -629,7 +629,7 @@
 
     /* make sure the table is 32-bit aligned */
     if ((((u4) switchInsns) & 0x03) != 0) {
-        LOG_VFY("VFY: unaligned switch table: at %d, switch offset %d\n",
+        LOG_VFY("VFY: unaligned switch table: at %d, switch offset %d",
             curOffset, offsetToSwitch);
         return false;
     }
@@ -650,7 +650,7 @@
     tableSize = offsetToTargets + switchCount*2;
 
     if (switchInsns[0] != expectedSignature) {
-        LOG_VFY("VFY: wrong signature for switch table (0x%04x, wanted 0x%04x)\n",
+        LOG_VFY("VFY: wrong signature for switch table (0x%04x, wanted 0x%04x)",
             switchInsns[0], expectedSignature);
         return false;
     }
@@ -674,7 +674,7 @@
             s4 key = (s4) switchInsns[offsetToKeys + targ*2] |
                     (s4) (switchInsns[offsetToKeys + targ*2 +1] << 16);
             if (key <= lastKey) {
-                LOG_VFY("VFY: invalid packed switch: last key=%d, this=%d\n",
+                LOG_VFY("VFY: invalid packed switch: last key=%d, this=%d",
                     lastKey, key);
                 return false;
             }
@@ -692,7 +692,7 @@
         if (absOffset < 0 || absOffset >= (s4)insnCount ||
             !dvmInsnIsOpcode(insnFlags, absOffset))
         {
-            LOG_VFY("VFY: invalid switch target %d (-> 0x%x) at 0x%x[%d]\n",
+            LOG_VFY("VFY: invalid switch target %d (-> 0x%x) at 0x%x[%d]",
                 offset, absOffset, curOffset, targ);
             return false;
         }
@@ -726,7 +726,7 @@
         return false;
 
     if (!selfOkay && offset == 0) {
-        LOG_VFY_METH(meth, "VFY: branch offset of zero not allowed at 0x%x\n",
+        LOG_VFY_METH(meth, "VFY: branch offset of zero not allowed at 0x%x",
             curOffset);
         return false;
     }
@@ -737,7 +737,7 @@
      * it's unwise to depend on that.
      */
     if (((s8) curOffset + (s8) offset) != (s8)(curOffset + offset)) {
-        LOG_VFY_METH(meth, "VFY: branch target overflow 0x%x +%d\n",
+        LOG_VFY_METH(meth, "VFY: branch target overflow 0x%x +%d",
             curOffset, offset);
         return false;
     }
@@ -1435,7 +1435,7 @@
         case OP_UNUSED_EFFF:
         case OP_UNUSED_F0FF:
         case OP_UNUSED_F1FF:
-            LOGE("VFY: unexpected opcode %04x\n", decInsn.opcode);
+            LOGE("VFY: unexpected opcode %04x", decInsn.opcode);
             okay = false;
             break;
 
@@ -1446,7 +1446,7 @@
         }
 
         if (!okay) {
-            LOG_VFY_METH(meth, "VFY:  rejecting opcode 0x%02x at 0x%04x\n",
+            LOG_VFY_METH(meth, "VFY:  rejecting opcode 0x%02x at 0x%04x",
                 decInsn.opcode, codeOffset);
             return false;
         }
diff --git a/vm/analysis/Liveness.cpp b/vm/analysis/Liveness.cpp
index f659e89..8099685 100644
--- a/vm/analysis/Liveness.cpp
+++ b/vm/analysis/Liveness.cpp
@@ -68,7 +68,7 @@
     bool verbose = false; //= dvmWantVerboseVerification(vdata->method);
     if (verbose) {
         const Method* meth = vdata->method;
-        LOGI("Computing liveness for %s.%s:%s\n",
+        LOGI("Computing liveness for %s.%s:%s",
             meth->clazz->descriptor, meth->name, meth->shorty);
     }
 
@@ -147,7 +147,7 @@
         assert(workBlock->liveRegs != NULL);
         dvmCopyBitVector(workBits, workBlock->liveRegs);
         if (verbose) {
-            LOGI("Loaded work bits from last=0x%04x\n", workBlock->lastAddr);
+            LOGI("Loaded work bits from last=0x%04x", workBlock->lastAddr);
             dumpLiveState(vdata, 0xfffd, workBlock->liveRegs);
             dumpLiveState(vdata, 0xffff, workBits);
         }
@@ -215,7 +215,7 @@
 
             pred->changed = dvmCheckMergeBitVectors(pred->liveRegs, workBits);
             if (verbose) {
-                LOGI("merging cur=%04x into pred last=%04x (ch=%d)\n",
+                LOGI("merging cur=%04x into pred last=%04x (ch=%d)",
                     curIdx, pred->lastAddr, pred->changed);
                 dumpLiveState(vdata, 0xfffa, pred->liveRegs);
                 dumpLiveState(vdata, 0xfffb, workBits);
@@ -997,7 +997,7 @@
     bool verbose = dvmWantVerboseVerification(vdata->method);
 
     if (verbose) {
-        LOGI("%04x-%04x %2d (%s %s)\n",
+        LOGI("%04x-%04x %2d (%s %s)",
             startAddress, endAddress, reg, name, descriptor);
     }
 
@@ -1075,5 +1075,5 @@
         regChars[1 + idx + (idx/4)] = ch;
     }
 
-    LOGI("0x%04x %s\n", curIdx, regChars);
+    LOGI("0x%04x %s", curIdx, regChars);
 }
diff --git a/vm/analysis/Optimize.cpp b/vm/analysis/Optimize.cpp
index 9078187..e773e60 100644
--- a/vm/analysis/Optimize.cpp
+++ b/vm/analysis/Optimize.cpp
@@ -85,7 +85,7 @@
              * Not expected.  We only use this for key methods in core
              * classes, so we should always be able to find them.
              */
-            LOGE("Unable to find method for inlining: %s.%s:%s\n",
+            LOGE("Unable to find method for inlining: %s.%s:%s",
                 ops[i].classDescriptor, ops[i].methodName,
                 ops[i].methodSignature);
             return false;
@@ -532,7 +532,7 @@
         }
         if (resClass == NULL) {
             /* not found, exception should be raised */
-            LOGV("DexOpt: class %d (%s) not found\n",
+            LOGV("DexOpt: class %d (%s) not found",
                 classIdx,
                 dexStringByTypeIdx(pDvmDex->pDexFile, classIdx));
             if (pFailure != NULL) {
@@ -564,7 +564,7 @@
 
     /* multiple definitions? */
     if (IS_CLASS_FLAG_SET(resClass, CLASS_MULTIPLE_DEFS)) {
-        LOGI("DexOpt: not resolving ambiguous class '%s'\n",
+        LOGI("DexOpt: not resolving ambiguous class '%s'",
             resClass->descriptor);
         if (pFailure != NULL)
             *pFailure = VERIFY_ERROR_NO_CLASS;
@@ -576,7 +576,7 @@
     bool allowed = dvmCheckClassAccess(referrer, resClass);
     untweakLoader(referrer, resClass);
     if (!allowed) {
-        LOGW("DexOpt: resolve class illegal access: %s -> %s\n",
+        LOGW("DexOpt: resolve class illegal access: %s -> %s",
             referrer->descriptor, resClass->descriptor);
         if (pFailure != NULL)
             *pFailure = VERIFY_ERROR_ACCESS_CLASS;
@@ -619,7 +619,7 @@
             dexStringById(pDvmDex->pDexFile, pFieldId->nameIdx),
             dexStringByTypeIdx(pDvmDex->pDexFile, pFieldId->typeIdx));
         if (resField == NULL) {
-            LOGD("DexOpt: couldn't find field %s.%s\n",
+            LOGD("DexOpt: couldn't find field %s.%s",
                 resClass->descriptor,
                 dexStringById(pDvmDex->pDexFile, pFieldId->nameIdx));
             if (pFailure != NULL)
@@ -627,7 +627,7 @@
             return NULL;
         }
         if (dvmIsStaticField(resField)) {
-            LOGD("DexOpt: wanted instance, got static for field %s.%s\n",
+            LOGD("DexOpt: wanted instance, got static for field %s.%s",
                 resClass->descriptor,
                 dexStringById(pDvmDex->pDexFile, pFieldId->nameIdx));
             if (pFailure != NULL)
@@ -646,7 +646,7 @@
     bool allowed = dvmCheckFieldAccess(referrer, (Field*)resField);
     untweakLoader(referrer, resField->clazz);
     if (!allowed) {
-        LOGI("DexOpt: access denied from %s to field %s.%s\n",
+        LOGI("DexOpt: access denied from %s to field %s.%s",
             referrer->descriptor, resField->clazz->descriptor,
             resField->name);
         if (pFailure != NULL)
@@ -694,14 +694,14 @@
         resField = (StaticField*)dvmFindFieldHier(resClass, fieldName,
                     dexStringByTypeIdx(pDvmDex->pDexFile, pFieldId->typeIdx));
         if (resField == NULL) {
-            LOGD("DexOpt: couldn't find static field %s.%s\n",
+            LOGD("DexOpt: couldn't find static field %s.%s",
                 resClass->descriptor, fieldName);
             if (pFailure != NULL)
                 *pFailure = VERIFY_ERROR_NO_FIELD;
             return NULL;
         }
         if (!dvmIsStaticField(resField)) {
-            LOGD("DexOpt: wanted static, got instance for field %s.%s\n",
+            LOGD("DexOpt: wanted static, got instance for field %s.%s",
                 resClass->descriptor, fieldName);
             if (pFailure != NULL)
                 *pFailure = VERIFY_ERROR_CLASS_CHANGE;
@@ -724,7 +724,7 @@
     bool allowed = dvmCheckFieldAccess(referrer, (Field*)resField);
     untweakLoader(referrer, resField->clazz);
     if (!allowed) {
-        LOGI("DexOpt: access denied from %s to field %s.%s\n",
+        LOGI("DexOpt: access denied from %s to field %s.%s",
             referrer->descriptor, resField->clazz->descriptor,
             resField->name);
         if (pFailure != NULL)
@@ -770,16 +770,16 @@
 
     if (volatileOpc != OP_NOP && dvmIsVolatileField(instField)) {
         updateOpcode(method, insns, volatileOpc);
-        LOGV("DexOpt: rewrote ifield access %s.%s --> volatile\n",
+        LOGV("DexOpt: rewrote ifield access %s.%s --> volatile",
             instField->clazz->descriptor, instField->name);
     } else if (quickOpc != OP_NOP && instField->byteOffset < 65536) {
         updateOpcode(method, insns, quickOpc);
         dvmUpdateCodeUnit(method, insns+1, (u2) instField->byteOffset);
-        LOGV("DexOpt: rewrote ifield access %s.%s --> %d\n",
+        LOGV("DexOpt: rewrote ifield access %s.%s --> %d",
             instField->clazz->descriptor, instField->name,
             instField->byteOffset);
     } else {
-        LOGV("DexOpt: no rewrite of ifield access %s.%s\n",
+        LOGV("DexOpt: no rewrite of ifield access %s.%s",
             instField->clazz->descriptor, instField->name);
     }
 
@@ -811,10 +811,10 @@
 
     if (dvmIsVolatileField(instField)) {
         updateOpcode(method, insns, volatileOpc);
-        LOGV("DexOpt: rewrote jumbo ifield access %s.%s --> volatile\n",
+        LOGV("DexOpt: rewrote jumbo ifield access %s.%s --> volatile",
             instField->clazz->descriptor, instField->name);
     } else {
-        LOGV("DexOpt: no rewrite of jumbo ifield access %s.%s\n",
+        LOGV("DexOpt: no rewrite of jumbo ifield access %s.%s",
             instField->clazz->descriptor, instField->name);
     }
 }
@@ -844,7 +844,7 @@
 
     if (dvmIsVolatileField(staticField)) {
         updateOpcode(method, insns, volatileOpc);
-        LOGV("DexOpt: rewrote sfield access %s.%s --> volatile\n",
+        LOGV("DexOpt: rewrote sfield access %s.%s --> volatile",
             staticField->clazz->descriptor, staticField->name);
     }
 }
@@ -879,7 +879,7 @@
            methodType == METHOD_VIRTUAL ||
            methodType == METHOD_STATIC);
 
-    LOGVV("--- resolving method %u (referrer=%s)\n", methodIdx,
+    LOGVV("--- resolving method %u (referrer=%s)", methodIdx,
         referrer->descriptor);
 
     resMethod = dvmDexGetResolvedMethod(pDvmDex, methodIdx);
@@ -895,14 +895,14 @@
              * Can't find the class that the method is a part of, or don't
              * have permission to access the class.
              */
-            LOGV("DexOpt: can't find called method's class (?.%s)\n",
+            LOGV("DexOpt: can't find called method's class (?.%s)",
                 dexStringById(pDvmDex->pDexFile, pMethodId->nameIdx));
             if (pFailure != NULL) { assert(!VERIFY_OK(*pFailure)); }
             return NULL;
         }
         if (dvmIsInterfaceClass(resClass)) {
             /* method is part of an interface; this is wrong method for that */
-            LOGW("DexOpt: method is in an interface\n");
+            LOGW("DexOpt: method is in an interface");
             if (pFailure != NULL)
                 *pFailure = VERIFY_ERROR_GENERIC;
             return NULL;
@@ -926,7 +926,7 @@
         }
 
         if (resMethod == NULL) {
-            LOGV("DexOpt: couldn't find method '%s'\n",
+            LOGV("DexOpt: couldn't find method '%s'",
                 dexStringById(pDvmDex->pDexFile, pMethodId->nameIdx));
             if (pFailure != NULL)
                 *pFailure = VERIFY_ERROR_NO_METHOD;
@@ -934,7 +934,7 @@
         }
         if (methodType == METHOD_STATIC) {
             if (!dvmIsStaticMethod(resMethod)) {
-                LOGD("DexOpt: wanted static, got instance for method %s.%s\n",
+                LOGD("DexOpt: wanted static, got instance for method %s.%s",
                     resClass->descriptor, resMethod->name);
                 if (pFailure != NULL)
                     *pFailure = VERIFY_ERROR_CLASS_CHANGE;
@@ -942,7 +942,7 @@
             }
         } else if (methodType == METHOD_VIRTUAL) {
             if (dvmIsStaticMethod(resMethod)) {
-                LOGD("DexOpt: wanted instance, got static for method %s.%s\n",
+                LOGD("DexOpt: wanted instance, got static for method %s.%s",
                     resClass->descriptor, resMethod->name);
                 if (pFailure != NULL)
                     *pFailure = VERIFY_ERROR_CLASS_CHANGE;
@@ -952,7 +952,7 @@
 
         /* see if this is a pure-abstract method */
         if (dvmIsAbstractMethod(resMethod) && !dvmIsAbstractClass(resClass)) {
-            LOGW("DexOpt: pure-abstract method '%s' in %s\n",
+            LOGW("DexOpt: pure-abstract method '%s' in %s",
                 dexStringById(pDvmDex->pDexFile, pMethodId->nameIdx),
                 resClass->descriptor);
             if (pFailure != NULL)
@@ -972,7 +972,7 @@
             dvmDexSetResolvedMethod(pDvmDex, methodIdx, resMethod);
     }
 
-    LOGVV("--- found method %d (%s.%s)\n",
+    LOGVV("--- found method %d (%s.%s)",
         methodIdx, resMethod->clazz->descriptor, resMethod->name);
 
     /* access allowed? */
@@ -982,7 +982,7 @@
     if (!allowed) {
         IF_LOGI() {
             char* desc = dexProtoCopyMethodDescriptor(&resMethod->prototype);
-            LOGI("DexOpt: illegal method access (call %s.%s %s from %s)\n",
+            LOGI("DexOpt: illegal method access (call %s.%s %s from %s)",
                 resMethod->clazz->descriptor, resMethod->name, desc,
                 referrer->descriptor);
             free(desc);
@@ -1011,7 +1011,7 @@
 
     baseMethod = dvmOptResolveMethod(clazz, methodIdx, METHOD_VIRTUAL, NULL);
     if (baseMethod == NULL) {
-        LOGD("DexOpt: unable to optimize virt call 0x%04x at 0x%02x in %s.%s\n",
+        LOGD("DexOpt: unable to optimize virt call 0x%04x at 0x%02x in %s.%s",
             methodIdx,
             (int) (insns - method->insns), clazz->descriptor,
             method->name);
@@ -1030,7 +1030,7 @@
     updateOpcode(method, insns, newOpc);
     dvmUpdateCodeUnit(method, insns+1, baseMethod->methodIndex);
 
-    //LOGI("DexOpt: rewrote call to %s.%s --> %s.%s\n",
+    //LOGI("DexOpt: rewrote call to %s.%s --> %s.%s",
     //    method->clazz->descriptor, method->name,
     //    baseMethod->clazz->descriptor, baseMethod->name);
 
@@ -1056,7 +1056,7 @@
 
     calledMethod = dvmOptResolveMethod(clazz, methodIdx, METHOD_DIRECT, NULL);
     if (calledMethod == NULL) {
-        LOGD("DexOpt: unable to opt direct call 0x%04x at 0x%02x in %s.%s\n",
+        LOGD("DexOpt: unable to opt direct call 0x%04x at 0x%02x in %s.%s",
             methodIdx, (int) (insns - method->insns),
             clazz->descriptor, method->name);
         return false;
@@ -1083,7 +1083,7 @@
             updateOpcode(method, insns, OP_INVOKE_OBJECT_INIT_RANGE);
         }
 
-        LOGVV("DexOpt: replaced Object.<init> in %s.%s\n",
+        LOGVV("DexOpt: replaced Object.<init> in %s.%s",
             method->clazz->descriptor, method->name);
     }
 
@@ -1101,7 +1101,7 @@
 
     calledMethod = dvmOptResolveMethod(clazz, methodIdx, METHOD_DIRECT, NULL);
     if (calledMethod == NULL) {
-        LOGD("DexOpt: unable to opt direct call 0x%04x at 0x%02x in %s.%s\n",
+        LOGD("DexOpt: unable to opt direct call 0x%04x at 0x%02x in %s.%s",
             methodIdx, (int) (insns - method->insns),
             clazz->descriptor, method->name);
         return false;
@@ -1113,7 +1113,7 @@
         assert(insns[0] == ((u2) (OP_INVOKE_DIRECT_JUMBO << 8) | 0xff));
         updateOpcode(method, insns, OP_INVOKE_OBJECT_INIT_JUMBO);
 
-        LOGVV("DexOpt: replaced jumbo Object.<init> in %s.%s\n",
+        LOGVV("DexOpt: replaced jumbo Object.<init> in %s.%s",
             method->clazz->descriptor, method->name);
     }
 
@@ -1132,7 +1132,7 @@
     DvmDex* pDvmDex = referrer->pDvmDex;
     Method* resMethod;
 
-    LOGVV("--- resolving interface method %d (referrer=%s)\n",
+    LOGVV("--- resolving interface method %d (referrer=%s)",
         methodIdx, referrer->descriptor);
 
     resMethod = dvmDexGetResolvedMethod(pDvmDex, methodIdx);
@@ -1150,7 +1150,7 @@
         }
         if (!dvmIsInterfaceClass(resClass)) {
             /* whoops */
-            LOGI("Interface method not part of interface class\n");
+            LOGI("Interface method not part of interface class");
             return NULL;
         }
 
@@ -1159,7 +1159,7 @@
         DexProto proto;
         dexProtoSetFromMethodId(&proto, pDvmDex->pDexFile, pMethodId);
 
-        LOGVV("+++ looking for '%s' '%s' in resClass='%s'\n",
+        LOGVV("+++ looking for '%s' '%s' in resClass='%s'",
             methodName, methodSig, resClass->descriptor);
         resMethod = dvmFindInterfaceMethodHier(resClass, methodName, &proto);
         if (resMethod == NULL) {
@@ -1169,7 +1169,7 @@
         /* we're expecting this to be abstract */
         if (!dvmIsAbstractMethod(resMethod)) {
             char* desc = dexProtoCopyMethodDescriptor(&resMethod->prototype);
-            LOGW("Found non-abstract interface method %s.%s %s\n",
+            LOGW("Found non-abstract interface method %s.%s %s",
                 resMethod->clazz->descriptor, resMethod->name, desc);
             free(desc);
             return NULL;
@@ -1181,7 +1181,7 @@
         dvmDexSetResolvedMethod(pDvmDex, methodIdx, resMethod);
     }
 
-    LOGVV("--- found interface method %d (%s.%s)\n",
+    LOGVV("--- found interface method %d (%s.%s)",
         methodIdx, resMethod->clazz->descriptor, resMethod->name);
 
     /* interface methods are always public; no need to check access */
@@ -1207,14 +1207,14 @@
 
     calledMethod = dvmOptResolveMethod(clazz, methodIdx, methodType, NULL);
     if (calledMethod == NULL) {
-        LOGV("+++ DexOpt inline: can't find %d\n", methodIdx);
+        LOGV("+++ DexOpt inline: can't find %d", methodIdx);
         return false;
     }
 
     while (inlineSubs->method != NULL) {
         /*
         if (extra) {
-            LOGI("comparing %p vs %p %s.%s %s\n",
+            LOGI("comparing %p vs %p %s.%s %s",
                 inlineSubs->method, calledMethod,
                 inlineSubs->method->clazz->descriptor,
                 inlineSubs->method->name,
@@ -1228,7 +1228,7 @@
             updateOpcode(method, insns, OP_EXECUTE_INLINE);
             dvmUpdateCodeUnit(method, insns+1, (u2) inlineSubs->inlineIdx);
 
-            //LOGI("DexOpt: execute-inline %s.%s --> %s.%s\n",
+            //LOGI("DexOpt: execute-inline %s.%s --> %s.%s",
             //    method->clazz->descriptor, method->name,
             //    calledMethod->clazz->descriptor, calledMethod->name);
             return true;
@@ -1256,7 +1256,7 @@
 
     calledMethod = dvmOptResolveMethod(clazz, methodIdx, methodType, NULL);
     if (calledMethod == NULL) {
-        LOGV("+++ DexOpt inline/range: can't find %d\n", methodIdx);
+        LOGV("+++ DexOpt inline/range: can't find %d", methodIdx);
         return false;
     }
 
@@ -1268,7 +1268,7 @@
             updateOpcode(method, insns, OP_EXECUTE_INLINE_RANGE);
             dvmUpdateCodeUnit(method, insns+1, (u2) inlineSubs->inlineIdx);
 
-            //LOGI("DexOpt: execute-inline/range %s.%s --> %s.%s\n",
+            //LOGI("DexOpt: execute-inline/range %s.%s --> %s.%s",
             //    method->clazz->descriptor, method->name,
             //    calledMethod->clazz->descriptor, calledMethod->name);
             return true;
diff --git a/vm/analysis/RegisterMap.cpp b/vm/analysis/RegisterMap.cpp
index 37b2116..65fd779 100644
--- a/vm/analysis/RegisterMap.cpp
+++ b/vm/analysis/RegisterMap.cpp
@@ -142,11 +142,11 @@
             break;
     }
 
-    LOGI("Register Map gcPointGap stats (diff count=%d, total=%d):\n",
+    LOGI("Register Map gcPointGap stats (diff count=%d, total=%d):",
         pStats->gcGapCount, pStats->totalGcPointCount);
     assert(pStats->gcPointGap[0] == 0);
     for (i = 1; i <= end; i++) {
-        LOGI(" %2d %d\n", i, pStats->gcPointGap[i]);
+        LOGI(" %2d %d", i, pStats->gcPointGap[i]);
     }
 
 
@@ -155,16 +155,16 @@
             break;
     }
 
-    LOGI("Register Map bit difference stats:\n");
+    LOGI("Register Map bit difference stats:");
     for (i = 0; i <= end; i++) {
-        LOGI(" %2d %d\n", i, pStats->numDiffBits[i]);
+        LOGI(" %2d %d", i, pStats->numDiffBits[i]);
     }
 
 
-    LOGI("Register Map update position stats (lt16=%d ge16=%d):\n",
+    LOGI("Register Map update position stats (lt16=%d ge16=%d):",
         pStats->updateLT16, pStats->updateGE16);
     for (i = 0; i < kNumUpdatePosns; i++) {
-        LOGI(" %2d %d\n", i, pStats->updatePosn[i]);
+        LOGI(" %2d %d", i, pStats->updatePosn[i]);
     }
 #endif
 }
@@ -197,7 +197,7 @@
     int bufSize;
 
     if (vdata->method->registersSize >= 2048) {
-        LOGE("ERROR: register map can't handle %d registers\n",
+        LOGE("ERROR: register map can't handle %d registers",
             vdata->method->registersSize);
         goto bail;
     }
@@ -231,7 +231,7 @@
     }
     if (gcPointCount >= 65536) {
         /* we could handle this, but in practice we don't get near this */
-        LOGE("ERROR: register map can't handle %d gc points in one method\n",
+        LOGE("ERROR: register map can't handle %d gc points in one method",
             gcPointCount);
         goto bail;
     }
@@ -241,7 +241,7 @@
      */
     bufSize = kHeaderSize + gcPointCount * (bytesForAddr + regWidth);
 
-    LOGV("+++ grm: %s.%s (adr=%d gpc=%d rwd=%d bsz=%d)\n",
+    LOGV("+++ grm: %s.%s (adr=%d gpc=%d rwd=%d bsz=%d)",
         vdata->method->clazz->descriptor, vdata->method->name,
         bytesForAddr, gcPointCount, regWidth, bufSize);
 
@@ -270,7 +270,7 @@
         }
     }
 
-    LOGV("mapData=%p pMap=%p bufSize=%d\n", mapData, pMap, bufSize);
+    LOGV("mapData=%p pMap=%p bufSize=%d", mapData, pMap, bufSize);
     assert(mapData - (const u1*) pMap == bufSize);
 
     if (REGISTER_MAP_VERIFY && !verifyMap(vdata, pMap))
@@ -294,7 +294,7 @@
             RegisterMap* pUncompMap;
             pUncompMap = uncompressMapDifferential(pCompMap);
             if (pUncompMap == NULL) {
-                LOGE("Map failed to uncompress - %s.%s\n",
+                LOGE("Map failed to uncompress - %s.%s",
                     vdata->method->clazz->descriptor,
                     vdata->method->name);
                 free(pCompMap);
@@ -302,7 +302,7 @@
                 dvmAbort();
             } else {
                 if (compareMaps(pMap, pUncompMap) != 0) {
-                    LOGE("Map comparison failed - %s.%s\n",
+                    LOGE("Map comparison failed - %s.%s",
                         vdata->method->clazz->descriptor,
                         vdata->method->name);
                     free(pCompMap);
@@ -316,7 +316,7 @@
         }
 
         if (REGISTER_MAP_VERBOSE) {
-            LOGD("Good compress on %s.%s\n",
+            LOGD("Good compress on %s.%s",
                 vdata->method->clazz->descriptor,
                 vdata->method->name);
         }
@@ -324,7 +324,7 @@
         pMap = pCompMap;
     } else {
         if (REGISTER_MAP_VERBOSE) {
-            LOGD("Unable to compress %s.%s (ent=%d rw=%d)\n",
+            LOGD("Unable to compress %s.%s (ent=%d rw=%d)",
                 vdata->method->clazz->descriptor,
                 vdata->method->name,
                 dvmRegisterMapGetNumEntries(pMap),
@@ -413,7 +413,7 @@
         break;
     default:
         /* can't happen */
-        LOGE("Can only dump Compact8 / Compact16 maps (not %d)\n", format);
+        LOGE("Can only dump Compact8 / Compact16 maps (not %d)", format);
         return;
     }
 
@@ -453,7 +453,7 @@
         }
         hexBuf[i * 3] = '\0';
 
-        LOGD("  %04x %s %s\n", addr, outBuf, hexBuf);
+        LOGD("  %04x %s %s", addr, outBuf, hexBuf);
     }
 }
 
@@ -479,7 +479,7 @@
         {
             char* desc;
             desc = dexProtoCopyMethodDescriptor(&vdata->method->prototype);
-            LOGI("Map for %s.%s %s\n", vdata->method->clazz->descriptor,
+            LOGI("Map for %s.%s %s", vdata->method->clazz->descriptor,
                 vdata->method->name, desc);
             free(desc);
 
@@ -488,7 +488,7 @@
     }
 
     if ((vdata->method->registersSize + 7) / 8 != pMap->regWidth) {
-        LOGE("GLITCH: registersSize=%d, regWidth=%d\n",
+        LOGE("GLITCH: registersSize=%d, regWidth=%d",
             vdata->method->registersSize, pMap->regWidth);
         return false;
     }
@@ -512,7 +512,7 @@
 
         const RegType* regs = vdata->registerLines[addr].regTypes;
         if (regs == NULL) {
-            LOGE("GLITCH: addr %d has no data\n", addr);
+            LOGE("GLITCH: addr %d has no data", addr);
             return false;
         }
 
@@ -534,7 +534,7 @@
             regIsRef = isReferenceType(type);
 
             if (bitIsRef != regIsRef) {
-                LOGE("GLITCH: addr %d reg %d: bit=%d reg=%d(%d)\n",
+                LOGE("GLITCH: addr %d reg %d: bit=%d reg=%d(%d)",
                     addr, i, bitIsRef, regIsRef, type);
                 return false;
             }
@@ -590,7 +590,7 @@
             return len + (ptr - (u1*) pMap);
         }
     default:
-        LOGE("Bad register map format %d\n", format);
+        LOGE("Bad register map format %d", format);
         dvmAbort();
         return 0;
     }
@@ -609,7 +609,7 @@
 {
     if (meth->registerMap == NULL) {
         if (!dvmIsAbstractMethod(meth) && !dvmIsNativeMethod(meth)) {
-            LOGW("Warning: no map available for %s.%s\n",
+            LOGW("Warning: no map available for %s.%s",
                 meth->clazz->descriptor, meth->name);
             /* weird, but keep going */
         }
@@ -644,7 +644,7 @@
 
     /* artificial limit */
     if (clazz->virtualMethodCount + clazz->directMethodCount >= 65536) {
-        LOGE("Too many methods in %s\n", clazz->descriptor);
+        LOGE("Too many methods in %s", clazz->descriptor);
         return false;
     }
 
@@ -743,7 +743,7 @@
 
         if (clazz != NULL) {
             offsetTable[idx] = ptr - basePtr;
-            LOGVV("%d -> offset %d (%p-%p)\n",
+            LOGVV("%d -> offset %d (%p-%p)",
                 idx, offsetTable[idx], ptr, basePtr);
 
             if (!writeMapsAllMethods(pDvmDex, clazz, &ptr,
@@ -753,18 +753,18 @@
             }
 
             ptr = align32(ptr);
-            LOGVV("Size %s (%d+%d methods): %d\n", clazz->descriptor,
+            LOGVV("Size %s (%d+%d methods): %d", clazz->descriptor,
                 clazz->directMethodCount, clazz->virtualMethodCount,
                 (ptr - basePtr) - offsetTable[idx]);
         } else {
-            LOGV("%4d NOT mapadding '%s'\n", idx, classDescriptor);
+            LOGV("%4d NOT mapadding '%s'", idx, classDescriptor);
             assert(offsetTable[idx] == 0);
         }
     }
 
     if (ptr - basePtr >= (int)length) {
         /* a bit late */
-        LOGE("Buffer overrun\n");
+        LOGE("Buffer overrun");
         dvmAbort();
     }
 
@@ -813,7 +813,7 @@
         return NULL;
     }
 
-    LOGV("TOTAL size of register maps: %d\n", actual);
+    LOGV("TOTAL size of register maps: %d", actual);
 
     pBuilder->data = pBuilder->memMap.addr;
     pBuilder->size = actual;
@@ -849,13 +849,13 @@
         return NULL;
 
     if (classIdx >= pClassPool->numClasses) {
-        LOGE("bad class index (%d vs %d)\n", classIdx, pClassPool->numClasses);
+        LOGE("bad class index (%d vs %d)", classIdx, pClassPool->numClasses);
         dvmAbort();
     }
 
     u4 classOffset = pClassPool->classDataOffset[classIdx];
     if (classOffset == 0) {
-        LOGV("+++ no map for classIdx=%d\n", classIdx);
+        LOGV("+++ no map for classIdx=%d", classIdx);
         return NULL;
     }
 
@@ -874,7 +874,7 @@
     const RegisterMap* pMap = (const RegisterMap*) *pPtr;
 
     *pPtr = /*align32*/(((u1*) pMap) + computeRegisterMapSize(pMap));
-    LOGVV("getNext: %p -> %p (f=0x%x w=%d e=%d)\n",
+    LOGVV("getNext: %p -> %p (f=0x%x w=%d e=%d)",
         pMap, *pPtr, pMap->format, pMap->regWidth,
         dvmRegisterMapGetNumEntries(pMap));
     return pMap;
@@ -910,7 +910,7 @@
         addrWidth = 2;
         break;
     default:
-        LOGE("Unknown format %d\n", format);
+        LOGE("Unknown format %d", format);
         dvmAbort();
         return NULL;
     }
@@ -977,12 +977,12 @@
     size1 = computeRegisterMapSize(pMap1);
     size2 = computeRegisterMapSize(pMap2);
     if (size1 != size2) {
-        LOGI("compareMaps: size mismatch (%zd vs %zd)\n", size1, size2);
+        LOGI("compareMaps: size mismatch (%zd vs %zd)", size1, size2);
         return -1;
     }
 
     if (memcmp(pMap1, pMap2, size1) != 0) {
-        LOGI("compareMaps: content mismatch\n");
+        LOGI("compareMaps: content mismatch");
         return -1;
     }
 
@@ -1012,7 +1012,7 @@
     /* (if we use this at a time other than during GC, fix/remove this test) */
     if (true) {
         if (!gDvm.zygote && dvmTryLockMutex(&gDvm.gcHeapLock) == 0) {
-            LOGE("GLITCH: dvmGetExpandedRegisterMap not called at GC time\n");
+            LOGE("GLITCH: dvmGetExpandedRegisterMap not called at GC time");
             dvmAbort();
         }
     }
@@ -1023,10 +1023,10 @@
     case kRegMapFormatCompact16:
         if (REGISTER_MAP_VERBOSE) {
             if (dvmRegisterMapGetOnHeap(curMap)) {
-                LOGD("RegMap: already expanded: %s.%s\n",
+                LOGD("RegMap: already expanded: %s.%s",
                     method->clazz->descriptor, method->name);
             } else {
-                LOGD("RegMap: stored w/o compression: %s.%s\n",
+                LOGD("RegMap: stored w/o compression: %s.%s",
                     method->clazz->descriptor, method->name);
             }
         }
@@ -1035,13 +1035,13 @@
         newMap = uncompressMapDifferential(curMap);
         break;
     default:
-        LOGE("Unknown format %d in dvmGetExpandedRegisterMap\n", format);
+        LOGE("Unknown format %d in dvmGetExpandedRegisterMap", format);
         dvmAbort();
         newMap = NULL;      // make gcc happy
     }
 
     if (newMap == NULL) {
-        LOGE("Map failed to uncompress (fmt=%d) %s.%s\n",
+        LOGE("Map failed to uncompress (fmt=%d) %s.%s",
             format, method->clazz->descriptor, method->name);
         return NULL;
     }
@@ -1054,14 +1054,14 @@
         MapStats* pStats = (MapStats*) gDvm.registerMapStats;
         pStats->numExpandedMaps++;
         pStats->totalExpandedMapSize += computeRegisterMapSize(newMap);
-        LOGD("RMAP: count=%d size=%d\n",
+        LOGD("RMAP: count=%d size=%d",
             pStats->numExpandedMaps, pStats->totalExpandedMapSize);
     }
 #endif
 
     IF_LOGV() {
         char* desc = dexProtoCopyMethodDescriptor(&method->prototype);
-        LOGV("Expanding map -> %s.%s:%s\n",
+        LOGV("Expanding map -> %s.%s:%s",
             method->clazz->descriptor, method->name, desc);
         free(desc);
     }
@@ -1282,11 +1282,11 @@
             int addrDiff = addr - prevAddr;
 
             if (addrDiff < 0) {
-                LOGE("GLITCH: address went backward (0x%04x->0x%04x, %s.%s)\n",
+                LOGE("GLITCH: address went backward (0x%04x->0x%04x, %s.%s)",
                     prevAddr, addr, method->clazz->descriptor, method->name);
             } else if (addrDiff > kMaxGcPointGap) {
                 if (REGISTER_MAP_VERBOSE) {
-                    LOGI("HEY: addrDiff is %d, max %d (0x%04x->0x%04x %s.%s)\n",
+                    LOGI("HEY: addrDiff is %d, max %d (0x%04x->0x%04x %s.%s)",
                         addrDiff, kMaxGcPointGap, prevAddr, addr,
                         method->clazz->descriptor, method->name);
                 }
@@ -1331,14 +1331,14 @@
 
                         if (bitNum >= method->registersSize) {
                             /* stuff off the end should be zero in both */
-                            LOGE("WEIRD: bit=%d (%d/%d), prev=%02x cur=%02x\n",
+                            LOGE("WEIRD: bit=%d (%d/%d), prev=%02x cur=%02x",
                                 bit, regByte, method->registersSize,
                                 prev, cur);
                             assert(false);
                         }
                         int idx = (int) (bitNum * div);
                         if (!(idx >= 0 && idx < kNumUpdatePosns)) {
-                            LOGE("FAIL: bitNum=%d (of %d) div=%.3f idx=%d\n",
+                            LOGE("FAIL: bitNum=%d (of %d) div=%.3f idx=%d",
                                 bitNum, method->registersSize, div, idx);
                             assert(false);
                         }
@@ -1349,7 +1349,7 @@
 
             if (numDiff > kMaxDiffBits) {
                 if (REGISTER_MAP_VERBOSE) {
-                    LOGI("WOW: numDiff is %d, max %d\n", numDiff, kMaxDiffBits);
+                    LOGI("WOW: numDiff is %d, max %d", numDiff, kMaxDiffBits);
                 }
             } else {
                 pStats->numDiffBits[numDiff]++;
@@ -1464,7 +1464,7 @@
         addrWidth = 2;
         break;
     default:
-        LOGE("ERROR: can't compress map with format=%d\n", format);
+        LOGE("ERROR: can't compress map with format=%d", format);
         return NULL;
     }
 
@@ -1472,14 +1472,14 @@
     numEntries = dvmRegisterMapGetNumEntries(pMap);
 
     if (debug) {
-        LOGI("COMPRESS: %s.%s aw=%d rw=%d ne=%d\n",
+        LOGI("COMPRESS: %s.%s aw=%d rw=%d ne=%d",
             meth->clazz->descriptor, meth->name,
             addrWidth, regWidth, numEntries);
         dumpRegisterMap(pMap, -1);
     }
 
     if (numEntries <= 1) {
-        LOGV("Can't compress map with 0 or 1 entries\n");
+        LOGV("Can't compress map with 0 or 1 entries");
         return NULL;
     }
 
@@ -1515,7 +1515,7 @@
         addr |= (*mapData++) << 8;
 
     if (addr >= 128) {
-        LOGV("Can't compress map with starting address >= 128\n");
+        LOGV("Can't compress map with starting address >= 128");
         return NULL;
     }
 
@@ -1549,7 +1549,7 @@
             addr |= (*mapData++) << 8;
 
         if (debug)
-            LOGI(" addr=0x%04x ent=%d (aw=%d)\n", addr, entry, addrWidth);
+            LOGI(" addr=0x%04x ent=%d (aw=%d)", addr, entry, addrWidth);
 
         addrDiff = addr - prevAddr;
         assert(addrDiff > 0);
@@ -1557,12 +1557,12 @@
             /* small difference, encode in 3 bits */
             key = addrDiff -1;          /* set 00000AAA */
             if (debug)
-                LOGI(" : small %d, key=0x%02x\n", addrDiff, key);
+                LOGI(" : small %d, key=0x%02x", addrDiff, key);
         } else {
             /* large difference, output escape code */
             key = 0x07;                 /* escape code for AAA */
             if (debug)
-                LOGI(" : large %d, key=0x%02x\n", addrDiff, key);
+                LOGI(" : large %d, key=0x%02x", addrDiff, key);
         }
 
         int numBitsChanged, firstBitChanged, lebSize;
@@ -1571,26 +1571,26 @@
             &firstBitChanged, &numBitsChanged, NULL);
 
         if (debug) {
-            LOGI(" : diff fbc=%d nbc=%d ls=%d (rw=%d)\n",
+            LOGI(" : diff fbc=%d nbc=%d ls=%d (rw=%d)",
                 firstBitChanged, numBitsChanged, lebSize, regWidth);
         }
 
         if (numBitsChanged == 0) {
             /* set B to 1 and CCCC to zero to indicate no bits were changed */
             key |= 0x08;
-            if (debug) LOGI(" : no bits changed\n");
+            if (debug) LOGI(" : no bits changed");
         } else if (numBitsChanged == 1 && firstBitChanged < 16) {
             /* set B to 0 and CCCC to the index of the changed bit */
             key |= firstBitChanged << 4;
-            if (debug) LOGI(" : 1 low bit changed\n");
+            if (debug) LOGI(" : 1 low bit changed");
         } else if (numBitsChanged < 15 && lebSize < regWidth) {
             /* set B to 1 and CCCC to the number of bits */
             key |= 0x08 | (numBitsChanged << 4);
-            if (debug) LOGI(" : some bits changed\n");
+            if (debug) LOGI(" : some bits changed");
         } else {
             /* set B to 1 and CCCC to 0x0f so we store the entire vector */
             key |= 0x08 | 0xf0;
-            if (debug) LOGI(" : encode original\n");
+            if (debug) LOGI(" : encode original");
         }
 
         /*
@@ -1628,7 +1628,7 @@
          */
         if (tmpPtr - tmpBuf.get() >= origSize) {
             if (debug) {
-                LOGD("Compressed size >= original (%d vs %d): %s.%s\n",
+                LOGD("Compressed size >= original (%d vs %d): %s.%s",
                     tmpPtr - tmpBuf.get(), origSize,
                     meth->clazz->descriptor, meth->name);
             }
@@ -1649,7 +1649,7 @@
     newMapSize = kHeaderSize + unsignedLeb128Size(newDataSize) + newDataSize;
     if (newMapSize >= origSize) {
         if (debug) {
-            LOGD("Final comp size >= original (%d vs %d): %s.%s\n",
+            LOGD("Final comp size >= original (%d vs %d): %s.%s",
                 newMapSize, origSize, meth->clazz->descriptor, meth->name);
         }
         return NULL;
@@ -1668,7 +1668,7 @@
     memcpy(tmpPtr, tmpBuf.get(), newDataSize);
 
     if (REGISTER_MAP_VERBOSE) {
-        LOGD("Compression successful (%d -> %d) from aw=%d rw=%d ne=%d\n",
+        LOGD("Compression successful (%d -> %d) from aw=%d rw=%d ne=%d",
             computeRegisterMapSize(pMap), computeRegisterMapSize(pNewMap),
             addrWidth, regWidth, numEntries);
     }
@@ -1700,7 +1700,7 @@
     int regWidth, numEntries, newAddrWidth, newMapSize;
 
     if (format != kRegMapFormatDifferential) {
-        LOGE("Not differential (%d)\n", format);
+        LOGE("Not differential (%d)", format);
         return NULL;
     }
 
@@ -1725,7 +1725,7 @@
 
     /* now we know enough to allocate the new map */
     if (REGISTER_MAP_VERBOSE) {
-        LOGI("Expanding to map aw=%d rw=%d ne=%d\n",
+        LOGI("Expanding to map aw=%d rw=%d ne=%d",
             newAddrWidth, regWidth, numEntries);
     }
     newMapSize = kHeaderSize + (newAddrWidth + regWidth) * numEntries;
@@ -1811,21 +1811,21 @@
     }
 
     if (dstPtr - (u1*) pNewMap != newMapSize) {
-        LOGE("ERROR: output %d bytes, expected %d\n",
+        LOGE("ERROR: output %d bytes, expected %d",
             dstPtr - (u1*) pNewMap, newMapSize);
         free(pNewMap);
         return NULL;
     }
 
     if (srcPtr - srcStart != expectedSrcLen) {
-        LOGE("ERROR: consumed %d bytes, expected %d\n",
+        LOGE("ERROR: consumed %d bytes, expected %d",
             srcPtr - srcStart, expectedSrcLen);
         free(pNewMap);
         return NULL;
     }
 
     if (REGISTER_MAP_VERBOSE) {
-        LOGD("Expansion successful (%d -> %d)\n",
+        LOGD("Expansion successful (%d -> %d)",
             computeRegisterMapSize(pMap), computeRegisterMapSize(pNewMap));
     }
 
diff --git a/vm/analysis/VerifySubs.cpp b/vm/analysis/VerifySubs.cpp
index 2366f68..1680159 100644
--- a/vm/analysis/VerifySubs.cpp
+++ b/vm/analysis/VerifySubs.cpp
@@ -58,7 +58,7 @@
     LOG_PRI_VA(logLevel, LOG_TAG, format, ap);
     if (meth != NULL) {
         char* desc = dexProtoCopyMethodDescriptor(&meth->prototype);
-        LOG_PRI(logLevel, LOG_TAG, "VFY:  rejected %s.%s %s\n",
+        LOG_PRI(logLevel, LOG_TAG, "VFY:  rejected %s.%s %s",
             meth->clazz->descriptor, meth->name, desc);
         free(desc);
     }
@@ -81,7 +81,7 @@
     char* dotFromClass = dvmHumanReadableDescriptor(meth->clazz->descriptor);
     //char* methodDescr = dexProtoCopyMethodDescriptor(&meth->prototype);
 
-    LOGE("Could not find class '%s', referenced from method %s.%s\n",
+    LOGE("Could not find class '%s', referenced from method %s.%s",
         dotMissingClass, dotFromClass, meth->name/*, methodDescr*/);
 
     free(dotMissingClass);
diff --git a/vm/analysis/VfyBasicBlock.cpp b/vm/analysis/VfyBasicBlock.cpp
index 7a6b672..50ec46b 100644
--- a/vm/analysis/VfyBasicBlock.cpp
+++ b/vm/analysis/VfyBasicBlock.cpp
@@ -228,7 +228,7 @@
 
     if (false) {
         if (dvmPointerSetGetCount(curBlock->predecessors) > 256) {
-            LOGI("Lots of preds at 0x%04x in %s.%s:%s\n", curIdx,
+            LOGI("Lots of preds at 0x%04x in %s.%s:%s", curIdx,
                 meth->clazz->descriptor, meth->name, meth->shorty);
         }
     }
@@ -245,7 +245,7 @@
     unsigned int idx;
     int count;
 
-    LOGI("Basic blocks for %s.%s:%s\n", vdata->method->clazz->descriptor,
+    LOGI("Basic blocks for %s.%s:%s", vdata->method->clazz->descriptor,
         vdata->method->name, vdata->method->shorty);
     for (idx = 0; idx < vdata->insnsSize; idx++) {
         VfyBasicBlock* block = vdata->basicBlocks[idx];
@@ -309,7 +309,7 @@
 
     bool verbose = false; //dvmWantVerboseVerification(meth);
     if (verbose) {
-        LOGI("Basic blocks for %s.%s:%s\n",
+        LOGI("Basic blocks for %s.%s:%s",
             meth->clazz->descriptor, meth->name, meth->shorty);
     }
 
@@ -382,7 +382,7 @@
                 if (numHandlers <= kHandlerStackAllocSize) {
                     handlerList = handlerAddrs;
                 } else {
-                    LOGD("overflow, numHandlers=%d\n", numHandlers);
+                    LOGD("overflow, numHandlers=%d", numHandlers);
                     handlerListAlloc = (u4*) malloc(sizeof(u4) * numHandlers);
                     if (handlerListAlloc == NULL)
                         return false;
@@ -391,7 +391,7 @@
                     handlerList = handlerListAlloc;
                 }
 
-                LOGV("+++ start=%x end=%x numHan=%d\n",
+                LOGV("+++ start=%x end=%x numHan=%d",
                     tryStart, tryEnd, numHandlers);
 
                 tryIndex++;
@@ -473,11 +473,11 @@
             else
                 startEnd = "-";
 
-            LOGI("%04x: %c%c%s #%d\n", idx, tryc, btc, startEnd, debugBBIndex);
+            LOGI("%04x: %c%c%s #%d", idx, tryc, btc, startEnd, debugBBIndex);
 
             if (pTries != NULL && idx == tryStart) {
                 assert(numHandlers > 0);
-                LOGI("  EXC block: [%04x, %04x) %d:(%04x...)\n",
+                LOGI("  EXC block: [%04x, %04x) %d:(%04x...)",
                     tryStart, tryEnd, numHandlers, handlerList[0]);
             }
         }
diff --git a/vm/arch/generic/Call.cpp b/vm/arch/generic/Call.cpp
index ae74415..c23e7c8 100644
--- a/vm/arch/generic/Call.cpp
+++ b/vm/arch/generic/Call.cpp
@@ -41,7 +41,7 @@
     case '[':
     case 'L': return &ffi_type_pointer;
     default:
-        LOGE("bad ffitype 0x%02x\n", sigType);
+        LOGE("bad ffitype 0x%02x", sigType);
         dvmAbort();
         return NULL;
     }
@@ -104,7 +104,7 @@
      * Prep the CIF (Call InterFace object).
      */
     if (ffi_prep_cif(&cif, FFI_DEFAULT_ABI, dstArg, retType, types) != FFI_OK) {
-        LOGE("ffi_prep_cif failed\n");
+        LOGE("ffi_prep_cif failed");
         dvmAbort();
     }
 
diff --git a/vm/compiler/Compiler.cpp b/vm/compiler/Compiler.cpp
index 99533b7..e463ca8 100644
--- a/vm/compiler/Compiler.cpp
+++ b/vm/compiler/Compiler.cpp
@@ -178,7 +178,7 @@
                              MAP_PRIVATE , fd, 0);
     close(fd);
     if (gDvmJit.codeCache == MAP_FAILED) {
-        LOGE("Failed to mmap the JIT code cache: %s\n", strerror(errno));
+        LOGE("Failed to mmap the JIT code cache: %s", strerror(errno));
         return false;
     }
 
@@ -418,7 +418,7 @@
     pJitTable = (JitEntry*)
                 calloc(gDvmJit.jitTableSize, sizeof(*pJitTable));
     if (!pJitTable) {
-        LOGE("jit table allocation failed\n");
+        LOGE("jit table allocation failed");
         dvmUnlockMutex(&gDvmJit.tableLock);
         goto fail;
     }
@@ -432,7 +432,7 @@
      */
     pJitProfTable = (unsigned char *)malloc(JIT_PROF_SIZE);
     if (!pJitProfTable) {
-        LOGE("jit prof table allocation failed\n");
+        LOGE("jit prof table allocation failed");
         dvmUnlockMutex(&gDvmJit.tableLock);
         goto fail;
     }
@@ -447,7 +447,7 @@
     pJitTraceProfCounters = (JitTraceProfCounters*)
                              calloc(1, sizeof(*pJitTraceProfCounters));
     if (!pJitTraceProfCounters) {
-        LOGE("jit trace prof counters allocation failed\n");
+        LOGE("jit trace prof counters allocation failed");
         dvmUnlockMutex(&gDvmJit.tableLock);
         goto fail;
     }
@@ -720,7 +720,7 @@
     dvmChangeStatus(NULL, THREAD_RUNNING);
 
     if (gDvm.verboseShutdown)
-        LOGD("Compiler thread shutting down\n");
+        LOGD("Compiler thread shutting down");
     return NULL;
 }
 
@@ -773,9 +773,9 @@
         dvmUnlockMutex(&gDvmJit.compilerLock);
 
         if (pthread_join(gDvmJit.compilerHandle, &threadReturn) != 0)
-            LOGW("Compiler thread join failed\n");
+            LOGW("Compiler thread join failed");
         else if (gDvm.verboseShutdown)
-            LOGD("Compiler thread has shut down\n");
+            LOGD("Compiler thread has shut down");
     }
 
     /* Break loops within the translation cache */
diff --git a/vm/compiler/Frontend.cpp b/vm/compiler/Frontend.cpp
index 75be703..6b1e139 100644
--- a/vm/compiler/Frontend.cpp
+++ b/vm/compiler/Frontend.cpp
@@ -49,7 +49,7 @@
     dexDecodeInstruction(codePtr, decInsn);
     if (printMe) {
         char *decodedString = dvmCompilerGetDalvikDisassembly(decInsn, NULL);
-        LOGD("%p: %#06x %s\n", codePtr, opcode, decodedString);
+        LOGD("%p: %#06x %s", codePtr, opcode, decodedString);
     }
     return dexGetWidthFromOpcode(opcode);
 }
@@ -1745,7 +1745,7 @@
     curBB = entryCodeBB;
 
     if (cUnit.printMe) {
-        LOGD("--------\nCompiler: Building trace for %s, offset 0x%x\n",
+        LOGD("--------\nCompiler: Building trace for %s, offset 0x%x",
              desc->method->name, curOffset);
     }
 
diff --git a/vm/compiler/Utility.cpp b/vm/compiler/Utility.cpp
index c75e5fe..b69faba 100644
--- a/vm/compiler/Utility.cpp
+++ b/vm/compiler/Utility.cpp
@@ -27,7 +27,7 @@
     arenaHead =
         (ArenaMemBlock *) malloc(sizeof(ArenaMemBlock) + ARENA_DEFAULT_SIZE);
     if (arenaHead == NULL) {
-        LOGE("No memory left to create compiler heap memory\n");
+        LOGE("No memory left to create compiler heap memory");
         return false;
     }
     arenaHead->blockSize = ARENA_DEFAULT_SIZE;
@@ -183,18 +183,18 @@
     while (true) {
         bb = (BasicBlock *) dvmGrowableListIteratorNext(&iterator);
         if (bb == NULL) break;
-        LOGD("Block %d (%s) (insn %04x - %04x%s)\n",
+        LOGD("Block %d (%s) (insn %04x - %04x%s)",
              bb->id,
              blockTypeNames[bb->blockType],
              bb->startOffset,
              bb->lastMIRInsn ? bb->lastMIRInsn->offset : bb->startOffset,
              bb->lastMIRInsn ? "" : " empty");
         if (bb->taken) {
-            LOGD("  Taken branch: block %d (%04x)\n",
+            LOGD("  Taken branch: block %d (%04x)",
                  bb->taken->id, bb->taken->startOffset);
         }
         if (bb->fallThrough) {
-            LOGD("  Fallthrough : block %d (%04x)\n",
+            LOGD("  Fallthrough : block %d (%04x)",
                  bb->fallThrough->id, bb->fallThrough->startOffset);
         }
     }
diff --git a/vm/compiler/codegen/arm/ArchUtility.cpp b/vm/compiler/codegen/arm/ArchUtility.cpp
index f3a2a4b..ecc67db 100644
--- a/vm/compiler/codegen/arm/ArchUtility.cpp
+++ b/vm/compiler/codegen/arm/ArchUtility.cpp
@@ -304,69 +304,69 @@
     /* Handle pseudo-ops individually, and all regular insns as a group */
     switch(lir->opcode) {
         case kArmChainingCellBottom:
-            LOGD("-------- end of chaining cells (0x%04x)\n", offset);
+            LOGD("-------- end of chaining cells (0x%04x)", offset);
             break;
         case kArmPseudoBarrier:
             LOGD("-------- BARRIER");
             break;
         case kArmPseudoExtended:
-            LOGD("-------- %s\n", (char *) dest);
+            LOGD("-------- %s", (char *) dest);
             break;
         case kArmPseudoSSARep:
-            DUMP_SSA_REP(LOGD("-------- %s\n", (char *) dest));
+            DUMP_SSA_REP(LOGD("-------- %s", (char *) dest));
             break;
         case kArmPseudoChainingCellBackwardBranch:
-            LOGD("L%p:\n", lir);
-            LOGD("-------- chaining cell (backward branch): 0x%04x\n", dest);
+            LOGD("L%p:", lir);
+            LOGD("-------- chaining cell (backward branch): 0x%04x", dest);
             break;
         case kArmPseudoChainingCellNormal:
-            LOGD("L%p:\n", lir);
-            LOGD("-------- chaining cell (normal): 0x%04x\n", dest);
+            LOGD("L%p:", lir);
+            LOGD("-------- chaining cell (normal): 0x%04x", dest);
             break;
         case kArmPseudoChainingCellHot:
-            LOGD("L%p:\n", lir);
-            LOGD("-------- chaining cell (hot): 0x%04x\n", dest);
+            LOGD("L%p:", lir);
+            LOGD("-------- chaining cell (hot): 0x%04x", dest);
             break;
         case kArmPseudoChainingCellInvokePredicted:
-            LOGD("L%p:\n", lir);
-            LOGD("-------- chaining cell (predicted): %s%s\n",
+            LOGD("L%p:", lir);
+            LOGD("-------- chaining cell (predicted): %s%s",
                  dest ? ((Method *) dest)->clazz->descriptor : "",
                  dest ? ((Method *) dest)->name : "N/A");
             break;
         case kArmPseudoChainingCellInvokeSingleton:
-            LOGD("L%p:\n", lir);
-            LOGD("-------- chaining cell (invoke singleton): %s%s/%p\n",
+            LOGD("L%p:", lir);
+            LOGD("-------- chaining cell (invoke singleton): %s%s/%p",
                  ((Method *)dest)->clazz->descriptor,
                  ((Method *)dest)->name,
                  ((Method *)dest)->insns);
             break;
         case kArmPseudoEntryBlock:
-            LOGD("-------- entry offset: 0x%04x\n", dest);
+            LOGD("-------- entry offset: 0x%04x", dest);
             break;
         case kArmPseudoDalvikByteCodeBoundary:
-            LOGD("-------- dalvik offset: 0x%04x @ %s\n", dest,
+            LOGD("-------- dalvik offset: 0x%04x @ %s", dest,
                  (char *) lir->operands[1]);
             break;
         case kArmPseudoExitBlock:
-            LOGD("-------- exit offset: 0x%04x\n", dest);
+            LOGD("-------- exit offset: 0x%04x", dest);
             break;
         case kArmPseudoPseudoAlign4:
-            LOGD("%p (%04x): .align4\n", baseAddr + offset, offset);
+            LOGD("%p (%04x): .align4", baseAddr + offset, offset);
             break;
         case kArmPseudoPCReconstructionCell:
-            LOGD("L%p:\n", lir);
-            LOGD("-------- reconstruct dalvik PC : 0x%04x @ +0x%04x\n", dest,
+            LOGD("L%p:", lir);
+            LOGD("-------- reconstruct dalvik PC : 0x%04x @ +0x%04x", dest,
                  lir->operands[1]);
             break;
         case kArmPseudoPCReconstructionBlockLabel:
             /* Do nothing */
             break;
         case kArmPseudoEHBlockLabel:
-            LOGD("Exception_Handling:\n");
+            LOGD("Exception_Handling:");
             break;
         case kArmPseudoTargetLabel:
         case kArmPseudoNormalBlockLabel:
-            LOGD("L%p:\n", lir);
+            LOGD("L%p:", lir);
             break;
         default:
             if (lir->flags.isNop && !dumpNop) {
@@ -376,7 +376,7 @@
                             baseAddr, 256);
             buildInsnString(EncodingMap[lir->opcode].fmt, lir, buf, baseAddr,
                             256);
-            LOGD("%p (%04x): %-8s%s%s\n",
+            LOGD("%p (%04x): %-8s%s%s",
                  baseAddr + offset, offset, opName, buf,
                  lir->flags.isNop ? "(nop)" : "");
             break;
@@ -395,25 +395,25 @@
 /* Dump instructions and constant pool contents */
 void dvmCompilerCodegenDump(CompilationUnit *cUnit)
 {
-    LOGD("Dumping LIR insns\n");
+    LOGD("Dumping LIR insns");
     LIR *lirInsn;
     ArmLIR *armLIR;
 
-    LOGD("installed code is at %p\n", cUnit->baseAddr);
-    LOGD("total size is %d bytes\n", cUnit->totalSize);
+    LOGD("installed code is at %p", cUnit->baseAddr);
+    LOGD("total size is %d bytes", cUnit->totalSize);
     for (lirInsn = cUnit->firstLIRInsn; lirInsn; lirInsn = lirInsn->next) {
         dvmDumpLIRInsn(lirInsn, (unsigned char *) cUnit->baseAddr);
     }
     for (lirInsn = cUnit->classPointerList; lirInsn; lirInsn = lirInsn->next) {
         armLIR = (ArmLIR *) lirInsn;
-        LOGD("%p (%04x): .class (%s)\n",
+        LOGD("%p (%04x): .class (%s)",
              (char*)cUnit->baseAddr + armLIR->generic.offset,
              armLIR->generic.offset,
              ((CallsiteInfo *) armLIR->operands[0])->classDescriptor);
     }
     for (lirInsn = cUnit->literalList; lirInsn; lirInsn = lirInsn->next) {
         armLIR = (ArmLIR *) lirInsn;
-        LOGD("%p (%04x): .word (0x%x)\n",
+        LOGD("%p (%04x): .word (0x%x)",
              (char*)cUnit->baseAddr + armLIR->generic.offset,
              armLIR->generic.offset,
              armLIR->operands[0]);
diff --git a/vm/compiler/codegen/arm/Assemble.cpp b/vm/compiler/codegen/arm/Assemble.cpp
index a433c31..47d2a08 100644
--- a/vm/compiler/codegen/arm/Assemble.cpp
+++ b/vm/compiler/codegen/arm/Assemble.cpp
@@ -958,7 +958,7 @@
             intptr_t target = lirTarget->generic.offset;
             int delta = target - pc;
             if (delta & 0x3) {
-                LOGE("PC-rel distance is not multiples of 4: %d\n", delta);
+                LOGE("PC-rel distance is not multiples of 4: %d", delta);
                 dvmCompilerAbort(cUnit);
             }
             if ((lir->opcode == kThumb2LdrPcRel12) && (delta > 4091)) {
@@ -1035,7 +1035,7 @@
             intptr_t target = targetLIR->generic.offset;
             int delta = target - pc;
             if (delta > 2046 || delta < -2048) {
-                LOGE("Unconditional branch distance out of range: %d\n", delta);
+                LOGE("Unconditional branch distance out of range: %d", delta);
                 dvmCompilerAbort(cUnit);
             }
             lir->operands[0] = delta >> 1;
@@ -1437,7 +1437,7 @@
     /* Allocate enough space for the code block */
     cUnit->codeBuffer = (unsigned char *)dvmCompilerNew(chainCellOffset, true);
     if (cUnit->codeBuffer == NULL) {
-        LOGE("Code buffer allocation failure\n");
+        LOGE("Code buffer allocation failure");
         info->discardResult = true;
         return;
     }
@@ -1604,7 +1604,7 @@
         gDvmJit.translationChains++;
 
         COMPILER_TRACE_CHAINING(
-            LOGD("Jit Runtime: chaining 0x%x to 0x%x\n",
+            LOGD("Jit Runtime: chaining 0x%x to 0x%x",
                  (int) branchAddr, (int) tgtAddr & -2));
 
         /*
diff --git a/vm/compiler/codegen/arm/CodegenDriver.cpp b/vm/compiler/codegen/arm/CodegenDriver.cpp
index b9429a9..af2897f 100644
--- a/vm/compiler/codegen/arm/CodegenDriver.cpp
+++ b/vm/compiler/codegen/arm/CodegenDriver.cpp
@@ -1477,7 +1477,7 @@
 {
     Opcode dalvikOpcode = mir->dalvikInsn.opcode;
     if ((dalvikOpcode >= OP_UNUSED_3E) && (dalvikOpcode <= OP_UNUSED_43)) {
-        LOGE("Codegen: got unused opcode 0x%x\n",dalvikOpcode);
+        LOGE("Codegen: got unused opcode 0x%x",dalvikOpcode);
         return true;
     }
     switch (dalvikOpcode) {
@@ -1491,7 +1491,7 @@
         case OP_UNUSED_79:
         case OP_UNUSED_7A:
         case OP_DISPATCH_FF:
-            LOGE("Codegen: got unused opcode 0x%x\n",dalvikOpcode);
+            LOGE("Codegen: got unused opcode 0x%x",dalvikOpcode);
             return true;
         case OP_NOP:
             break;
@@ -2155,7 +2155,7 @@
             break;
         default:
             cond = (ArmConditionCode)0;
-            LOGE("Unexpected opcode (%d) for Fmt21t\n", dalvikOpcode);
+            LOGE("Unexpected opcode (%d) for Fmt21t", dalvikOpcode);
             dvmCompilerAbort(cUnit);
     }
     genConditionalBranch(cUnit, cond, &labelList[bb->taken->id]);
@@ -2700,7 +2700,7 @@
             break;
         default:
             cond = (ArmConditionCode)0;
-            LOGE("Unexpected opcode (%d) for Fmt22t\n", dalvikOpcode);
+            LOGE("Unexpected opcode (%d) for Fmt22t", dalvikOpcode);
             dvmCompilerAbort(cUnit);
     }
     genConditionalBranch(cUnit, cond, &labelList[bb->taken->id]);
@@ -4547,7 +4547,7 @@
                     }
                 }
                 if (notHandled) {
-                    LOGE("%#06x: Opcode 0x%x (%s) / Fmt %d not handled\n",
+                    LOGE("%#06x: Opcode 0x%x (%s) / Fmt %d not handled",
                          mir->offset,
                          dalvikOpcode, dexGetOpcodeName(dalvikOpcode),
                          dalvikFormat);
diff --git a/vm/compiler/codegen/arm/armv7-a-neon/MethodCodegenDriver.cpp b/vm/compiler/codegen/arm/armv7-a-neon/MethodCodegenDriver.cpp
index 32065ae..7112d10 100644
--- a/vm/compiler/codegen/arm/armv7-a-neon/MethodCodegenDriver.cpp
+++ b/vm/compiler/codegen/arm/armv7-a-neon/MethodCodegenDriver.cpp
@@ -400,7 +400,7 @@
         }
 
         if (notHandled) {
-            LOGE("%#06x: Opcode 0x%x (%s) / Fmt %d not handled\n",
+            LOGE("%#06x: Opcode 0x%x (%s) / Fmt %d not handled",
                  mir->offset,
                  dalvikOpcode, dexGetOpcodeName(dalvikOpcode),
                  dalvikFormat);
diff --git a/vm/hprof/Hprof.cpp b/vm/hprof/Hprof.cpp
index 18439b3..ff8e872 100644
--- a/vm/hprof/Hprof.cpp
+++ b/vm/hprof/Hprof.cpp
@@ -43,7 +43,7 @@
 
     hprof_context_t *ctx = (hprof_context_t *)malloc(sizeof(*ctx));
     if (ctx == NULL) {
-        LOGE("hprof: can't allocate context.\n");
+        LOGE("hprof: can't allocate context.");
         return NULL;
     }
 
@@ -69,14 +69,14 @@
      */
     hprof_context_t *headCtx = (hprof_context_t *)malloc(sizeof(*headCtx));
     if (headCtx == NULL) {
-        LOGE("hprof: can't allocate context.\n");
+        LOGE("hprof: can't allocate context.");
         hprofFreeContext(tailCtx);
         return false;
     }
     hprofContextInit(headCtx, strdup(tailCtx->fileName), tailCtx->fd, true,
         tailCtx->directToDdms);
 
-    LOGI("hprof: dumping heap strings to \"%s\".\n", tailCtx->fileName);
+    LOGI("hprof: dumping heap strings to \"%s\".", tailCtx->fileName);
     hprofDumpStrings(headCtx);
     hprofDumpClasses(headCtx);
 
@@ -115,13 +115,13 @@
         if (headCtx->fd >= 0) {
             outFd = dup(headCtx->fd);
             if (outFd < 0) {
-                LOGE("dup(%d) failed: %s\n", headCtx->fd, strerror(errno));
+                LOGE("dup(%d) failed: %s", headCtx->fd, strerror(errno));
                 /* continue to fail-handler below */
             }
         } else {
             outFd = open(tailCtx->fileName, O_WRONLY|O_CREAT|O_TRUNC, 0644);
             if (outFd < 0) {
-                LOGE("can't open %s: %s\n", headCtx->fileName, strerror(errno));
+                LOGE("can't open %s: %s", headCtx->fileName, strerror(errno));
                 /* continue to fail-handler below */
             }
         }
@@ -145,7 +145,7 @@
     }
 
     /* throw out a log message for the benefit of "runhat" */
-    LOGI("hprof: heap dump completed (%dKB)\n",
+    LOGI("hprof: heap dump completed (%dKB)",
         (headCtx->fileDataSize + tailCtx->fileDataSize + 1023) / 1024);
 
     hprofFreeContext(headCtx);
diff --git a/vm/hprof/HprofOutput.cpp b/vm/hprof/HprofOutput.cpp
index 0644a88..6393438 100644
--- a/vm/hprof/HprofOutput.cpp
+++ b/vm/hprof/HprofOutput.cpp
@@ -74,7 +74,7 @@
     FILE* fp = open_memstream(&ctx->fileDataPtr, &ctx->fileDataSize);
     if (fp == NULL) {
         /* not expected */
-        LOGE("hprof: open_memstream failed: %s\n", strerror(errno));
+        LOGE("hprof: open_memstream failed: %s", strerror(errno));
         dvmAbort();
     }
 
diff --git a/vm/interp/Interp.cpp b/vm/interp/Interp.cpp
index 7c68e90..32ae3ec 100644
--- a/vm/interp/Interp.cpp
+++ b/vm/interp/Interp.cpp
@@ -243,7 +243,7 @@
             int newSize = pSet->alloc + kBreakpointGrowth;
             Breakpoint* newVec;
 
-            LOGV("+++ increasing breakpoint set size to %d\n", newSize);
+            LOGV("+++ increasing breakpoint set size to %d", newSize);
 
             /* pSet->breakpoints will be NULL on first entry */
             newVec = (Breakpoint*)realloc(pSet->breakpoints, newSize * sizeof(Breakpoint));
@@ -275,10 +275,10 @@
          */
         assert(*(u1*)addr != OP_BREAKPOINT);
         if (dvmIsClassVerified(method->clazz)) {
-            LOGV("Class %s verified, adding breakpoint at %p\n",
+            LOGV("Class %s verified, adding breakpoint at %p",
                 method->clazz->descriptor, addr);
             if (instructionIsMagicNop(addr)) {
-                LOGV("Refusing to set breakpoint on %04x at %s.%s + 0x%x\n",
+                LOGV("Refusing to set breakpoint on %04x at %s.%s + 0x%x",
                     *addr, method->clazz->descriptor, method->name,
                     instrOffset);
             } else {
@@ -287,7 +287,7 @@
                     OP_BREAKPOINT);
             }
         } else {
-            LOGV("Class %s NOT verified, deferring breakpoint at %p\n",
+            LOGV("Class %s NOT verified, deferring breakpoint at %p",
                 method->clazz->descriptor, addr);
         }
     } else {
@@ -317,11 +317,11 @@
     if (idx < 0) {
         /* breakpoint not found in set -- unexpected */
         if (*(u1*)addr == OP_BREAKPOINT) {
-            LOGE("Unable to restore breakpoint opcode (%s.%s +0x%x)\n",
+            LOGE("Unable to restore breakpoint opcode (%s.%s +0x%x)",
                 method->clazz->descriptor, method->name, instrOffset);
             dvmAbort();
         } else {
-            LOGW("Breakpoint was already restored? (%s.%s +0x%x)\n",
+            LOGW("Breakpoint was already restored? (%s.%s +0x%x)",
                 method->clazz->descriptor, method->name, instrOffset);
         }
     } else {
@@ -372,10 +372,10 @@
              * It might already be there or it might not; either way,
              * flush it out.
              */
-            LOGV("Flushing breakpoint at %p for %s\n",
+            LOGV("Flushing breakpoint at %p for %s",
                 pBreak->addr, clazz->descriptor);
             if (instructionIsMagicNop(pBreak->addr)) {
-                LOGV("Refusing to flush breakpoint on %04x at %s.%s + 0x%x\n",
+                LOGV("Refusing to flush breakpoint on %04x at %s.%s + 0x%x",
                     *pBreak->addr, pBreak->method->clazz->descriptor,
                     pBreak->method->name, pBreak->addr - pBreak->method->insns);
             } else {
@@ -396,7 +396,7 @@
     BreakpointSet* pSet = gDvm.breakpointSet;
     dvmBreakpointSetLock(pSet);
     if (dvmBreakpointSetCount(pSet) != 0) {
-        LOGW("WARNING: %d leftover breakpoints\n", dvmBreakpointSetCount(pSet));
+        LOGW("WARNING: %d leftover breakpoints", dvmBreakpointSetCount(pSet));
         /* generally not good, but we can keep going */
     }
     dvmBreakpointSetUnlock(pSet);
@@ -462,7 +462,7 @@
     if (!dvmBreakpointSetOriginalOpcode(pSet, addr, &orig)) {
         orig = *(u1*)addr;
         if (orig == OP_BREAKPOINT) {
-            LOGE("GLITCH: can't find breakpoint, opcode is still set\n");
+            LOGE("GLITCH: can't find breakpoint, opcode is still set");
             dvmAbort();
         }
     }
@@ -505,7 +505,7 @@
     StepControl* pCtrl = &gDvm.stepControl;
 
     if (pCtrl->active && thread != pCtrl->thread) {
-        LOGW("WARNING: single-step active for %p; adding %p\n",
+        LOGW("WARNING: single-step active for %p; adding %p",
             pCtrl->thread, thread);
 
         /*
@@ -552,7 +552,7 @@
         prevFp = fp;
     }
     if (fp == NULL) {
-        LOGW("Unexpected: step req in native-only threadid=%d\n",
+        LOGW("Unexpected: step req in native-only threadid=%d",
             thread->threadId);
         return false;
     }
@@ -562,7 +562,7 @@
          * frames are only inserted when calling from native->interp, so we
          * don't need to worry about one being here.
          */
-        LOGV("##### init step while in native method\n");
+        LOGV("##### init step while in native method");
         fp = prevFp;
         assert(!dvmIsBreakFrame((u4*)fp));
         assert(dvmIsNativeMethod(SAVEAREA_FROM_FP(fp)->method));
@@ -592,7 +592,7 @@
         dvmComputeVagueFrameDepth(thread, thread->interpSave.curFrame);
     pCtrl->active = true;
 
-    LOGV("##### step init: thread=%p meth=%p '%s' line=%d frameDepth=%d depth=%s size=%s\n",
+    LOGV("##### step init: thread=%p meth=%p '%s' line=%d frameDepth=%d depth=%s size=%s",
         pCtrl->thread, pCtrl->method, pCtrl->method->name,
         pCtrl->line, pCtrl->frameDepth,
         dvmJdwpStepDepthStr(pCtrl->depth),
@@ -754,7 +754,7 @@
      * we may or may not actually send a message to the debugger.
      */
     if (GET_OPCODE(*pc) == OP_BREAKPOINT) {
-        LOGV("+++ breakpoint hit at %p\n", pc);
+        LOGV("+++ breakpoint hit at %p", pc);
         eventFlags |= DBG_BREAKPOINT;
     }
 
@@ -829,7 +829,7 @@
         }
 
         if (doStop) {
-            LOGV("#####S %s\n", msg);
+            LOGV("#####S %s", msg);
             eventFlags |= DBG_SINGLE_STEP;
         }
     }
@@ -865,7 +865,7 @@
              * during single-step.
              */
             char* desc = dexProtoCopyMethodDescriptor(&method->prototype);
-            LOGE("HEY: invalid 'this' ptr %p (%s.%s %s)\n", thisPtr,
+            LOGE("HEY: invalid 'this' ptr %p (%s.%s %s)", thisPtr,
                 method->clazz->descriptor, method->name, desc);
             free(desc);
             dvmAbort();
@@ -920,15 +920,15 @@
 
         count = dvmReferenceTableEntries(&self->internalLocalRefTable);
 
-        LOGE("TRACK: unreleased internal reference (prev=%d total=%d)\n",
+        LOGE("TRACK: unreleased internal reference (prev=%d total=%d)",
             debugTrackedRefStart, count);
         desc = dexProtoCopyMethodDescriptor(&method->prototype);
-        LOGE("       current method is %s.%s %s\n", method->clazz->descriptor,
+        LOGE("       current method is %s.%s %s", method->clazz->descriptor,
             method->name, desc);
         free(desc);
         top = self->internalLocalRefTable.table + debugTrackedRefStart;
         while (top < self->internalLocalRefTable.nextEntry) {
-            LOGE("  %p (%s)\n",
+            LOGE("  %p (%s)",
                  *top,
                  ((*top)->clazz != NULL) ? (*top)->clazz->descriptor : "");
             top++;
@@ -937,7 +937,7 @@
 
         dvmAbort();
     }
-    //LOGI("TRACK OK\n");
+    //LOGI("TRACK OK");
 }
 #endif
 
@@ -952,14 +952,14 @@
 
     localCount = method->registersSize - method->insSize;
 
-    LOG(LOG_VERBOSE, LOG_TAG"i", "Registers (fp=%p):\n", framePtr);
+    LOG(LOG_VERBOSE, LOG_TAG"i", "Registers (fp=%p):", framePtr);
     for (i = method->registersSize-1; i >= 0; i--) {
         if (i >= localCount) {
-            LOG(LOG_VERBOSE, LOG_TAG"i", "  v%-2d in%-2d : 0x%08x\n",
+            LOG(LOG_VERBOSE, LOG_TAG"i", "  v%-2d in%-2d : 0x%08x",
                 i, i-localCount, framePtr[i]);
         } else {
             if (inOnly) {
-                LOG(LOG_VERBOSE, LOG_TAG"i", "  [...]\n");
+                LOG(LOG_VERBOSE, LOG_TAG"i", "  [...]");
                 break;
             }
             const char* name = "";
@@ -976,7 +976,7 @@
                 }
             }
 #endif
-            LOG(LOG_VERBOSE, LOG_TAG"i", "  v%-2d      : 0x%08x %s\n",
+            LOG(LOG_VERBOSE, LOG_TAG"i", "  v%-2d      : 0x%08x %s",
                 i, framePtr[i], name);
         }
     }
@@ -1043,7 +1043,7 @@
     firstKey |= (*switchData++) << 16;
 
     if (testVal < firstKey || testVal >= firstKey + size) {
-        LOGVV("Value %d not found in switch (%d-%d)\n",
+        LOGVV("Value %d not found in switch (%d-%d)",
             testVal, firstKey, firstKey+size-1);
         return kInstrLen;
     }
@@ -1055,7 +1055,7 @@
     assert(((u4)entries & 0x3) == 0);
 
     assert(testVal - firstKey >= 0 && testVal - firstKey < size);
-    LOGVV("Value %d found in slot %d (goto 0x%02x)\n",
+    LOGVV("Value %d found in slot %d (goto 0x%02x)",
         testVal, testVal - firstKey,
         s4FromSwitchData(&entries[testVal - firstKey]));
     return s4FromSwitchData(&entries[testVal - firstKey]);
@@ -1120,13 +1120,13 @@
         } else if (testVal > foundVal) {
             lo = mid + 1;
         } else {
-            LOGVV("Value %d found in entry %d (goto 0x%02x)\n",
+            LOGVV("Value %d found in entry %d (goto 0x%02x)",
                 testVal, mid, s4FromSwitchData(&entries[mid]));
             return s4FromSwitchData(&entries[mid]);
         }
     }
 
-    LOGVV("Value %d not found in switch\n", testVal);
+    LOGVV("Value %d not found in switch", testVal);
     return kInstrLen;
 }
 
@@ -1179,7 +1179,7 @@
         }
         break;
     default:
-        LOGE("Unexpected width %d in copySwappedArrayData\n", width);
+        LOGE("Unexpected width %d in copySwappedArrayData", width);
         dvmAbort();
         break;
     }
@@ -1251,7 +1251,7 @@
     if (absMethod == NULL) {
         absMethod = dvmResolveInterfaceMethod(method->clazz, methodIdx);
         if (absMethod == NULL) {
-            LOGV("+ unknown method\n");
+            LOGV("+ unknown method");
             return NULL;
         }
     }
@@ -1298,7 +1298,7 @@
         methodToCall->nativeFunc != NULL);
 #endif
 
-    LOGVV("+++ interface=%s.%s concrete=%s.%s\n",
+    LOGVV("+++ interface=%s.%s concrete=%s.%s",
         absMethod->clazz->descriptor, absMethod->name,
         methodToCall->clazz->descriptor, methodToCall->name);
     assert(methodToCall != NULL);
@@ -1361,7 +1361,7 @@
     const char* fieldName;
 
     if (refType != VERIFY_ERROR_REF_FIELD) {
-        LOGW("Expected ref type %d, got %d\n", VERIFY_ERROR_REF_FIELD, refType);
+        LOGW("Expected ref type %d, got %d", VERIFY_ERROR_REF_FIELD, refType);
         return NULL;    /* no message */
     }
 
@@ -1395,7 +1395,7 @@
     const char* methodName;
 
     if (refType != VERIFY_ERROR_REF_METHOD) {
-        LOGW("Expected ref type %d, got %d\n", VERIFY_ERROR_REF_METHOD,refType);
+        LOGW("Expected ref type %d, got %d", VERIFY_ERROR_REF_METHOD,refType);
         return NULL;    /* no message */
     }
 
@@ -1743,7 +1743,7 @@
             strcmp(method->name, mn) == 0 &&
             strcmp(method->shorty, sg) == 0)
         {
-            LOGW("Reached %s.%s, enabling verbose mode\n",
+            LOGW("Reached %s.%s, enabling verbose mode",
                 method->clazz->descriptor, method->name);
             android_setMinPriority(LOG_TAG"i", ANDROID_LOG_VERBOSE);
             dumpRegs(method, fp, true);
@@ -1964,7 +1964,7 @@
     if (method->clazz->status < CLASS_INITIALIZING ||
         method->clazz->status == CLASS_ERROR)
     {
-        LOGE("ERROR: tried to execute code in unprepared class '%s' (%d)\n",
+        LOGE("ERROR: tried to execute code in unprepared class '%s' (%d)",
             method->clazz->descriptor, method->clazz->status);
         dvmDumpThread(self, false);
         dvmAbort();
diff --git a/vm/interp/Stack.cpp b/vm/interp/Stack.cpp
index c65a78e..9f6c1cf 100644
--- a/vm/interp/Stack.cpp
+++ b/vm/interp/Stack.cpp
@@ -114,7 +114,7 @@
     saveBlock->xtra.currentPc = NULL;           // not required?
     saveBlock->method = method;
 
-    LOGVV("PUSH frame: old=%p new=%p (size=%d)\n",
+    LOGVV("PUSH frame: old=%p new=%p (size=%d)",
         self->interpSave.curFrame, FP_FROM_SAVEAREA(saveBlock),
         (u1*)self->interpSave.curFrame - (u1*)FP_FROM_SAVEAREA(saveBlock));
 
@@ -193,7 +193,7 @@
     saveBlock->xtra.localRefCookie = self->jniLocalRefTable.segmentState.all;
     saveBlock->method = method;
 
-    LOGVV("PUSH JNI frame: old=%p new=%p (size=%d)\n",
+    LOGVV("PUSH JNI frame: old=%p new=%p (size=%d)",
         self->interpSave.curFrame, FP_FROM_SAVEAREA(saveBlock),
         (u1*)self->interpSave.curFrame - (u1*)FP_FROM_SAVEAREA(saveBlock));
 
@@ -253,7 +253,7 @@
     saveBlock->xtra.localRefCookie = self->jniLocalRefTable.segmentState.all;
     saveBlock->method = method;
 
-    LOGVV("PUSH JNI local frame: old=%p new=%p (size=%d)\n",
+    LOGVV("PUSH JNI local frame: old=%p new=%p (size=%d)",
         self->interpSave.curFrame, FP_FROM_SAVEAREA(saveBlock),
         (u1*)self->interpSave.curFrame - (u1*)FP_FROM_SAVEAREA(saveBlock));
 
@@ -284,7 +284,7 @@
         return false;
     }
 
-    LOGVV("POP JNI local frame: removing %s, now %s\n",
+    LOGVV("POP JNI local frame: removing %s, now %s",
         saveBlock->method->name,
         SAVEAREA_FROM_FP(saveBlock->prevFrame)->method->name);
     dvmPopJniLocals(self, saveBlock);
@@ -320,7 +320,7 @@
         /* probably a native->native JNI call */
 
         if (dvmIsNativeMethod(saveBlock->method)) {
-            LOGVV("Popping JNI stack frame for %s.%s%s\n",
+            LOGVV("Popping JNI stack frame for %s.%s%s",
                 saveBlock->method->clazz->descriptor,
                 saveBlock->method->name,
                 (SAVEAREA_FROM_FP(saveBlock->prevFrame)->method == NULL) ?
@@ -331,12 +331,12 @@
         saveBlock = SAVEAREA_FROM_FP(saveBlock->prevFrame);
     }
     if (saveBlock->method != NULL) {
-        LOGE("PopFrame missed the break\n");
+        LOGE("PopFrame missed the break");
         assert(false);
         dvmAbort();     // stack trashed -- nowhere to go in this thread
     }
 
-    LOGVV("POP frame: cur=%p new=%p\n",
+    LOGVV("POP frame: cur=%p new=%p",
         self->interpSave.curFrame, saveBlock->prevFrame);
 
     self->interpSave.curFrame = saveBlock->prevFrame;
@@ -355,7 +355,7 @@
 
 #ifndef NDEBUG
     if (self->status != THREAD_RUNNING) {
-        LOGW("threadid=%d: status=%d on call to %s.%s -\n",
+        LOGW("threadid=%d: status=%d on call to %s.%s -",
             self->threadId, self->status,
             method->clazz->descriptor, method->name);
     }
@@ -371,7 +371,7 @@
 
     IF_LOGVV() {
         char* desc = dexProtoCopyMethodDescriptor(&method->prototype);
-        LOGVV("thread=%d native code calling %s.%s %s\n", self->threadId,
+        LOGVV("thread=%d native code calling %s.%s %s", self->threadId,
             clazz->descriptor, method->name, desc);
         free(desc);
     }
@@ -451,7 +451,7 @@
     ins = ((u4*)self->interpSave.curFrame) +
            (method->registersSize - method->insSize);
 
-    //LOGD("  FP is %p, INs live at >= %p\n", self->interpSave.curFrame, ins);
+    //LOGD("  FP is %p, INs live at >= %p", self->interpSave.curFrame, ins);
 
     /* put "this" pointer into in0 if appropriate */
     if (!dvmIsStaticMethod(method)) {
@@ -501,7 +501,7 @@
 
 #ifndef NDEBUG
     if (verifyCount != method->insSize) {
-        LOGE("Got vfycount=%d insSize=%d for %s.%s\n", verifyCount,
+        LOGE("Got vfycount=%d insSize=%d for %s.%s", verifyCount,
             method->insSize, clazz->descriptor, method->name);
         assert(false);
         goto bail;
@@ -597,7 +597,7 @@
             *ins++ = args->z;           /* 8 bits, zero or non-zero */
             break;
         default:
-            LOGE("Invalid char %c in short signature of %s.%s\n",
+            LOGE("Invalid char %c in short signature of %s.%s",
                 *(desc-1), clazz->descriptor, method->name);
             assert(false);
             goto bail;
@@ -609,7 +609,7 @@
 
 #ifndef NDEBUG
     if (verifyCount != method->insSize) {
-        LOGE("Got vfycount=%d insSize=%d for %s.%s\n", verifyCount,
+        LOGE("Got vfycount=%d insSize=%d for %s.%s", verifyCount,
             method->insSize, clazz->descriptor, method->name);
         assert(false);
         goto bail;
@@ -692,7 +692,7 @@
         (method->registersSize - method->insSize);
     verifyCount = 0;
 
-    //LOGD("  FP is %p, INs live at >= %p\n", self->interpSave.curFrame, ins);
+    //LOGD("  FP is %p, INs live at >= %p", self->interpSave.curFrame, ins);
 
     /* put "this" pointer into in0 if appropriate */
     if (!dvmIsStaticMethod(method)) {
@@ -722,7 +722,7 @@
 
 #ifndef NDEBUG
     if (verifyCount != method->insSize) {
-        LOGE("Got vfycount=%d insSize=%d for %s.%s\n", verifyCount,
+        LOGE("Got vfycount=%d insSize=%d for %s.%s", verifyCount,
             method->insSize, clazz->descriptor, method->name);
         assert(false);
         goto bail;
@@ -1012,22 +1012,22 @@
         /*
          * Already did, nothing to do but bail.
          */
-        LOGE("DalvikVM: double-overflow of stack in threadid=%d; aborting\n",
+        LOGE("DalvikVM: double-overflow of stack in threadid=%d; aborting",
             self->threadId);
         dvmDumpThread(self, false);
         dvmAbort();
     }
 
     /* open it up to the full range */
-    LOGI("threadid=%d: stack overflow on call to %s.%s:%s\n",
+    LOGI("threadid=%d: stack overflow on call to %s.%s:%s",
         self->threadId,
         method->clazz->descriptor, method->name, method->shorty);
     StackSaveArea* saveArea = SAVEAREA_FROM_FP(self->interpSave.curFrame);
-    LOGI("  method requires %d+%d+%d=%d bytes, fp is %p (%d left)\n",
+    LOGI("  method requires %d+%d+%d=%d bytes, fp is %p (%d left)",
         method->registersSize * 4, sizeof(StackSaveArea), method->outsSize * 4,
         (method->registersSize + method->outsSize) * 4 + sizeof(StackSaveArea),
         saveArea, (u1*) saveArea - self->interpStackEnd);
-    LOGI("  expanding stack end (%p to %p)\n", self->interpStackEnd,
+    LOGI("  expanding stack end (%p to %p)", self->interpStackEnd,
         self->interpStackStart - self->interpStackSize);
     //dvmDumpThread(self, false);
     self->interpStackEnd = self->interpStackStart - self->interpStackSize;
@@ -1041,7 +1041,7 @@
      */
     Object* excep = dvmGetException(self);
     if (excep != NULL) {
-        LOGW("Stack overflow while throwing exception\n");
+        LOGW("Stack overflow while throwing exception");
         dvmClearException(self);
     }
     dvmThrowChainedException(gDvm.exStackOverflowError, NULL, excep);
@@ -1065,7 +1065,7 @@
     newStackEnd = (self->interpStackStart - self->interpStackSize)
         + STACK_OVERFLOW_RESERVE;
     if ((u1*)self->interpSave.curFrame <= newStackEnd) {
-        LOGE("Can't shrink stack: curFrame is in reserved area (%p %p)\n",
+        LOGE("Can't shrink stack: curFrame is in reserved area (%p %p)",
             self->interpStackEnd, self->interpSave.curFrame);
         dvmDumpThread(self, false);
         dvmAbort();
@@ -1074,7 +1074,7 @@
     self->interpStackEnd = newStackEnd;
     self->stackOverflowed = false;
 
-    LOGI("Shrank stack (to %p, curFrame is %p)\n", self->interpStackEnd,
+    LOGI("Shrank stack (to %p, curFrame is %p)", self->interpStackEnd,
         self->interpSave.curFrame);
 }
 
@@ -1105,7 +1105,7 @@
 
     /* check Method* */
     if (!dvmLinearAllocContains(method, sizeof(Method))) {
-        LOGD("ExtrMon: method %p not valid\n", method);
+        LOGD("ExtrMon: method %p not valid", method);
         return false;
     }
 
@@ -1114,14 +1114,14 @@
     if (currentPc < method->insns ||
         currentPc >= method->insns + insnsSize)
     {
-        LOGD("ExtrMon: insns %p not valid (%p - %p)\n",
+        LOGD("ExtrMon: insns %p not valid (%p - %p)",
             currentPc, method->insns, method->insns + insnsSize);
         return false;
     }
 
     /* check the instruction */
     if ((*currentPc & 0xff) != OP_MONITOR_ENTER) {
-        LOGD("ExtrMon: insn at %p is not monitor-enter (0x%02x)\n",
+        LOGD("ExtrMon: insn at %p is not monitor-enter (0x%02x)",
             currentPc, *currentPc & 0xff);
         return false;
     }
@@ -1129,7 +1129,7 @@
     /* get and check the register index */
     unsigned int reg = *currentPc >> 8;
     if (reg >= method->registersSize) {
-        LOGD("ExtrMon: invalid register %d (max %d)\n",
+        LOGD("ExtrMon: invalid register %d (max %d)",
             reg, method->registersSize);
         return false;
     }
@@ -1138,7 +1138,7 @@
     u4* fp = (u4*) framePtr;
     Object* obj = (Object*) fp[reg];
     if (!dvmIsValidObject(obj)) {
-        LOGD("ExtrMon: invalid object %p at %p[%d]\n", obj, fp, reg);
+        LOGD("ExtrMon: invalid object %p at %p[%d]", obj, fp, reg);
         return false;
     }
     *pLockObj = obj;
@@ -1288,7 +1288,7 @@
         first = false;
 
         if (saveArea->prevFrame != NULL && saveArea->prevFrame <= framePtr) {
-            LOGW("Warning: loop in stack trace at frame %d (%p -> %p)\n",
+            LOGW("Warning: loop in stack trace at frame %d (%p -> %p)",
                 checkCount, framePtr, saveArea->prevFrame);
             break;
         }
@@ -1358,7 +1358,7 @@
     /*
      * Run through the stack and rewrite the "prev" pointers.
      */
-    //LOGI("DR: fpOff=%d (from %p %p)\n",fpOffset, origStack,
+    //LOGI("DR: fpOff=%d (from %p %p)",fpOffset, origStack,
     //     thread->interpSave.curFrame);
     fp = stackCopy + fpOffset;
     while (true) {
diff --git a/vm/jdwp/ExpandBuf.cpp b/vm/jdwp/ExpandBuf.cpp
index 8162128..b8ff933 100644
--- a/vm/jdwp/ExpandBuf.cpp
+++ b/vm/jdwp/ExpandBuf.cpp
@@ -95,7 +95,7 @@
 
     newPtr = (u1*) realloc(pBuf->storage, pBuf->maxLen);
     if (newPtr == NULL) {
-        LOGE("realloc(%d) failed\n", pBuf->maxLen);
+        LOGE("realloc(%d) failed", pBuf->maxLen);
         abort();
     }
 
diff --git a/vm/jdwp/JdwpAdb.cpp b/vm/jdwp/JdwpAdb.cpp
index 4614069..84abe3a 100644
--- a/vm/jdwp/JdwpAdb.cpp
+++ b/vm/jdwp/JdwpAdb.cpp
@@ -122,7 +122,7 @@
 {
     JdwpNetState*  netState;
 
-    LOGV("ADB transport startup\n");
+    LOGV("ADB transport startup");
 
     state->netState = netState = adbStateAlloc();
     if (netState == NULL)
@@ -172,10 +172,10 @@
 
     if (ret <= 0) {
         if (ret < 0) {
-            LOGW("receiving file descriptor from ADB failed (socket %d): %s\n",
+            LOGW("receiving file descriptor from ADB failed (socket %d): %s",
                  netState->controlSock, strerror(errno));
         } else {
-            LOGD("adbd disconnected\n");
+            LOGD("adbd disconnected");
         }
         close(netState->controlSock);
         netState->controlSock = -1;
@@ -210,7 +210,7 @@
 
         netState->controlSock = socket(PF_UNIX, SOCK_STREAM, 0);
         if (netState->controlSock < 0) {
-            LOGE("Could not create ADB control socket:%s\n",
+            LOGE("Could not create ADB control socket:%s",
                  strerror(errno));
             return false;
         }
@@ -254,15 +254,15 @@
                 } while (ret < 0 && errno == EINTR);
 
                 if (ret >= 0) {
-                    LOGV("PID sent as '%.*s' to ADB\n", 4, buff);
+                    LOGV("PID sent as '%.*s' to ADB", 4, buff);
                     break;
                 }
 
-                LOGE("Weird, can't send JDWP process pid to ADB: %s\n",
+                LOGE("Weird, can't send JDWP process pid to ADB: %s",
                      strerror(errno));
                 return false;
             }
-            LOGV("Can't connect to ADB control socket:%s\n",
+            LOGV("Can't connect to ADB control socket:%s",
                  strerror(errno));
 
             usleep( sleep_ms*1000 );
@@ -273,7 +273,7 @@
         }
     }
 
-    LOGV("trying to receive file descriptor from ADB\n");
+    LOGV("trying to receive file descriptor from ADB");
     /* now we can receive a client file descriptor */
     netState->clientSock = receiveClientFd(netState);
     if (netState->shuttingDown)
@@ -281,12 +281,12 @@
 
     if (netState->clientSock < 0) {
         if (++retryCount > 5) {
-            LOGE("adb connection max retries exceeded\n");
+            LOGE("adb connection max retries exceeded");
             return false;
         }
         goto retry;
     } else {
-        LOGV("received file descriptor %d from ADB\n", netState->clientSock);
+        LOGV("received file descriptor %d from ADB", netState->clientSock);
         netState->awaitingHandshake = 1;
         netState->inputCount = 0;
         return true;
@@ -315,7 +315,7 @@
     if (netState->clientSock < 0)
         return;
 
-    LOGV("+++ closed JDWP <-> ADB connection\n");
+    LOGV("+++ closed JDWP <-> ADB connection");
 
     close(netState->clientSock);
     netState->clientSock = -1;
@@ -350,7 +350,7 @@
     }
 
     if (netState->wakeFds[1] >= 0) {
-        LOGV("+++ writing to wakePipe\n");
+        LOGV("+++ writing to wakePipe");
         write(netState->wakeFds[1], "", 1);
     }
 }
@@ -476,20 +476,20 @@
             cc = write(netState->clientSock, expandBufGetBuffer(pReply),
                     expandBufGetLength(pReply));
             if (cc != (int) expandBufGetLength(pReply)) {
-                LOGE("Failed sending reply to debugger: %s\n", strerror(errno));
+                LOGE("Failed sending reply to debugger: %s", strerror(errno));
                 expandBufFree(pReply);
                 return false;
             }
         } else {
-            LOGW("No reply created for set=%d cmd=%d\n", cmdSet, cmd);
+            LOGW("No reply created for set=%d cmd=%d", cmdSet, cmd);
         }
         expandBufFree(pReply);
     } else {
-        LOGV("reply?!\n");
+        LOGV("reply?!");
         assert(false);
     }
 
-    LOGV("----------\n");
+    LOGV("----------");
 
     consumeBytes(netState, length);
     return true;
@@ -547,11 +547,11 @@
                 if (maxfd < fd)
                     maxfd = fd;
             } else {
-                LOGI("NOTE: entering select w/o wakepipe\n");
+                LOGI("NOTE: entering select w/o wakepipe");
             }
 
             if (maxfd < 0) {
-                LOGV("+++ all fds are closed\n");
+                LOGV("+++ all fds are closed");
                 return false;
             }
 
@@ -571,14 +571,14 @@
             if (selCount < 0) {
                 if (errno == EINTR)
                     continue;
-                LOGE("select failed: %s\n", strerror(errno));
+                LOGE("select failed: %s", strerror(errno));
                 goto fail;
             }
 
             if (netState->wakeFds[0] >= 0 &&
                 FD_ISSET(netState->wakeFds[0], &readfds))
             {
-                LOGD("Got wake-up signal, bailing out of select\n");
+                LOGD("Got wake-up signal, bailing out of select");
                 goto fail;
             }
             if (netState->controlSock >= 0 &&
@@ -586,7 +586,7 @@
             {
                 int  sock = receiveClientFd(netState);
                 if (sock >= 0) {
-                    LOGI("Ignoring second debugger -- accepting and dropping\n");
+                    LOGI("Ignoring second debugger -- accepting and dropping");
                     close(sock);
                 } else {
                     assert(netState->controlSock < 0);
@@ -607,11 +607,11 @@
                     /* read failed */
                     if (errno != EINTR)
                         goto fail;
-                    LOGD("+++ EINTR hit\n");
+                    LOGD("+++ EINTR hit");
                     return true;
                 } else if (readCount == 0) {
                     /* EOF hit -- far end went away */
-                    LOGV("+++ peer disconnected\n");
+                    LOGV("+++ peer disconnected");
                     goto fail;
                 } else
                     break;
@@ -637,7 +637,7 @@
         if (memcmp(netState->inputBuffer,
                 kMagicHandshake, kMagicHandshakeLen) != 0)
         {
-            LOGE("ERROR: bad handshake '%.14s'\n", netState->inputBuffer);
+            LOGE("ERROR: bad handshake '%.14s'", netState->inputBuffer);
             goto fail;
         }
 
@@ -645,14 +645,14 @@
         cc = write(netState->clientSock, netState->inputBuffer,
                 kMagicHandshakeLen);
         if (cc != kMagicHandshakeLen) {
-            LOGE("Failed writing handshake bytes: %s (%d of %d)\n",
+            LOGE("Failed writing handshake bytes: %s (%d of %d)",
                 strerror(errno), cc, (int) kMagicHandshakeLen);
             goto fail;
         }
 
         consumeBytes(netState, kMagicHandshakeLen);
         netState->awaitingHandshake = false;
-        LOGV("+++ handshake complete\n");
+        LOGV("+++ handshake complete");
         return true;
     }
 
@@ -681,7 +681,7 @@
 
     if (netState->clientSock < 0) {
         /* can happen with some DDMS events */
-        LOGV("NOT sending request -- no debugger is attached\n");
+        LOGV("NOT sending request -- no debugger is attached");
         return false;
     }
 
@@ -694,7 +694,7 @@
     cc = write(netState->clientSock, expandBufGetBuffer(pReq),
             expandBufGetLength(pReq));
     if (cc != (int) expandBufGetLength(pReq)) {
-        LOGE("Failed sending req to debugger: %s (%d of %d)\n",
+        LOGE("Failed sending req to debugger: %s (%d of %d)",
             strerror(errno), cc, (int) expandBufGetLength(pReq));
         return false;
     }
@@ -717,7 +717,7 @@
 
     if (netState->clientSock < 0) {
         /* can happen with some DDMS events */
-        LOGV("NOT sending request -- no debugger is attached\n");
+        LOGV("NOT sending request -- no debugger is attached");
         return false;
     }
 
@@ -734,7 +734,7 @@
     ssize_t actual;
     actual = writev(netState->clientSock, iov, iovcnt);
     if ((size_t)actual != expected) {
-        LOGE("Failed sending b-req to debugger: %s (%d of %zu)\n",
+        LOGE("Failed sending b-req to debugger: %s (%d of %zu)",
             strerror(errno), (int) actual, expected);
         return false;
     }
diff --git a/vm/jdwp/JdwpEvent.cpp b/vm/jdwp/JdwpEvent.cpp
index 15f0b2a..f11777b 100644
--- a/vm/jdwp/JdwpEvent.cpp
+++ b/vm/jdwp/JdwpEvent.cpp
@@ -161,9 +161,9 @@
  */
 static void dumpEvent(const JdwpEvent* pEvent)
 {
-    LOGI("Event id=0x%4x %p (prev=%p next=%p):\n",
+    LOGI("Event id=0x%4x %p (prev=%p next=%p):",
         pEvent->requestId, pEvent, pEvent->prev, pEvent->next);
-    LOGI("  kind=%s susp=%s modCount=%d\n",
+    LOGI("  kind=%s susp=%s modCount=%d",
         dvmJdwpEventKindStr(pEvent->eventKind),
         dvmJdwpSuspendPolicyStr(pEvent->suspendPolicy),
         pEvent->modCount);
@@ -171,7 +171,7 @@
     for (int i = 0; i < pEvent->modCount; i++) {
         const JdwpEventMod* pMod = &pEvent->mods[i];
         JdwpModKind kind = static_cast<JdwpModKind>(pMod->modKind);
-        LOGI("  %s\n", dvmJdwpModKindStr(kind));
+        LOGI("  %s", dvmJdwpModKindStr(kind));
         /* TODO - show details */
     }
 }
@@ -293,7 +293,7 @@
         pEvent = pEvent->next;
     }
 
-    //LOGD("Odd: no match when removing event reqId=0x%04x\n", requestId);
+    //LOGD("Odd: no match when removing event reqId=0x%04x", requestId);
 
 done:
     unlockEventMutex(state);
@@ -396,7 +396,7 @@
             if (pEvent->mods[i].modKind == MK_COUNT &&
                 pEvent->mods[i].count.count == 0)
             {
-                LOGV("##### Removing expired event\n");
+                LOGV("##### Removing expired event");
                 unregisterEvent(state, pEvent);
                 dvmJdwpEventFree(pEvent);
                 break;
@@ -423,7 +423,7 @@
         int targetLen = strlen(target);
         patLen--;
         // TODO: remove printf when we find a test case to verify this
-        LOGE(">>> comparing '%s' to '%s'\n",
+        LOGE(">>> comparing '%s' to '%s'",
             pattern+1, target + (targetLen-patLen));
 
         if (targetLen < patLen)
@@ -517,7 +517,7 @@
                 return false;
             break;
         default:
-            LOGE("unhandled mod kind %d\n", pMod->modKind);
+            LOGE("unhandled mod kind %d", pMod->modKind);
             assert(false);
             break;
         }
@@ -591,7 +591,7 @@
 
     /* this is rare but possible -- see CLASS_PREPARE handling */
     if (dvmDbgGetThreadSelfId() == state->debugThreadId) {
-        LOGI("NOTE: suspendByPolicy not suspending JDWP thread\n");
+        LOGI("NOTE: suspendByPolicy not suspending JDWP thread");
         return;
     }
 
@@ -606,7 +606,7 @@
          * resume.  See if it has left anything in our DebugInvokeReq mailbox.
          */
         if (!pReq->invokeNeeded) {
-            /*LOGD("suspendByPolicy: no invoke needed\n");*/
+            /*LOGD("suspendByPolicy: no invoke needed");*/
             break;
         }
 
@@ -614,7 +614,7 @@
         dvmJdwpSetWaitForEventThread(state, dvmDbgGetThreadSelfId());
 
         /* leave pReq->invokeNeeded raised so we can check reentrancy */
-        LOGV("invoking method...\n");
+        LOGV("invoking method...");
         dvmDbgExecuteMethod(pReq);
 
         pReq->err = ERR_NONE;
@@ -622,7 +622,7 @@
         /* clear this before signaling */
         pReq->invokeNeeded = false;
 
-        LOGV("invoke complete, signaling and self-suspending\n");
+        LOGV("invoke complete, signaling and self-suspending");
         dvmDbgLockMutex(&pReq->lock);
         dvmDbgCondSignal(&pReq->cv);
         dvmDbgUnlockMutex(&pReq->lock);
@@ -664,14 +664,14 @@
      * go to sleep indefinitely.
      */
     while (state->eventThreadId != 0) {
-        LOGV("event in progress (0x%llx), 0x%llx sleeping\n",
+        LOGV("event in progress (0x%llx), 0x%llx sleeping",
             state->eventThreadId, threadId);
         waited = true;
         dvmDbgCondWait(&state->eventThreadCond, &state->eventThreadLock);
     }
 
     if (waited || threadId != 0)
-        LOGV("event token grabbed (0x%llx)\n", threadId);
+        LOGV("event token grabbed (0x%llx)", threadId);
     if (threadId != 0)
         state->eventThreadId = threadId;
 
@@ -691,7 +691,7 @@
     dvmDbgLockMutex(&state->eventThreadLock);
 
     assert(state->eventThreadId != 0);
-    LOGV("cleared event token (0x%llx)\n", state->eventThreadId);
+    LOGV("cleared event token (0x%llx)", state->eventThreadId);
 
     state->eventThreadId = 0;
 
@@ -757,8 +757,8 @@
 
     ExpandBuf* pReq = NULL;
     if (true) {
-        LOGV("EVENT: %s\n", dvmJdwpEventKindStr(EK_VM_START));
-        LOGV("  suspendPolicy=%s\n", dvmJdwpSuspendPolicyStr(suspendPolicy));
+        LOGV("EVENT: %s", dvmJdwpEventKindStr(EK_VM_START));
+        LOGV("  suspendPolicy=%s", dvmJdwpSuspendPolicyStr(suspendPolicy));
 
         pReq = eventPrep();
         expandBufAdd1(pReq, suspendPolicy);
@@ -829,7 +829,7 @@
      * this is mostly paranoia.)
      */
     if (basket.threadId == state->debugThreadId) {
-        LOGV("Ignoring location event in JDWP thread\n");
+        LOGV("Ignoring location event in JDWP thread");
         free(nameAlloc);
         return false;
     }
@@ -844,7 +844,7 @@
      * method invocation to complete.
      */
     if (invokeInProgress(state)) {
-        LOGV("Not checking breakpoints during invoke (%s)\n", basket.className);
+        LOGV("Not checking breakpoints during invoke (%s)", basket.className);
         free(nameAlloc);
         return false;
     }
@@ -870,14 +870,14 @@
 
     ExpandBuf* pReq = NULL;
     if (matchCount != 0) {
-        LOGV("EVENT: %s(%d total) %s.%s thread=%llx code=%llx)\n",
+        LOGV("EVENT: %s(%d total) %s.%s thread=%llx code=%llx)",
             dvmJdwpEventKindStr(matchList[0]->eventKind), matchCount,
             basket.className,
             dvmDbgGetMethodName(pLoc->classId, pLoc->methodId),
             basket.threadId, pLoc->idx);
 
         suspendPolicy = scanSuspendPolicy(matchList, matchCount);
-        LOGV("  suspendPolicy=%s\n",
+        LOGV("  suspendPolicy=%s",
             dvmJdwpSuspendPolicyStr(suspendPolicy));
 
         pReq = eventPrep();
@@ -927,7 +927,7 @@
      * I don't think this can happen.
      */
     if (invokeInProgress(state)) {
-        LOGW("Not posting thread change during invoke\n");
+        LOGW("Not posting thread change during invoke");
         return false;
     }
 
@@ -950,12 +950,12 @@
 
     ExpandBuf* pReq = NULL;
     if (matchCount != 0) {
-        LOGV("EVENT: %s(%d total) thread=%llx)\n",
+        LOGV("EVENT: %s(%d total) thread=%llx)",
             dvmJdwpEventKindStr(matchList[0]->eventKind), matchCount,
             basket.threadId);
 
         suspendPolicy = scanSuspendPolicy(matchList, matchCount);
-        LOGV("  suspendPolicy=%s\n",
+        LOGV("  suspendPolicy=%s",
             dvmJdwpSuspendPolicyStr(suspendPolicy));
 
         pReq = eventPrep();
@@ -995,7 +995,7 @@
  */
 bool dvmJdwpPostVMDeath(JdwpState* state)
 {
-    LOGV("EVENT: %s\n", dvmJdwpEventKindStr(EK_VM_DEATH));
+    LOGV("EVENT: %s", dvmJdwpEventKindStr(EK_VM_DEATH));
 
     ExpandBuf* pReq = eventPrep();
     expandBufAdd1(pReq, SP_NONE);
@@ -1039,7 +1039,7 @@
 
     /* don't try to post an exception caused by the debugger */
     if (invokeInProgress(state)) {
-        LOGV("Not posting exception hit during invoke (%s)\n",basket.className);
+        LOGV("Not posting exception hit during invoke (%s)",basket.className);
         free(nameAlloc);
         return false;
     }
@@ -1054,24 +1054,24 @@
 
     ExpandBuf* pReq = NULL;
     if (matchCount != 0) {
-        LOGV("EVENT: %s(%d total) thread=%llx exceptId=%llx caught=%d)\n",
+        LOGV("EVENT: %s(%d total) thread=%llx exceptId=%llx caught=%d)",
             dvmJdwpEventKindStr(matchList[0]->eventKind), matchCount,
             basket.threadId, exceptionId, basket.caught);
-        LOGV("  throw: %d %llx %x %lld (%s.%s)\n", pThrowLoc->typeTag,
+        LOGV("  throw: %d %llx %x %lld (%s.%s)", pThrowLoc->typeTag,
             pThrowLoc->classId, pThrowLoc->methodId, pThrowLoc->idx,
             dvmDbgGetClassDescriptor(pThrowLoc->classId),
             dvmDbgGetMethodName(pThrowLoc->classId, pThrowLoc->methodId));
         if (pCatchLoc->classId == 0) {
-            LOGV("  catch: (not caught)\n");
+            LOGV("  catch: (not caught)");
         } else {
-            LOGV("  catch: %d %llx %x %lld (%s.%s)\n", pCatchLoc->typeTag,
+            LOGV("  catch: %d %llx %x %lld (%s.%s)", pCatchLoc->typeTag,
                 pCatchLoc->classId, pCatchLoc->methodId, pCatchLoc->idx,
                 dvmDbgGetClassDescriptor(pCatchLoc->classId),
                 dvmDbgGetMethodName(pCatchLoc->classId, pCatchLoc->methodId));
         }
 
         suspendPolicy = scanSuspendPolicy(matchList, matchCount);
-        LOGV("  suspendPolicy=%s\n",
+        LOGV("  suspendPolicy=%s",
             dvmJdwpSuspendPolicyStr(suspendPolicy));
 
         pReq = eventPrep();
@@ -1133,7 +1133,7 @@
 
     /* suppress class prep caused by debugger */
     if (invokeInProgress(state)) {
-        LOGV("Not posting class prep caused by invoke (%s)\n",basket.className);
+        LOGV("Not posting class prep caused by invoke (%s)",basket.className);
         free(nameAlloc);
         return false;
     }
@@ -1149,12 +1149,12 @@
 
     ExpandBuf* pReq = NULL;
     if (matchCount != 0) {
-        LOGV("EVENT: %s(%d total) thread=%llx)\n",
+        LOGV("EVENT: %s(%d total) thread=%llx)",
             dvmJdwpEventKindStr(matchList[0]->eventKind), matchCount,
             basket.threadId);
 
         suspendPolicy = scanSuspendPolicy(matchList, matchCount);
-        LOGV("  suspendPolicy=%s\n",
+        LOGV("  suspendPolicy=%s",
             dvmJdwpSuspendPolicyStr(suspendPolicy));
 
         if (basket.threadId == state->debugThreadId) {
@@ -1163,7 +1163,7 @@
              * should set threadId to null and if any threads were supposed
              * to be suspended then we suspend all other threads.
              */
-            LOGV("  NOTE: class prepare in debugger thread!\n");
+            LOGV("  NOTE: class prepare in debugger thread!");
             basket.threadId = 0;
             if (suspendPolicy == SP_EVENT_THREAD)
                 suspendPolicy = SP_ALL;
diff --git a/vm/jdwp/JdwpHandler.cpp b/vm/jdwp/JdwpHandler.cpp
index 930d25e..4c12e25 100644
--- a/vm/jdwp/JdwpHandler.cpp
+++ b/vm/jdwp/JdwpHandler.cpp
@@ -108,12 +108,12 @@
 
     u4 numArgs = read4BE(&buf);
 
-    LOGV("    --> threadId=%llx objectId=%llx\n", threadId, objectId);
-    LOGV("        classId=%llx methodId=%x %s.%s\n",
+    LOGV("    --> threadId=%llx objectId=%llx", threadId, objectId);
+    LOGV("        classId=%llx methodId=%x %s.%s",
         classId, methodId,
         dvmDbgGetClassDescriptor(classId),
         dvmDbgGetMethodName(classId, methodId));
-    LOGV("        %d args:\n", numArgs);
+    LOGV("        %d args:", numArgs);
 
     u8* argArray = NULL;
     if (numArgs > 0)
@@ -124,12 +124,12 @@
         int width = dvmDbgGetTagWidth(typeTag);
         u8 value = jdwpReadValue(&buf, width);
 
-        LOGV("          '%c'(%d): 0x%llx\n", typeTag, width, value);
+        LOGV("          '%c'(%d): 0x%llx", typeTag, width, value);
         argArray[i] = value;
     }
 
     u4 options = read4BE(&buf);  /* enum InvokeOptions bit flags */
-    LOGV("        options=0x%04x%s%s\n", options,
+    LOGV("        options=0x%04x%s%s", options,
         (options & INVOKE_SINGLE_THREADED) ? " (SINGLE_THREADED)" : "",
         (options & INVOKE_NONVIRTUAL) ? " (NONVIRTUAL)" : "");
 
@@ -157,17 +157,17 @@
         expandBufAdd1(pReply, JT_OBJECT);
         expandBufAddObjectId(pReply, exceptObjId);
 
-        LOGV("  --> returned '%c' 0x%llx (except=%08llx)\n",
+        LOGV("  --> returned '%c' 0x%llx (except=%08llx)",
             resultTag, resultValue, exceptObjId);
 
         /* show detailed debug output */
         if (resultTag == JT_STRING && exceptObjId == 0) {
             if (resultValue != 0) {
                 char* str = dvmDbgStringToUtf8(resultValue);
-                LOGV("      string '%s'\n", str);
+                LOGV("      string '%s'", str);
                 free(str);
             } else {
-                LOGV("      string (null)\n");
+                LOGV("      string (null)");
             }
         }
     }
@@ -211,7 +211,7 @@
 {
     size_t strLen;
     char* classDescriptor = readNewUtf8String(&buf, &strLen);
-    LOGV("  Req for class by signature '%s'\n", classDescriptor);
+    LOGV("  Req for class by signature '%s'", classDescriptor);
 
     /*
      * TODO: if a class with the same name has been loaded multiple times
@@ -223,7 +223,7 @@
     RefTypeId refTypeId;
     if (!dvmDbgFindLoadedClassBySignature(classDescriptor, &refTypeId)) {
         /* not currently loaded */
-        LOGV("    --> no match!\n");
+        LOGV("    --> no match!");
         numClasses = 0;
     } else {
         /* just the one */
@@ -355,7 +355,7 @@
 {
     u4 exitCode = get4BE(buf);
 
-    LOGW("Debugger is telling the VM to exit with code=%d\n", exitCode);
+    LOGW("Debugger is telling the VM to exit with code=%d", exitCode);
 
     dvmDbgExit(exitCode);
     return ERR_NOT_IMPLEMENTED;     // shouldn't get here
@@ -373,7 +373,7 @@
     size_t strLen;
     char* str = readNewUtf8String(&buf, &strLen);
 
-    LOGV("  Req to create string '%s'\n", str);
+    LOGV("  Req to create string '%s'", str);
 
     ObjectId stringId = dvmDbgCreateString(str);
     if (stringId == 0)
@@ -515,7 +515,7 @@
 {
     RefTypeId refTypeId = dvmReadRefTypeId(&buf);
 
-    LOGV("  Req for signature of refTypeId=0x%llx\n", refTypeId);
+    LOGV("  Req for signature of refTypeId=0x%llx", refTypeId);
     const char* signature = dvmDbgGetSignature(refTypeId);
     expandBufAddUtf8String(pReply, (const u1*) signature);
 
@@ -545,7 +545,7 @@
     RefTypeId refTypeId = dvmReadRefTypeId(&buf);
     u4 numFields = read4BE(&buf);
 
-    LOGV("  RT_GetValues %u:\n", numFields);
+    LOGV("  RT_GetValues %u:", numFields);
 
     expandBufAdd4BE(pReply, numFields);
     for (u4 i = 0; i < numFields; i++) {
@@ -597,7 +597,7 @@
 {
     RefTypeId refTypeId = dvmReadRefTypeId(&buf);
 
-    LOGV("  Req for interfaces in %llx (%s)\n", refTypeId,
+    LOGV("  Req for interfaces in %llx (%s)", refTypeId,
         dvmDbgGetClassDescriptor(refTypeId));
 
     dvmDbgOutputAllInterfaces(refTypeId, pReply);
@@ -614,7 +614,7 @@
     RefTypeId refTypeId = dvmReadRefTypeId(&buf);
     ObjectId classObjId = dvmDbgGetClassObject(refTypeId);
 
-    LOGV("  RefTypeId %llx -> ObjectId %llx\n", refTypeId, classObjId);
+    LOGV("  RefTypeId %llx -> ObjectId %llx", refTypeId, classObjId);
 
     expandBufAddObjectId(pReply, classObjId);
 
@@ -643,12 +643,12 @@
 
     RefTypeId refTypeId = dvmReadRefTypeId(&buf);
 
-    LOGV("  Req for signature of refTypeId=0x%llx\n", refTypeId);
+    LOGV("  Req for signature of refTypeId=0x%llx", refTypeId);
     const char* signature = dvmDbgGetSignature(refTypeId);
     if (signature != NULL) {
         expandBufAddUtf8String(pReply, (const u1*) signature);
     } else {
-        LOGW("No signature for refTypeId=0x%llx\n", refTypeId);
+        LOGW("No signature for refTypeId=0x%llx", refTypeId);
         expandBufAddUtf8String(pReply, (const u1*) "Lunknown;");
     }
     expandBufAddUtf8String(pReply, genericSignature);
@@ -678,8 +678,8 @@
     const u1* buf, int dataLen, ExpandBuf* pReply)
 {
     RefTypeId refTypeId = dvmReadRefTypeId(&buf);
-    LOGV("  Req for fields in refTypeId=0x%llx\n", refTypeId);
-    LOGV("  --> '%s'\n", dvmDbgGetSignature(refTypeId));
+    LOGV("  Req for fields in refTypeId=0x%llx", refTypeId);
+    LOGV("  --> '%s'", dvmDbgGetSignature(refTypeId));
 
     dvmDbgOutputAllFields(refTypeId, true, pReply);
 
@@ -695,8 +695,8 @@
 {
     RefTypeId refTypeId = dvmReadRefTypeId(&buf);
 
-    LOGV("  Req for methods in refTypeId=0x%llx\n", refTypeId);
-    LOGV("  --> '%s'\n", dvmDbgGetSignature(refTypeId));
+    LOGV("  Req for methods in refTypeId=0x%llx", refTypeId);
+    LOGV("  --> '%s'", dvmDbgGetSignature(refTypeId));
 
     dvmDbgOutputAllMethods(refTypeId, true, pReply);
 
@@ -727,7 +727,7 @@
     RefTypeId classId = dvmReadRefTypeId(&buf);
     u4 values = read4BE(&buf);
 
-    LOGV("  Req to set %d values in classId=%llx\n", values, classId);
+    LOGV("  Req to set %d values in classId=%llx", values, classId);
 
     for (u4 i = 0; i < values; i++) {
         FieldId fieldId = dvmReadFieldId(&buf);
@@ -735,7 +735,7 @@
         int width = dvmDbgGetTagWidth(fieldTag);
         u8 value = jdwpReadValue(&buf, width);
 
-        LOGV("    --> field=%x tag=%c -> %lld\n", fieldId, fieldTag, value);
+        LOGV("    --> field=%x tag=%c -> %lld", fieldId, fieldTag, value);
         dvmDbgSetStaticFieldValue(classId, fieldId, value, width);
     }
 
@@ -773,7 +773,7 @@
     ObjectId threadId = dvmReadObjectId(&buf);
     MethodId methodId = dvmReadMethodId(&buf);
 
-    LOGV("Creating instance of %s\n", dvmDbgGetClassDescriptor(classId));
+    LOGV("Creating instance of %s", dvmDbgGetClassDescriptor(classId));
     ObjectId objectId = dvmDbgCreateObject(classId);
     if (objectId == 0)
         return ERR_OUT_OF_MEMORY;
@@ -791,7 +791,7 @@
     RefTypeId arrayTypeId = dvmReadRefTypeId(&buf);
     u4 length = read4BE(&buf);
 
-    LOGV("Creating array %s[%u]\n",
+    LOGV("Creating array %s[%u]",
         dvmDbgGetClassDescriptor(arrayTypeId), length);
     ObjectId objectId = dvmDbgCreateArrayObject(arrayTypeId, length);
     if (objectId == 0)
@@ -811,7 +811,7 @@
     RefTypeId refTypeId = dvmReadRefTypeId(&buf);
     MethodId methodId = dvmReadMethodId(&buf);
 
-    LOGV("  Req for line table in %s.%s\n",
+    LOGV("  Req for line table in %s.%s",
         dvmDbgGetClassDescriptor(refTypeId),
         dvmDbgGetMethodName(refTypeId,methodId));
 
@@ -829,7 +829,7 @@
     RefTypeId classId = dvmReadRefTypeId(&buf);
     MethodId methodId = dvmReadMethodId(&buf);
 
-    LOGV("  Req for LocalVarTab in class=%s method=%s\n",
+    LOGV("  Req for LocalVarTab in class=%s method=%s",
         dvmDbgGetClassDescriptor(classId),
         dvmDbgGetMethodName(classId, methodId));
 
@@ -855,7 +855,7 @@
     const u1* buf, int dataLen, ExpandBuf* pReply)
 {
     ObjectId objectId = dvmReadObjectId(&buf);
-    LOGV("  Req for type of objectId=0x%llx\n", objectId);
+    LOGV("  Req for type of objectId=0x%llx", objectId);
 
     u1 refTypeTag;
     RefTypeId typeId;
@@ -876,7 +876,7 @@
     ObjectId objectId = dvmReadObjectId(&buf);
     u4 numFields = read4BE(&buf);
 
-    LOGV("  Req for %d fields from objectId=0x%llx\n", numFields, objectId);
+    LOGV("  Req for %d fields from objectId=0x%llx", numFields, objectId);
 
     expandBufAdd4BE(pReply, numFields);
 
@@ -897,7 +897,7 @@
     ObjectId objectId = dvmReadObjectId(&buf);
     u4 numFields = read4BE(&buf);
 
-    LOGV("  Req to set %d fields in objectId=0x%llx\n", numFields, objectId);
+    LOGV("  Req to set %d fields in objectId=0x%llx", numFields, objectId);
 
     for (u4 i = 0; i < numFields; i++) {
         FieldId fieldId = dvmReadFieldId(&buf);
@@ -906,7 +906,7 @@
         int width = dvmDbgGetTagWidth(fieldTag);
         u8 value = jdwpReadValue(&buf, width);
 
-        LOGV("    --> fieldId=%x tag='%c'(%d) value=%lld\n",
+        LOGV("    --> fieldId=%x tag='%c'(%d) value=%lld",
             fieldId, fieldTag, width, value);
 
         dvmDbgSetFieldValue(objectId, fieldId, value, width);
@@ -967,7 +967,7 @@
     ObjectId objectId;
 
     objectId = dvmReadObjectId(&buf);
-    LOGV("  Req IsCollected(0x%llx)\n", objectId);
+    LOGV("  Req IsCollected(0x%llx)", objectId);
 
     // TODO: currently returning false; must integrate with GC
     expandBufAdd1(pReply, 0);
@@ -984,7 +984,7 @@
     ObjectId stringObject = dvmReadObjectId(&buf);
     char* str = dvmDbgStringToUtf8(stringObject);
 
-    LOGV("  Req for str %llx --> '%s'\n", stringObject, str);
+    LOGV("  Req for str %llx --> '%s'", stringObject, str);
 
     expandBufAddUtf8String(pReply, (u1*) str);
     free(str);
@@ -1000,7 +1000,7 @@
 {
     ObjectId threadId = dvmReadObjectId(&buf);
 
-    LOGV("  Req for name of thread 0x%llx\n", threadId);
+    LOGV("  Req for name of thread 0x%llx", threadId);
     char* name = dvmDbgGetThreadName(threadId);
     if (name == NULL)
         return ERR_INVALID_THREAD;
@@ -1023,10 +1023,10 @@
     ObjectId threadId = dvmReadObjectId(&buf);
 
     if (threadId == dvmDbgGetThreadSelfId()) {
-        LOGI("  Warning: ignoring request to suspend self\n");
+        LOGI("  Warning: ignoring request to suspend self");
         return ERR_THREAD_NOT_SUSPENDED;
     }
-    LOGV("  Req to suspend thread 0x%llx\n", threadId);
+    LOGV("  Req to suspend thread 0x%llx", threadId);
 
     dvmDbgSuspendThread(threadId);
 
@@ -1042,10 +1042,10 @@
     ObjectId threadId = dvmReadObjectId(&buf);
 
     if (threadId == dvmDbgGetThreadSelfId()) {
-        LOGI("  Warning: ignoring request to resume self\n");
+        LOGI("  Warning: ignoring request to resume self");
         return ERR_NONE;
     }
-    LOGV("  Req to resume thread 0x%llx\n", threadId);
+    LOGV("  Req to resume thread 0x%llx", threadId);
 
     dvmDbgResumeThread(threadId);
 
@@ -1060,14 +1060,14 @@
 {
     ObjectId threadId = dvmReadObjectId(&buf);
 
-    LOGV("  Req for status of thread 0x%llx\n", threadId);
+    LOGV("  Req for status of thread 0x%llx", threadId);
 
     u4 threadStatus;
     u4 suspendStatus;
     if (!dvmDbgGetThreadStatus(threadId, &threadStatus, &suspendStatus))
         return ERR_INVALID_THREAD;
 
-    LOGV("    --> %s, %s\n", dvmJdwpThreadStatusStr(threadStatus),
+    LOGV("    --> %s, %s", dvmJdwpThreadStatusStr(threadStatus),
         dvmJdwpSuspendStatusStr(suspendStatus));
 
     expandBufAdd4BE(pReply, threadStatus);
@@ -1107,14 +1107,14 @@
     if (!dvmDbgThreadExists(threadId))
         return ERR_INVALID_THREAD;
     if (!dvmDbgIsSuspended(threadId)) {
-        LOGV("  Rejecting req for frames in running thread '%s' (%llx)\n",
+        LOGV("  Rejecting req for frames in running thread '%s' (%llx)",
             dvmDbgGetThreadName(threadId), threadId);
         return ERR_THREAD_NOT_SUSPENDED;
     }
 
     int frameCount = dvmDbgGetThreadFrameCount(threadId);
 
-    LOGV("  Request for frames: threadId=%llx start=%d length=%d [count=%d]\n",
+    LOGV("  Request for frames: threadId=%llx start=%d length=%d [count=%d]",
         threadId, startFrame, length, frameCount);
     if (frameCount <= 0)
         return ERR_THREAD_NOT_SUSPENDED;    /* == 0 means 100% native */
@@ -1135,7 +1135,7 @@
         expandBufAdd8BE(pReply, frameId);
         dvmJdwpAddLocation(pReply, &loc);
 
-        LOGVV("    Frame %d: id=%llx loc={type=%d cls=%llx mth=%x loc=%llx}\n",
+        LOGVV("    Frame %d: id=%llx loc={type=%d cls=%llx mth=%x loc=%llx}",
             i, frameId, loc.typeTag, loc.classId, loc.methodId, loc.idx);
     }
 
@@ -1153,7 +1153,7 @@
     if (!dvmDbgThreadExists(threadId))
         return ERR_INVALID_THREAD;
     if (!dvmDbgIsSuspended(threadId)) {
-        LOGV("  Rejecting req for frames in running thread '%s' (%llx)\n",
+        LOGV("  Rejecting req for frames in running thread '%s' (%llx)",
             dvmDbgGetThreadName(threadId), threadId);
         return ERR_THREAD_NOT_SUSPENDED;
     }
@@ -1208,14 +1208,14 @@
     const u1* buf, int dataLen, ExpandBuf* pReply)
 {
     ObjectId threadGroupId = dvmReadObjectId(&buf);
-    LOGV("  Req for name of threadGroupId=0x%llx\n", threadGroupId);
+    LOGV("  Req for name of threadGroupId=0x%llx", threadGroupId);
 
     char* name = dvmDbgGetThreadGroupName(threadGroupId);
     if (name != NULL)
         expandBufAddUtf8String(pReply, (u1*) name);
     else {
         expandBufAddUtf8String(pReply, (u1*) "BAD-GROUP-ID");
-        LOGW("bad thread group ID\n");
+        LOGW("bad thread group ID");
     }
 
     free(name);
@@ -1246,7 +1246,7 @@
     const u1* buf, int dataLen, ExpandBuf* pReply)
 {
     ObjectId threadGroupId = dvmReadObjectId(&buf);
-    LOGV("  Req for threads in threadGroupId=0x%llx\n", threadGroupId);
+    LOGV("  Req for threads in threadGroupId=0x%llx", threadGroupId);
 
     ObjectId* pThreadIds;
     u4 threadCount;
@@ -1280,11 +1280,11 @@
     const u1* buf, int dataLen, ExpandBuf* pReply)
 {
     ObjectId arrayId = dvmReadObjectId(&buf);
-    LOGV("  Req for length of array 0x%llx\n", arrayId);
+    LOGV("  Req for length of array 0x%llx", arrayId);
 
     u4 arrayLength = dvmDbgGetArrayLength(arrayId);
 
-    LOGV("    --> %d\n", arrayLength);
+    LOGV("    --> %d", arrayLength);
 
     expandBufAdd4BE(pReply, arrayLength);
 
@@ -1302,7 +1302,7 @@
     u4 length = read4BE(&buf);
 
     u1 tag = dvmDbgGetArrayElementTag(arrayId);
-    LOGV("  Req for array values 0x%llx first=%d len=%d (elem tag=%c)\n",
+    LOGV("  Req for array values 0x%llx first=%d len=%d (elem tag=%c)",
         arrayId, firstIndex, length, tag);
 
     expandBufAdd1(pReply, tag);
@@ -1324,7 +1324,7 @@
     u4 firstIndex = read4BE(&buf);
     u4 values = read4BE(&buf);
 
-    LOGV("  Req to set array values 0x%llx first=%d count=%d\n",
+    LOGV("  Req to set array values 0x%llx first=%d count=%d",
         arrayId, firstIndex, values);
 
     if (!dvmDbgSetArrayElements(arrayId, firstIndex, values, buf))
@@ -1376,7 +1376,7 @@
     u1 suspendPolicy = read1(&buf);
     u4 modifierCount = read4BE(&buf);
 
-    LOGVV("  Set(kind=%s(%u) suspend=%s(%u) mods=%u)\n",
+    LOGVV("  Set(kind=%s(%u) suspend=%s(%u) mods=%u)",
         dvmJdwpEventKindStr(eventKind), eventKind,
         dvmJdwpSuspendPolicyStr(suspendPolicy), suspendPolicy,
         modifierCount);
@@ -1401,7 +1401,7 @@
         case MK_COUNT:          /* report once, when "--count" reaches 0 */
             {
                 u4 count = read4BE(&buf);
-                LOGVV("    Count: %u\n", count);
+                LOGVV("    Count: %u", count);
                 if (count == 0)
                     return ERR_INVALID_COUNT;
                 pEvent->mods[idx].count.count = count;
@@ -1410,21 +1410,21 @@
         case MK_CONDITIONAL:    /* conditional on expression) */
             {
                 u4 exprId = read4BE(&buf);
-                LOGVV("    Conditional: %d\n", exprId);
+                LOGVV("    Conditional: %d", exprId);
                 pEvent->mods[idx].conditional.exprId = exprId;
             }
             break;
         case MK_THREAD_ONLY:    /* only report events in specified thread */
             {
                 ObjectId threadId = dvmReadObjectId(&buf);
-                LOGVV("    ThreadOnly: %llx\n", threadId);
+                LOGVV("    ThreadOnly: %llx", threadId);
                 pEvent->mods[idx].threadOnly.threadId = threadId;
             }
             break;
         case MK_CLASS_ONLY:     /* for ClassPrepare, MethodEntry */
             {
                 RefTypeId clazzId = dvmReadRefTypeId(&buf);
-                LOGVV("    ClassOnly: %llx (%s)\n",
+                LOGVV("    ClassOnly: %llx (%s)",
                     clazzId, dvmDbgGetClassDescriptor(clazzId));
                 pEvent->mods[idx].classOnly.refTypeId = clazzId;
             }
@@ -1435,7 +1435,7 @@
                 size_t strLen;
 
                 pattern = readNewUtf8String(&buf, &strLen);
-                LOGVV("    ClassMatch: '%s'\n", pattern);
+                LOGVV("    ClassMatch: '%s'", pattern);
                 /* pattern is "java.foo.*", we want "java/foo/ *" */
                 pEvent->mods[idx].classMatch.classPattern =
                     dvmDotToSlash(pattern);
@@ -1448,7 +1448,7 @@
                 size_t strLen;
 
                 pattern = readNewUtf8String(&buf, &strLen);
-                LOGVV("    ClassExclude: '%s'\n", pattern);
+                LOGVV("    ClassExclude: '%s'", pattern);
                 pEvent->mods[idx].classExclude.classPattern =
                     dvmDotToSlash(pattern);
                 free(pattern);
@@ -1459,7 +1459,7 @@
                 JdwpLocation loc;
 
                 jdwpReadLocation(&buf, &loc);
-                LOGVV("    LocationOnly: typeTag=%d classId=%llx methodId=%x idx=%llx\n",
+                LOGVV("    LocationOnly: typeTag=%d classId=%llx methodId=%x idx=%llx",
                     loc.typeTag, loc.classId, loc.methodId, loc.idx);
                 pEvent->mods[idx].locationOnly.loc = loc;
             }
@@ -1472,7 +1472,7 @@
                 exceptionOrNull = dvmReadRefTypeId(&buf);
                 caught = read1(&buf);
                 uncaught = read1(&buf);
-                LOGVV("    ExceptionOnly: type=%llx(%s) caught=%d uncaught=%d\n",
+                LOGVV("    ExceptionOnly: type=%llx(%s) caught=%d uncaught=%d",
                     exceptionOrNull, (exceptionOrNull == 0) ? "null"
                         : dvmDbgGetClassDescriptor(exceptionOrNull),
                     caught, uncaught);
@@ -1486,7 +1486,7 @@
             {
                 RefTypeId declaring = dvmReadRefTypeId(&buf);
                 FieldId fieldId = dvmReadFieldId(&buf);
-                LOGVV("    FieldOnly: %llx %x\n", declaring, fieldId);
+                LOGVV("    FieldOnly: %llx %x", declaring, fieldId);
                 pEvent->mods[idx].fieldOnly.refTypeId = declaring;
                 pEvent->mods[idx].fieldOnly.fieldId = fieldId;
             }
@@ -1499,7 +1499,7 @@
                 threadId = dvmReadObjectId(&buf);
                 size = read4BE(&buf);
                 depth = read4BE(&buf);
-                LOGVV("    Step: thread=%llx size=%s depth=%s\n",
+                LOGVV("    Step: thread=%llx size=%s depth=%s",
                     threadId, dvmJdwpStepSizeStr(size),
                     dvmJdwpStepDepthStr(depth));
 
@@ -1511,12 +1511,12 @@
         case MK_INSTANCE_ONLY:  /* report events related to a specific obj */
             {
                 ObjectId instance = dvmReadObjectId(&buf);
-                LOGVV("    InstanceOnly: %llx\n", instance);
+                LOGVV("    InstanceOnly: %llx", instance);
                 pEvent->mods[idx].instanceOnly.objectId = instance;
             }
             break;
         default:
-            LOGW("GLITCH: unsupported modKind=%d\n", modKind);
+            LOGW("GLITCH: unsupported modKind=%d", modKind);
             break;
         }
     }
@@ -1526,7 +1526,7 @@
      * has sent us bad stuff, but for now we blame ourselves.
      */
     if (buf != origBuf + dataLen) {
-        LOGW("GLITCH: dataLen is %d, we have consumed %d\n", dataLen,
+        LOGW("GLITCH: dataLen is %d, we have consumed %d", dataLen,
             (int) (buf - origBuf));
     }
 
@@ -1538,14 +1538,14 @@
 
     pEvent->requestId = requestId;
 
-    LOGV("    --> event requestId=0x%x\n", requestId);
+    LOGV("    --> event requestId=0x%x", requestId);
 
     /* add it to the list */
     JdwpError err = dvmJdwpRegisterEvent(state, pEvent);
     if (err != ERR_NONE) {
         /* registration failed, probably because event is bogus */
         dvmJdwpEventFree(pEvent);
-        LOGW("WARNING: event request rejected\n");
+        LOGW("WARNING: event request rejected");
     }
     return err;
 }
@@ -1578,7 +1578,7 @@
     FrameId frameId = dvmReadFrameId(&buf);
     u4 slots = read4BE(&buf);
 
-    LOGV("  Req for %d slots in threadId=%llx frameId=%llx\n",
+    LOGV("  Req for %d slots in threadId=%llx frameId=%llx",
         slots, threadId, frameId);
 
     expandBufAdd4BE(pReply, slots);     /* "int values" */
@@ -1586,7 +1586,7 @@
         u4 slot = read4BE(&buf);
         u1 reqSigByte = read1(&buf);
 
-        LOGV("    --> slot %d '%c'\n", slot, reqSigByte);
+        LOGV("    --> slot %d '%c'", slot, reqSigByte);
 
         int width = dvmDbgGetTagWidth(reqSigByte);
         u1* ptr = expandBufAddSpace(pReply, width+1);
@@ -1606,7 +1606,7 @@
     FrameId frameId = dvmReadFrameId(&buf);
     u4 slots = read4BE(&buf);
 
-    LOGV("  Req to set %d slots in threadId=%llx frameId=%llx\n",
+    LOGV("  Req to set %d slots in threadId=%llx frameId=%llx",
         slots, threadId, frameId);
 
     for (u4 i = 0; i < slots; i++) {
@@ -1615,7 +1615,7 @@
         int width = dvmDbgGetTagWidth(sigByte);
         u8 value = jdwpReadValue(&buf, width);
 
-        LOGV("    --> slot %d '%c' %llx\n", slot, sigByte, value);
+        LOGV("    --> slot %d '%c' %llx", slot, sigByte, value);
         dvmDbgSetLocalValue(threadId, frameId, slot, sigByte, value, width);
     }
 
@@ -1636,7 +1636,7 @@
         return ERR_INVALID_FRAMEID;
 
     u1 objectTag = dvmDbgGetObjectTag(objectId);
-    LOGV("  Req for 'this' in thread=%llx frame=%llx --> %llx %s '%c'\n",
+    LOGV("  Req for 'this' in thread=%llx frame=%llx --> %llx %s '%c'",
         threadId, frameId, objectId, dvmDbgGetObjectTypeName(objectId),
         (char)objectTag);
 
@@ -1658,7 +1658,7 @@
 {
     RefTypeId classObjectId = dvmReadRefTypeId(&buf);
 
-    LOGV("  Req for refTypeId for class=%llx (%s)\n",
+    LOGV("  Req for refTypeId for class=%llx (%s)",
         classObjectId, dvmDbgGetClassDescriptor(classObjectId));
 
     /* just hand the type back to them */
@@ -1680,7 +1680,7 @@
     u1* replyBuf = NULL;
     int replyLen = -1;
 
-    LOGV("  Handling DDM packet (%.4s)\n", buf);
+    LOGV("  Handling DDM packet (%.4s)", buf);
 
     /*
      * On first DDM packet, notify all handlers that DDM is running.
@@ -1919,7 +1919,7 @@
         if (gHandlerMap[i].cmdSet == pHeader->cmdSet &&
             gHandlerMap[i].cmd == pHeader->cmd)
         {
-            LOGV("REQ: %s (cmd=%d/%d dataLen=%d id=0x%06x)\n",
+            LOGV("REQ: %s (cmd=%d/%d dataLen=%d id=0x%06x)",
                 gHandlerMap[i].descr, pHeader->cmdSet, pHeader->cmd,
                 dataLen, pHeader->id);
             result = (*gHandlerMap[i].func)(state, buf, dataLen, pReply);
@@ -1927,7 +1927,7 @@
         }
     }
     if (i == NELEM(gHandlerMap)) {
-        LOGE("REQ: UNSUPPORTED (cmd=%d/%d dataLen=%d id=0x%06x)\n",
+        LOGE("REQ: UNSUPPORTED (cmd=%d/%d dataLen=%d id=0x%06x)",
             pHeader->cmdSet, pHeader->cmd, dataLen, pHeader->id);
         if (dataLen > 0)
             dvmPrintHexDumpDbg(buf, dataLen, LOG_TAG);
@@ -1951,7 +1951,7 @@
 
     respLen = expandBufGetLength(pReply) - kJDWPHeaderLen;
     IF_LOG(LOG_VERBOSE, LOG_TAG) {
-        LOGV("reply: dataLen=%d err=%s(%d)%s\n", respLen,
+        LOGV("reply: dataLen=%d err=%s(%d)%s", respLen,
             dvmJdwpErrorStr(result), result,
             result != ERR_NONE ? " **FAILED**" : "");
         if (respLen > 0)
diff --git a/vm/jdwp/JdwpMain.cpp b/vm/jdwp/JdwpMain.cpp
index 4a33913..710a937 100644
--- a/vm/jdwp/JdwpMain.cpp
+++ b/vm/jdwp/JdwpMain.cpp
@@ -62,16 +62,16 @@
 
     switch (pParams->transport) {
     case kJdwpTransportSocket:
-        // LOGD("prepping for JDWP over TCP\n");
+        // LOGD("prepping for JDWP over TCP");
         state->transport = dvmJdwpSocketTransport();
         break;
     case kJdwpTransportAndroidAdb:
-        // LOGD("prepping for JDWP over ADB\n");
+        // LOGD("prepping for JDWP over ADB");
         state->transport = dvmJdwpAndroidAdbTransport();
         /* TODO */
         break;
     default:
-        LOGE("Unknown transport %d\n", pParams->transport);
+        LOGE("Unknown transport %d", pParams->transport);
         assert(false);
         goto fail;
     }
@@ -124,11 +124,11 @@
         dvmChangeStatus(NULL, THREAD_RUNNING);
 
         if (!dvmJdwpIsActive(state)) {
-            LOGE("JDWP connection failed\n");
+            LOGE("JDWP connection failed");
             goto fail;
         }
 
-        LOGI("JDWP connected\n");
+        LOGI("JDWP connected");
 
         /*
          * Ordinarily we would pause briefly to allow the debugger to set
@@ -163,7 +163,7 @@
      * mid-request, though, we could see this.
      */
     if (state->eventThreadId != 0) {
-        LOGW("WARNING: resetting state while event in progress\n");
+        LOGW("WARNING: resetting state while event in progress");
         assert(false);
     }
 }
@@ -186,18 +186,18 @@
          * Close down the network to inspire the thread to halt.
          */
         if (gDvm.verboseShutdown)
-            LOGD("JDWP shutting down net...\n");
+            LOGD("JDWP shutting down net...");
         dvmJdwpNetShutdown(state);
 
         if (state->debugThreadStarted) {
             state->run = false;
             if (pthread_join(state->debugThreadHandle, &threadReturn) != 0) {
-                LOGW("JDWP thread join failed\n");
+                LOGW("JDWP thread join failed");
             }
         }
 
         if (gDvm.verboseShutdown)
-            LOGD("JDWP freeing netstate...\n");
+            LOGD("JDWP freeing netstate...");
         dvmJdwpNetFree(state);
         state->netState = NULL;
     }
@@ -223,7 +223,7 @@
 {
     JdwpState* state = (JdwpState*) arg;
 
-    LOGV("JDWP: thread running\n");
+    LOGV("JDWP: thread running");
 
     /*
      * Finish initializing "state", then notify the creating thread that
@@ -282,7 +282,7 @@
         while (true) {
             // sanity check -- shouldn't happen?
             if (dvmThreadSelf()->status != THREAD_VMWAIT) {
-                LOGE("JDWP thread no longer in VMWAIT (now %d); resetting\n",
+                LOGE("JDWP thread no longer in VMWAIT (now %d); resetting",
                     dvmThreadSelf()->status);
                 dvmDbgThreadWaiting();
             }
@@ -332,7 +332,7 @@
     /* back to running, for thread shutdown */
     dvmDbgThreadRunning();
 
-    LOGV("JDWP: thread exiting\n");
+    LOGV("JDWP: thread exiting");
     return NULL;
 }
 
@@ -394,7 +394,7 @@
 s8 dvmJdwpLastDebuggerActivity(JdwpState* state)
 {
     if (!gDvm.debuggerActive) {
-        LOGD("dvmJdwpLastDebuggerActivity: no active debugger\n");
+        LOGD("dvmJdwpLastDebuggerActivity: no active debugger");
         return -1;
     }
 
@@ -402,7 +402,7 @@
 
     /* initializing or in the middle of something? */
     if (last == 0) {
-        LOGV("+++ last=busy\n");
+        LOGV("+++ last=busy");
         return 0;
     }
 
@@ -410,6 +410,6 @@
     s8 now = dvmJdwpGetNowMsec();
     assert(now > last);
 
-    LOGV("+++ debugger interval=%lld\n", now - last);
+    LOGV("+++ debugger interval=%lld", now - last);
     return now - last;
 }
diff --git a/vm/jdwp/JdwpSocket.cpp b/vm/jdwp/JdwpSocket.cpp
index d318b50..23da1b7 100644
--- a/vm/jdwp/JdwpSocket.cpp
+++ b/vm/jdwp/JdwpSocket.cpp
@@ -89,7 +89,7 @@
             }
         }
         if (state->netState == NULL) {
-            LOGE("JDWP net startup failed (req port=%d)\n", pParams->port);
+            LOGE("JDWP net startup failed (req port=%d)", pParams->port);
             return false;
         }
     } else {
@@ -98,9 +98,9 @@
     }
 
     if (pParams->suspend)
-        LOGI("JDWP will wait for debugger on port %d\n", port);
+        LOGI("JDWP will wait for debugger on port %d", port);
     else
-        LOGD("JDWP will %s on port %d\n",
+        LOGD("JDWP will %s on port %d",
             pParams->server ? "listen" : "connect", port);
 
     return true;
@@ -146,7 +146,7 @@
 
     netState->listenSock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
     if (netState->listenSock < 0) {
-        LOGE("Socket create failed: %s\n", strerror(errno));
+        LOGE("Socket create failed: %s", strerror(errno));
         goto fail;
     }
 
@@ -154,7 +154,7 @@
     if (setsockopt(netState->listenSock, SOL_SOCKET, SO_REUSEADDR, &one,
             sizeof(one)) < 0)
     {
-        LOGE("setsockopt(SO_REUSEADDR) failed: %s\n", strerror(errno));
+        LOGE("setsockopt(SO_REUSEADDR) failed: %s", strerror(errno));
         goto fail;
     }
 
@@ -167,15 +167,15 @@
     inet_aton("127.0.0.1", &addr.addrInet.sin_addr);
 
     if (bind(netState->listenSock, &addr.addrPlain, sizeof(addr)) != 0) {
-        LOGV("attempt to bind to port %u failed: %s\n", port, strerror(errno));
+        LOGV("attempt to bind to port %u failed: %s", port, strerror(errno));
         goto fail;
     }
 
     netState->listenPort = port;
-    LOGVV("+++ bound to port %d\n", netState->listenPort);
+    LOGVV("+++ bound to port %d", netState->listenPort);
 
     if (listen(netState->listenSock, 5) != 0) {
-        LOGE("Listen failed: %s\n", strerror(errno));
+        LOGE("Listen failed: %s", strerror(errno));
         goto fail;
     }
 
@@ -221,7 +221,7 @@
 
     /* if we might be sitting in select, kick us loose */
     if (netState->wakePipe[1] >= 0) {
-        LOGV("+++ writing to wakePipe\n");
+        LOGV("+++ writing to wakePipe");
         (void) write(netState->wakePipe[1], "", 1);
     }
 }
@@ -289,7 +289,7 @@
     if (FD_ISSET(sock, &readfds))   /* make sure it's our fd */
         return true;
 
-    LOGE("WEIRD: odd behavior in select (count=%d)\n", count);
+    LOGE("WEIRD: odd behavior in select (count=%d)", count);
     return false;
 }
 #endif
@@ -355,23 +355,23 @@
             // When we call shutdown() on the socket, accept() returns with
             // EINVAL.  Don't gripe about it.
             if (errno == EINVAL)
-                LOGVV("accept failed: %s\n", strerror(errno));
+                LOGVV("accept failed: %s", strerror(errno));
             else
-                LOGE("accept failed: %s\n", strerror(errno));
+                LOGE("accept failed: %s", strerror(errno));
             return false;
         }
     } while (sock < 0);
 
     netState->remoteAddr = addr.addrInet.sin_addr;
     netState->remotePort = ntohs(addr.addrInet.sin_port);
-    LOGV("+++ accepted connection from %s:%u\n",
+    LOGV("+++ accepted connection from %s:%u",
         inet_ntoa(netState->remoteAddr), netState->remotePort);
 
     netState->clientSock = sock;
     netState->awaitingHandshake = true;
     netState->inputCount = 0;
 
-    LOGV("Setting TCP_NODELAY on accepted socket\n");
+    LOGV("Setting TCP_NODELAY on accepted socket");
     setNoDelay(netState->clientSock);
 
     if (pipe(netState->wakePipe) < 0) {
@@ -410,7 +410,7 @@
     int cc = gethostbyname_r(state->params.host, &he, auxBuf, sizeof(auxBuf),
             &pEntry, &h_errno);
     if (cc != 0) {
-        LOGW("gethostbyname_r('%s') failed: %s\n",
+        LOGW("gethostbyname_r('%s') failed: %s",
             state->params.host, strerror(errno));
         return false;
     }
@@ -419,7 +419,7 @@
     h_errno = 0;
     pEntry = gethostbyname(state->params.host);
     if (pEntry == NULL) {
-        LOGW("gethostbyname('%s') failed: %s\n",
+        LOGW("gethostbyname('%s') failed: %s",
             state->params.host, strerror(h_errno));
         return false;
     }
@@ -431,7 +431,7 @@
 
     addr.addrInet.sin_port = htons(state->params.port);
 
-    LOGI("Connecting out to '%s' %d\n",
+    LOGI("Connecting out to '%s' %d",
         inet_ntoa(addr.addrInet.sin_addr), ntohs(addr.addrInet.sin_port));
 
     /*
@@ -441,7 +441,7 @@
     netState = state->netState;
     netState->clientSock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
     if (netState->clientSock < 0) {
-        LOGE("Unable to create socket: %s\n", strerror(errno));
+        LOGE("Unable to create socket: %s", strerror(errno));
         return false;
     }
 
@@ -449,7 +449,7 @@
      * Try to connect.
      */
     if (connect(netState->clientSock, &addr.addrPlain, sizeof(addr)) != 0) {
-        LOGE("Unable to connect to %s:%d: %s\n",
+        LOGE("Unable to connect to %s:%d: %s",
             inet_ntoa(addr.addrInet.sin_addr), ntohs(addr.addrInet.sin_port),
             strerror(errno));
         close(netState->clientSock);
@@ -457,7 +457,7 @@
         return false;
     }
 
-    LOGI("Connection established to %s (%s:%d)\n",
+    LOGI("Connection established to %s (%s:%d)",
         state->params.host, inet_ntoa(addr.addrInet.sin_addr),
         ntohs(addr.addrInet.sin_port));
     netState->awaitingHandshake = true;
@@ -488,7 +488,7 @@
     if (netState->clientSock < 0)
         return;
 
-    LOGV("+++ closed connection to %s:%u\n",
+    LOGV("+++ closed connection to %s:%u",
         inet_ntoa(netState->remoteAddr), netState->remotePort);
 
     close(netState->clientSock);
@@ -564,7 +564,7 @@
 
     dataLen = length - (buf - packetBuf);
 
-    LOGV("--- %s: dataLen=%u id=0x%08x flags=0x%02x cmd=%d/%d\n",
+    LOGV("--- %s: dataLen=%u id=0x%08x flags=0x%02x cmd=%d/%d",
         reply ? "reply" : "req",
         dataLen, id, flags, cmdSet, cmd);
     if (dataLen > 0)
@@ -624,20 +624,20 @@
             cc = write(netState->clientSock, expandBufGetBuffer(pReply),
                     expandBufGetLength(pReply));
             if (cc != (int) expandBufGetLength(pReply)) {
-                LOGE("Failed sending reply to debugger: %s\n", strerror(errno));
+                LOGE("Failed sending reply to debugger: %s", strerror(errno));
                 expandBufFree(pReply);
                 return false;
             }
         } else {
-            LOGW("No reply created for set=%d cmd=%d\n", cmdSet, cmd);
+            LOGW("No reply created for set=%d cmd=%d", cmdSet, cmd);
         }
         expandBufFree(pReply);
     } else {
-        LOGV("reply?!\n");
+        LOGV("reply?!");
         assert(false);
     }
 
-    LOGV("----------\n");
+    LOGV("----------");
 
     consumeBytes(netState, length);
     return true;
@@ -681,7 +681,7 @@
                 maxfd = netState->wakePipe[0];
 
             if (maxfd < 0) {
-                LOGV("+++ all fds are closed\n");
+                LOGV("+++ all fds are closed");
                 return false;
             }
 
@@ -698,7 +698,7 @@
             if (fd >= 0) {
                 FD_SET(fd, &readfds);
             } else {
-                LOGI("NOTE: entering select w/o wakepipe\n");
+                LOGI("NOTE: entering select w/o wakepipe");
             }
 
             /*
@@ -717,7 +717,7 @@
             if (selCount < 0) {
                 if (errno == EINTR)
                     continue;
-                LOGE("select failed: %s\n", strerror(errno));
+                LOGE("select failed: %s", strerror(errno));
                 goto fail;
             }
 
@@ -725,15 +725,15 @@
                 FD_ISSET(netState->wakePipe[0], &readfds))
             {
                 if (netState->listenSock >= 0)
-                    LOGE("Exit wake set, but not exiting?\n");
+                    LOGE("Exit wake set, but not exiting?");
                 else
-                    LOGD("Got wake-up signal, bailing out of select\n");
+                    LOGD("Got wake-up signal, bailing out of select");
                 goto fail;
             }
             if (netState->listenSock >= 0 &&
                 FD_ISSET(netState->listenSock, &readfds))
             {
-                LOGI("Ignoring second debugger -- accepting and dropping\n");
+                LOGI("Ignoring second debugger -- accepting and dropping");
                 union {
                     struct sockaddr_in   addrInet;
                     struct sockaddr      addrPlain;
@@ -743,7 +743,7 @@
                 tmpSock = accept(netState->listenSock, &addr.addrPlain,
                                 &addrlen);
                 if (tmpSock < 0)
-                    LOGI("Weird -- accept failed\n");
+                    LOGI("Weird -- accept failed");
                 else
                     close(tmpSock);
             }
@@ -757,11 +757,11 @@
                     /* read failed */
                     if (errno != EINTR)
                         goto fail;
-                    LOGD("+++ EINTR hit\n");
+                    LOGD("+++ EINTR hit");
                     return true;
                 } else if (readCount == 0) {
                     /* EOF hit -- far end went away */
-                    LOGD("+++ peer disconnected\n");
+                    LOGD("+++ peer disconnected");
                     goto fail;
                 } else
                     break;
@@ -787,7 +787,7 @@
         if (memcmp(netState->inputBuffer,
                 kMagicHandshake, kMagicHandshakeLen) != 0)
         {
-            LOGE("ERROR: bad handshake '%.14s'\n", netState->inputBuffer);
+            LOGE("ERROR: bad handshake '%.14s'", netState->inputBuffer);
             goto fail;
         }
 
@@ -795,14 +795,14 @@
         cc = write(netState->clientSock, netState->inputBuffer,
                 kMagicHandshakeLen);
         if (cc != kMagicHandshakeLen) {
-            LOGE("Failed writing handshake bytes: %s (%d of %d)\n",
+            LOGE("Failed writing handshake bytes: %s (%d of %d)",
                 strerror(errno), cc, (int) kMagicHandshakeLen);
             goto fail;
         }
 
         consumeBytes(netState, kMagicHandshakeLen);
         netState->awaitingHandshake = false;
-        LOGV("+++ handshake complete\n");
+        LOGV("+++ handshake complete");
         return true;
     }
 
@@ -832,7 +832,7 @@
     /*dumpPacket(expandBufGetBuffer(pReq));*/
     if (netState->clientSock < 0) {
         /* can happen with some DDMS events */
-        LOGV("NOT sending request -- no debugger is attached\n");
+        LOGV("NOT sending request -- no debugger is attached");
         return false;
     }
 
@@ -845,7 +845,7 @@
     cc = write(netState->clientSock, expandBufGetBuffer(pReq),
             expandBufGetLength(pReq));
     if (cc != (int) expandBufGetLength(pReq)) {
-        LOGE("Failed sending req to debugger: %s (%d of %d)\n",
+        LOGE("Failed sending req to debugger: %s (%d of %d)",
             strerror(errno), cc, (int) expandBufGetLength(pReq));
         return false;
     }
@@ -868,7 +868,7 @@
 
     if (netState->clientSock < 0) {
         /* can happen with some DDMS events */
-        LOGV("NOT sending request -- no debugger is attached\n");
+        LOGV("NOT sending request -- no debugger is attached");
         return false;
     }
 
@@ -885,7 +885,7 @@
     ssize_t actual;
     actual = writev(netState->clientSock, iov, iovcnt);
     if ((size_t)actual != expected) {
-        LOGE("Failed sending b-req to debugger: %s (%d of %zu)\n",
+        LOGE("Failed sending b-req to debugger: %s (%d of %zu)",
             strerror(errno), (int) actual, expected);
         return false;
     }
diff --git a/vm/mterp/Mterp.cpp b/vm/mterp/Mterp.cpp
index ab439d5..6220e81 100644
--- a/vm/mterp/Mterp.cpp
+++ b/vm/mterp/Mterp.cpp
@@ -41,7 +41,7 @@
 #include "mterp/common/asm-constants.h"
 
     if (failed) {
-        LOGE("Please correct the values in mterp/common/asm-constants.h\n");
+        LOGE("Please correct the values in mterp/common/asm-constants.h");
         dvmAbort();
     }
 
@@ -56,8 +56,8 @@
     int interpSize = (uintptr_t) dvmAsmInstructionEnd -
                      (uintptr_t) dvmAsmInstructionStart;
     if (interpSize != 0 && interpSize != kNumPackedOpcodes*width) {
-        LOGE("ERROR: unexpected asm interp size %d\n", interpSize);
-        LOGE("(did an instruction handler exceed %d bytes?)\n", width);
+        LOGE("ERROR: unexpected asm interp size %d", interpSize);
+        LOGE("(did an instruction handler exceed %d bytes?)", width);
         dvmAbort();
     }
 #endif
@@ -79,16 +79,16 @@
     IF_LOGVV() {
         char* desc = dexProtoCopyMethodDescriptor(
                          &self->interpSave.method->prototype);
-        LOGVV("mterp threadid=%d : %s.%s %s\n",
+        LOGVV("mterp threadid=%d : %s.%s %s",
             dvmThreadSelf()->threadId,
             self->interpSave.method->clazz->descriptor,
             self->interpSave.method->name,
             desc);
         free(desc);
     }
-    //LOGI("self is %p, pc=%p, fp=%p\n", self, self->interpSave.pc,
+    //LOGI("self is %p, pc=%p, fp=%p", self, self->interpSave.pc,
     //      self->interpSave.curFrame);
-    //LOGI("first instruction is 0x%04x\n", self->interpSave.pc[0]);
+    //LOGI("first instruction is 0x%04x", self->interpSave.pc[0]);
 
     /*
      * Handle any ongoing profiling and prep for debugging
diff --git a/vm/mterp/c/OP_APUT_OBJECT.cpp b/vm/mterp/c/OP_APUT_OBJECT.cpp
index 253df25..a6a8064 100644
--- a/vm/mterp/c/OP_APUT_OBJECT.cpp
+++ b/vm/mterp/c/OP_APUT_OBJECT.cpp
@@ -22,7 +22,7 @@
             if (!checkForNull(obj))
                 GOTO_exceptionThrown();
             if (!dvmCanPutArrayElement(obj->clazz, arrayObj->clazz)) {
-                LOGV("Can't put a '%s'(%p) into array type='%s'(%p)\n",
+                LOGV("Can't put a '%s'(%p) into array type='%s'(%p)",
                     obj->clazz->descriptor, obj,
                     arrayObj->obj.clazz->descriptor, arrayObj);
                 dvmThrowArrayStoreExceptionIncompatibleElement(obj->clazz, arrayObj->clazz);
diff --git a/vm/mterp/c/OP_BREAKPOINT.cpp b/vm/mterp/c/OP_BREAKPOINT.cpp
index fa0711e..47f9d4a 100644
--- a/vm/mterp/c/OP_BREAKPOINT.cpp
+++ b/vm/mterp/c/OP_BREAKPOINT.cpp
@@ -16,7 +16,7 @@
          * the thread resumed.
          */
         u1 originalOpcode = dvmGetOriginalOpcode(pc);
-        LOGV("+++ break 0x%02x (0x%04x -> 0x%04x)\n", originalOpcode, inst,
+        LOGV("+++ break 0x%02x (0x%04x -> 0x%04x)", originalOpcode, inst,
             INST_REPLACE_OP(inst, originalOpcode));
         inst = INST_REPLACE_OP(inst, originalOpcode);
         FINISH_BKPT(originalOpcode);
diff --git a/vm/mterp/c/OP_MONITOR_ENTER.cpp b/vm/mterp/c/OP_MONITOR_ENTER.cpp
index de33483..976aab3 100644
--- a/vm/mterp/c/OP_MONITOR_ENTER.cpp
+++ b/vm/mterp/c/OP_MONITOR_ENTER.cpp
@@ -8,7 +8,7 @@
         obj = (Object*)GET_REGISTER(vsrc1);
         if (!checkForNullExportPC(obj, fp, pc))
             GOTO_exceptionThrown();
-        ILOGV("+ locking %p %s\n", obj, obj->clazz->descriptor);
+        ILOGV("+ locking %p %s", obj, obj->clazz->descriptor);
         EXPORT_PC();    /* need for precise GC */
         dvmLockObject(self, obj);
     }
diff --git a/vm/mterp/c/OP_MONITOR_EXIT.cpp b/vm/mterp/c/OP_MONITOR_EXIT.cpp
index cb8f99b..c26585d 100644
--- a/vm/mterp/c/OP_MONITOR_EXIT.cpp
+++ b/vm/mterp/c/OP_MONITOR_EXIT.cpp
@@ -19,7 +19,7 @@
             ADJUST_PC(1);           /* monitor-exit width is 1 */
             GOTO_exceptionThrown();
         }
-        ILOGV("+ unlocking %p %s\n", obj, obj->clazz->descriptor);
+        ILOGV("+ unlocking %p %s", obj, obj->clazz->descriptor);
         if (!dvmUnlockObject(self, obj)) {
             assert(dvmCheckException(self));
             ADJUST_PC(1);
diff --git a/vm/mterp/c/OP_PACKED_SWITCH.cpp b/vm/mterp/c/OP_PACKED_SWITCH.cpp
index bf8cbf2..3922e46 100644
--- a/vm/mterp/c/OP_PACKED_SWITCH.cpp
+++ b/vm/mterp/c/OP_PACKED_SWITCH.cpp
@@ -21,7 +21,7 @@
         testVal = GET_REGISTER(vsrc1);
 
         offset = dvmInterpHandlePackedSwitch(switchData, testVal);
-        ILOGV("> branch taken (0x%04x)\n", offset);
+        ILOGV("> branch taken (0x%04x)", offset);
         if (offset <= 0)  /* uncommon */
             PERIODIC_CHECKS(offset);
         FINISH(offset);
diff --git a/vm/mterp/c/OP_SPARSE_SWITCH.cpp b/vm/mterp/c/OP_SPARSE_SWITCH.cpp
index a863ef2..f48d06e 100644
--- a/vm/mterp/c/OP_SPARSE_SWITCH.cpp
+++ b/vm/mterp/c/OP_SPARSE_SWITCH.cpp
@@ -21,7 +21,7 @@
         testVal = GET_REGISTER(vsrc1);
 
         offset = dvmInterpHandleSparseSwitch(switchData, testVal);
-        ILOGV("> branch taken (0x%04x)\n", offset);
+        ILOGV("> branch taken (0x%04x)", offset);
         if (offset <= 0)  /* uncommon */
             PERIODIC_CHECKS(offset);
         FINISH(offset);
diff --git a/vm/mterp/c/OP_THROW.cpp b/vm/mterp/c/OP_THROW.cpp
index 0dcaced..6fde0cc 100644
--- a/vm/mterp/c/OP_THROW.cpp
+++ b/vm/mterp/c/OP_THROW.cpp
@@ -14,7 +14,7 @@
         obj = (Object*) GET_REGISTER(vsrc1);
         if (!checkForNull(obj)) {
             /* will throw a null pointer exception */
-            LOGVV("Bad exception\n");
+            LOGVV("Bad exception");
         } else {
             /* use the requested exception */
             dvmSetException(self, obj);
diff --git a/vm/mterp/c/OP_UNUSED_F1FF.cpp b/vm/mterp/c/OP_UNUSED_F1FF.cpp
index a3a65d7..34259d3 100644
--- a/vm/mterp/c/OP_UNUSED_F1FF.cpp
+++ b/vm/mterp/c/OP_UNUSED_F1FF.cpp
@@ -2,7 +2,7 @@
     /*
      * In portable interp, most unused opcodes will fall through to here.
      */
-    LOGE("unknown opcode 0x%04x\n", inst);
+    LOGE("unknown opcode 0x%04x", inst);
     dvmAbort();
     FINISH(1);
 OP_END
diff --git a/vm/mterp/c/gotoTargets.cpp b/vm/mterp/c/gotoTargets.cpp
index 18f4c04..9d90046 100644
--- a/vm/mterp/c/gotoTargets.cpp
+++ b/vm/mterp/c/gotoTargets.cpp
@@ -66,7 +66,7 @@
         /*
          * Create an array of the specified type.
          */
-        LOGVV("+++ filled-new-array type is '%s'\n", arrayClass->descriptor);
+        LOGVV("+++ filled-new-array type is '%s'", arrayClass->descriptor);
         typeCh = arrayClass->descriptor[1];
         if (typeCh == 'D' || typeCh == 'J') {
             /* category 2 primitives not allowed */
@@ -74,7 +74,7 @@
             GOTO_exceptionThrown();
         } else if (typeCh != 'L' && typeCh != '[' && typeCh != 'I') {
             /* TODO: requires multiple "fill in" loops with different widths */
-            LOGE("non-int primitives not implemented\n");
+            LOGE("non-int primitives not implemented");
             dvmThrowInternalError(
                 "filled-new-array not implemented for anything but 'int'");
             GOTO_exceptionThrown();
@@ -164,7 +164,7 @@
         if (baseMethod == NULL) {
             baseMethod = dvmResolveMethod(curMethod->clazz, ref,METHOD_VIRTUAL);
             if (baseMethod == NULL) {
-                ILOGV("+ unknown method or access denied\n");
+                ILOGV("+ unknown method or access denied");
                 GOTO_exceptionThrown();
             }
         }
@@ -200,7 +200,7 @@
             methodToCall->nativeFunc != NULL);
 #endif
 
-        LOGVV("+++ base=%s.%s virtual[%d]=%s.%s\n",
+        LOGVV("+++ base=%s.%s virtual[%d]=%s.%s",
             baseMethod->clazz->descriptor, baseMethod->name,
             (u4) baseMethod->methodIndex,
             methodToCall->clazz->descriptor, methodToCall->name);
@@ -208,7 +208,7 @@
 
 #if 0
         if (vsrc1 != methodToCall->insSize) {
-            LOGW("WRONG METHOD: base=%s.%s virtual[%d]=%s.%s\n",
+            LOGW("WRONG METHOD: base=%s.%s virtual[%d]=%s.%s",
                 baseMethod->clazz->descriptor, baseMethod->name,
                 (u4) baseMethod->methodIndex,
                 methodToCall->clazz->descriptor, methodToCall->name);
@@ -268,7 +268,7 @@
         if (baseMethod == NULL) {
             baseMethod = dvmResolveMethod(curMethod->clazz, ref,METHOD_VIRTUAL);
             if (baseMethod == NULL) {
-                ILOGV("+ unknown method or access denied\n");
+                ILOGV("+ unknown method or access denied");
                 GOTO_exceptionThrown();
             }
         }
@@ -301,7 +301,7 @@
         assert(!dvmIsAbstractMethod(methodToCall) ||
             methodToCall->nativeFunc != NULL);
 #endif
-        LOGVV("+++ base=%s.%s super-virtual=%s.%s\n",
+        LOGVV("+++ base=%s.%s super-virtual=%s.%s",
             baseMethod->clazz->descriptor, baseMethod->name,
             methodToCall->clazz->descriptor, methodToCall->name);
         assert(methodToCall != NULL);
@@ -410,7 +410,7 @@
             methodToCall = dvmResolveMethod(curMethod->clazz, ref,
                             METHOD_DIRECT);
             if (methodToCall == NULL) {
-                ILOGV("+ unknown direct method\n");     // should be impossible
+                ILOGV("+ unknown direct method");     // should be impossible
                 GOTO_exceptionThrown();
             }
         }
@@ -445,7 +445,7 @@
     if (methodToCall == NULL) {
         methodToCall = dvmResolveMethod(curMethod->clazz, ref, METHOD_STATIC);
         if (methodToCall == NULL) {
-            ILOGV("+ unknown method\n");
+            ILOGV("+ unknown method");
             GOTO_exceptionThrown();
         }
 
@@ -516,7 +516,7 @@
             methodToCall->nativeFunc != NULL);
 #endif
 
-        LOGVV("+++ virtual[%d]=%s.%s\n",
+        LOGVV("+++ virtual[%d]=%s.%s",
             ref, methodToCall->clazz->descriptor, methodToCall->name);
         assert(methodToCall != NULL);
 
@@ -576,7 +576,7 @@
         assert(!dvmIsAbstractMethod(methodToCall) ||
             methodToCall->nativeFunc != NULL);
 #endif
-        LOGVV("+++ super-virtual[%d]=%s.%s\n",
+        LOGVV("+++ super-virtual[%d]=%s.%s",
             ref, methodToCall->clazz->descriptor, methodToCall->name);
         assert(methodToCall != NULL);
         GOTO_invokeMethod(methodCallRange, methodToCall, vsrc1, vdst);
@@ -624,7 +624,7 @@
 
         if (dvmIsBreakFrame(fp)) {
             /* bail without popping the method frame from stack */
-            LOGVV("+++ returned into break frame\n");
+            LOGVV("+++ returned into break frame");
             GOTO_bail();
         }
 
@@ -645,7 +645,7 @@
         {
             FINISH(3);
         } else {
-            //LOGE("Unknown invoke instr %02x at %d\n",
+            //LOGE("Unknown invoke instr %02x at %d",
             //    invokeInstr, (int) (pc - curMethod->insns));
             assert(false);
         }
@@ -677,7 +677,7 @@
         dvmAddTrackedAlloc(exception, self);
         dvmClearException(self);
 
-        LOGV("Handling exception %s at %s:%d\n",
+        LOGV("Handling exception %s at %s:%d",
             exception->clazz->descriptor, curMethod->name,
             dvmLineNumFromPC(curMethod, pc - curMethod->insns));
 
@@ -745,7 +745,7 @@
         if (catchRelPc < 0) {
             /* falling through to JNI code or off the bottom of the stack */
 #if DVM_SHOW_EXCEPTION >= 2
-            LOGD("Exception %s from %s:%d not caught locally\n",
+            LOGD("Exception %s from %s:%d not caught locally",
                 exception->clazz->descriptor, dvmGetMethodSourceFile(curMethod),
                 dvmLineNumFromPC(curMethod, pc - curMethod->insns));
 #endif
@@ -757,7 +757,7 @@
 #if DVM_SHOW_EXCEPTION >= 3
         {
             const Method* catchMethod = SAVEAREA_FROM_FP(fp)->method;
-            LOGD("Exception %s thrown from %s:%d to %s:%d\n",
+            LOGD("Exception %s thrown from %s:%d to %s:%d",
                 exception->clazz->descriptor, dvmGetMethodSourceFile(curMethod),
                 dvmLineNumFromPC(curMethod, pc - curMethod->insns),
                 dvmGetMethodSourceFile(catchMethod),
@@ -907,7 +907,7 @@
             bottom = (u1*) newSaveArea - methodToCall->outsSize * sizeof(u4);
             if (bottom < self->interpStackEnd) {
                 /* stack overflow */
-                LOGV("Stack overflow on method call (start=%p end=%p newBot=%p(%d) size=%d '%s')\n",
+                LOGV("Stack overflow on method call (start=%p end=%p newBot=%p(%d) size=%d '%s')",
                     self->interpStackStart, self->interpStackEnd, bottom,
                     (u1*) fp - bottom, self->interpStackSize,
                     methodToCall->name);
@@ -915,7 +915,7 @@
                 assert(dvmCheckException(self));
                 GOTO_exceptionThrown();
             }
-            //LOGD("+++ fp=%p newFp=%p newSave=%p bottom=%p\n",
+            //LOGD("+++ fp=%p newFp=%p newSave=%p bottom=%p",
             //    fp, newFp, newSaveArea, bottom);
         }
 
@@ -1006,7 +1006,7 @@
              * it, jump to our local exception handling.
              */
             if (dvmCheckException(self)) {
-                LOGV("Exception thrown by/below native code\n");
+                LOGV("Exception thrown by/below native code");
                 GOTO_exceptionThrown();
             }
 
@@ -1022,7 +1022,7 @@
             {
                 FINISH(3);
             } else {
-                //LOGE("Unknown invoke instr %02x at %d\n",
+                //LOGE("Unknown invoke instr %02x at %d",
                 //    invokeInstr, (int) (pc - curMethod->insns));
                 assert(false);
             }
diff --git a/vm/mterp/c/header.cpp b/vm/mterp/c/header.cpp
index 70baa02..d17915a 100644
--- a/vm/mterp/c/header.cpp
+++ b/vm/mterp/c/header.cpp
@@ -95,7 +95,7 @@
         {                                                                   \
             char* desc;                                                     \
             desc = dexProtoCopyMethodDescriptor(&curMethod->prototype);     \
-            LOGE("Invalid branch %d at 0x%04x in %s.%s %s\n",               \
+            LOGE("Invalid branch %d at 0x%04x in %s.%s %s",                 \
                 myoff, (int) (pc - curMethod->insns),                       \
                 curMethod->clazz->descriptor, curMethod->name, desc);       \
             free(desc);                                                     \
@@ -120,11 +120,11 @@
 # define ILOG(_level, ...) do {                                             \
         char debugStrBuf[128];                                              \
         snprintf(debugStrBuf, sizeof(debugStrBuf), __VA_ARGS__);            \
-        if (curMethod != NULL)                                                 \
-            LOG(_level, LOG_TAG"i", "%-2d|%04x%s\n",                        \
+        if (curMethod != NULL)                                              \
+            LOG(_level, LOG_TAG"i", "%-2d|%04x%s",                          \
                 self->threadId, (int)(pc - curMethod->insns), debugStrBuf); \
         else                                                                \
-            LOG(_level, LOG_TAG"i", "%-2d|####%s\n",                        \
+            LOG(_level, LOG_TAG"i", "%-2d|####%s",                          \
                 self->threadId, debugStrBuf);                               \
     } while(false)
 void dvmDumpRegs(const Method* method, const u4* framePtr, bool inOnly);
@@ -314,14 +314,14 @@
     }
 #ifdef WITH_EXTRA_OBJECT_VALIDATION
     if (!dvmIsValidObject(obj)) {
-        LOGE("Invalid object %p\n", obj);
+        LOGE("Invalid object %p", obj);
         dvmAbort();
     }
 #endif
 #ifndef NDEBUG
     if (obj->clazz == NULL || ((u4) obj->clazz) <= 65536) {
         /* probable heap corruption */
-        LOGE("Invalid object class %p (in %p)\n", obj->clazz, obj);
+        LOGE("Invalid object class %p (in %p)", obj->clazz, obj);
         dvmAbort();
     }
 #endif
@@ -346,14 +346,14 @@
     }
 #ifdef WITH_EXTRA_OBJECT_VALIDATION
     if (!dvmIsValidObject(obj)) {
-        LOGE("Invalid object %p\n", obj);
+        LOGE("Invalid object %p", obj);
         dvmAbort();
     }
 #endif
 #ifndef NDEBUG
     if (obj->clazz == NULL || ((u4) obj->clazz) <= 65536) {
         /* probable heap corruption */
-        LOGE("Invalid object class %p (in %p)\n", obj->clazz, obj);
+        LOGE("Invalid object class %p (in %p)", obj->clazz, obj);
         dvmAbort();
     }
 #endif
diff --git a/vm/mterp/c/opcommon.cpp b/vm/mterp/c/opcommon.cpp
index 25ea5e3..296776f 100644
--- a/vm/mterp/c/opcommon.cpp
+++ b/vm/mterp/c/opcommon.cpp
@@ -89,7 +89,7 @@
             result = 1;                                                     \
         else                                                                \
             result = (_nanVal);                                             \
-        ILOGV("+ result=%d\n", result);                                     \
+        ILOGV("+ result=%d", result);                                       \
         SET_REGISTER(vdst, result);                                         \
     }                                                                       \
     FINISH(2);
@@ -668,7 +668,7 @@
             if (sfield == NULL)                                             \
                 GOTO_exceptionThrown();                                     \
             if (dvmDexGetResolvedField(methodClassDex, ref) == NULL) {      \
-                JIT_STUB_HACK(dvmJitEndTraceSelect(self,pc));                  \
+                JIT_STUB_HACK(dvmJitEndTraceSelect(self,pc));               \
             }                                                               \
         }                                                                   \
         SET_REGISTER##_regsize(vdst, dvmGetStaticField##_ftype(sfield));    \
@@ -691,7 +691,7 @@
             if (sfield == NULL)                                             \
                 GOTO_exceptionThrown();                                     \
             if (dvmDexGetResolvedField(methodClassDex, ref) == NULL) {      \
-                JIT_STUB_HACK(dvmJitEndTraceSelect(self,pc));                  \
+                JIT_STUB_HACK(dvmJitEndTraceSelect(self,pc));               \
             }                                                               \
         }                                                                   \
         SET_REGISTER##_regsize(vdst, dvmGetStaticField##_ftype(sfield));    \
@@ -714,7 +714,7 @@
             if (sfield == NULL)                                             \
                 GOTO_exceptionThrown();                                     \
             if (dvmDexGetResolvedField(methodClassDex, ref) == NULL) {      \
-                JIT_STUB_HACK(dvmJitEndTraceSelect(self,pc));                  \
+                JIT_STUB_HACK(dvmJitEndTraceSelect(self,pc));               \
             }                                                               \
         }                                                                   \
         dvmSetStaticField##_ftype(sfield, GET_REGISTER##_regsize(vdst));    \
@@ -737,7 +737,7 @@
             if (sfield == NULL)                                             \
                 GOTO_exceptionThrown();                                     \
             if (dvmDexGetResolvedField(methodClassDex, ref) == NULL) {      \
-                JIT_STUB_HACK(dvmJitEndTraceSelect(self,pc));                  \
+                JIT_STUB_HACK(dvmJitEndTraceSelect(self,pc));               \
             }                                                               \
         }                                                                   \
         dvmSetStaticField##_ftype(sfield, GET_REGISTER##_regsize(vdst));    \
diff --git a/vm/mterp/common/asm-constants.h b/vm/mterp/common/asm-constants.h
index bee7d11..1313de6 100644
--- a/vm/mterp/common/asm-constants.h
+++ b/vm/mterp/common/asm-constants.h
@@ -12,19 +12,19 @@
    */
 # define MTERP_OFFSET(_name, _type, _field, _offset)                        \
     if (OFFSETOF_MEMBER(_type, _field) != _offset) {                        \
-        LOGE("Bad asm offset %s (%d), should be %d\n",                      \
+        LOGE("Bad asm offset %s (%d), should be %d",                        \
             #_name, _offset, OFFSETOF_MEMBER(_type, _field));               \
         failed = true;                                                      \
     }
 # define MTERP_SIZEOF(_name, _type, _size)                                  \
     if (sizeof(_type) != (_size)) {                                         \
-        LOGE("Bad asm sizeof %s (%d), should be %d\n",                      \
+        LOGE("Bad asm sizeof %s (%d), should be %d",                        \
             #_name, (_size), sizeof(_type));                                \
         failed = true;                                                      \
     }
 # define MTERP_CONSTANT(_name, _value)                                      \
     if ((_name) != (_value)) {                                              \
-        LOGE("Bad asm constant %s (%d), should be %d\n",                    \
+        LOGE("Bad asm constant %s (%d), should be %d",                      \
             #_name, (_value), (_name));                                     \
         failed = true;                                                      \
     }
diff --git a/vm/mterp/cstubs/entry.cpp b/vm/mterp/cstubs/entry.cpp
index 3123e6d..350bd86 100644
--- a/vm/mterp/cstubs/entry.cpp
+++ b/vm/mterp/cstubs/entry.cpp
@@ -25,7 +25,7 @@
 
     /* We exit via a longjmp */
     if (setjmp(jmpBuf)) {
-        LOGVV("mterp threadid=%d returning\n", dvmThreadSelf()->threadId);
+        LOGVV("mterp threadid=%d returning", dvmThreadSelf()->threadId);
         return
     }
 
@@ -45,7 +45,7 @@
         }
         Handler handler = (Handler) gDvmMterpHandlers[inst & 0xff];
         (void) gDvmMterpHandlerNames;   /* avoid gcc "defined but not used" */
-        LOGVV("handler %p %s\n",
+        LOGVV("handler %p %s",
             handler, (const char*) gDvmMterpHandlerNames[inst & 0xff]);
         (*handler)(self);
     }
diff --git a/vm/mterp/out/InterpC-allstubs.cpp b/vm/mterp/out/InterpC-allstubs.cpp
index 2f037b4..53a6ec2 100644
--- a/vm/mterp/out/InterpC-allstubs.cpp
+++ b/vm/mterp/out/InterpC-allstubs.cpp
@@ -102,7 +102,7 @@
         {                                                                   \
             char* desc;                                                     \
             desc = dexProtoCopyMethodDescriptor(&curMethod->prototype);     \
-            LOGE("Invalid branch %d at 0x%04x in %s.%s %s\n",               \
+            LOGE("Invalid branch %d at 0x%04x in %s.%s %s",                 \
                 myoff, (int) (pc - curMethod->insns),                       \
                 curMethod->clazz->descriptor, curMethod->name, desc);       \
             free(desc);                                                     \
@@ -127,11 +127,11 @@
 # define ILOG(_level, ...) do {                                             \
         char debugStrBuf[128];                                              \
         snprintf(debugStrBuf, sizeof(debugStrBuf), __VA_ARGS__);            \
-        if (curMethod != NULL)                                                 \
-            LOG(_level, LOG_TAG"i", "%-2d|%04x%s\n",                        \
+        if (curMethod != NULL)                                              \
+            LOG(_level, LOG_TAG"i", "%-2d|%04x%s",                          \
                 self->threadId, (int)(pc - curMethod->insns), debugStrBuf); \
         else                                                                \
-            LOG(_level, LOG_TAG"i", "%-2d|####%s\n",                        \
+            LOG(_level, LOG_TAG"i", "%-2d|####%s",                          \
                 self->threadId, debugStrBuf);                               \
     } while(false)
 void dvmDumpRegs(const Method* method, const u4* framePtr, bool inOnly);
@@ -321,14 +321,14 @@
     }
 #ifdef WITH_EXTRA_OBJECT_VALIDATION
     if (!dvmIsValidObject(obj)) {
-        LOGE("Invalid object %p\n", obj);
+        LOGE("Invalid object %p", obj);
         dvmAbort();
     }
 #endif
 #ifndef NDEBUG
     if (obj->clazz == NULL || ((u4) obj->clazz) <= 65536) {
         /* probable heap corruption */
-        LOGE("Invalid object class %p (in %p)\n", obj->clazz, obj);
+        LOGE("Invalid object class %p (in %p)", obj->clazz, obj);
         dvmAbort();
     }
 #endif
@@ -353,14 +353,14 @@
     }
 #ifdef WITH_EXTRA_OBJECT_VALIDATION
     if (!dvmIsValidObject(obj)) {
-        LOGE("Invalid object %p\n", obj);
+        LOGE("Invalid object %p", obj);
         dvmAbort();
     }
 #endif
 #ifndef NDEBUG
     if (obj->clazz == NULL || ((u4) obj->clazz) <= 65536) {
         /* probable heap corruption */
-        LOGE("Invalid object class %p (in %p)\n", obj->clazz, obj);
+        LOGE("Invalid object class %p (in %p)", obj->clazz, obj);
         dvmAbort();
     }
 #endif
@@ -595,7 +595,7 @@
             result = 1;                                                     \
         else                                                                \
             result = (_nanVal);                                             \
-        ILOGV("+ result=%d\n", result);                                     \
+        ILOGV("+ result=%d", result);                                       \
         SET_REGISTER(vdst, result);                                         \
     }                                                                       \
     FINISH(2);
@@ -1174,7 +1174,7 @@
             if (sfield == NULL)                                             \
                 GOTO_exceptionThrown();                                     \
             if (dvmDexGetResolvedField(methodClassDex, ref) == NULL) {      \
-                JIT_STUB_HACK(dvmJitEndTraceSelect(self,pc));                  \
+                JIT_STUB_HACK(dvmJitEndTraceSelect(self,pc));               \
             }                                                               \
         }                                                                   \
         SET_REGISTER##_regsize(vdst, dvmGetStaticField##_ftype(sfield));    \
@@ -1197,7 +1197,7 @@
             if (sfield == NULL)                                             \
                 GOTO_exceptionThrown();                                     \
             if (dvmDexGetResolvedField(methodClassDex, ref) == NULL) {      \
-                JIT_STUB_HACK(dvmJitEndTraceSelect(self,pc));                  \
+                JIT_STUB_HACK(dvmJitEndTraceSelect(self,pc));               \
             }                                                               \
         }                                                                   \
         SET_REGISTER##_regsize(vdst, dvmGetStaticField##_ftype(sfield));    \
@@ -1220,7 +1220,7 @@
             if (sfield == NULL)                                             \
                 GOTO_exceptionThrown();                                     \
             if (dvmDexGetResolvedField(methodClassDex, ref) == NULL) {      \
-                JIT_STUB_HACK(dvmJitEndTraceSelect(self,pc));                  \
+                JIT_STUB_HACK(dvmJitEndTraceSelect(self,pc));               \
             }                                                               \
         }                                                                   \
         dvmSetStaticField##_ftype(sfield, GET_REGISTER##_regsize(vdst));    \
@@ -1243,7 +1243,7 @@
             if (sfield == NULL)                                             \
                 GOTO_exceptionThrown();                                     \
             if (dvmDexGetResolvedField(methodClassDex, ref) == NULL) {      \
-                JIT_STUB_HACK(dvmJitEndTraceSelect(self,pc));                  \
+                JIT_STUB_HACK(dvmJitEndTraceSelect(self,pc));               \
             }                                                               \
         }                                                                   \
         dvmSetStaticField##_ftype(sfield, GET_REGISTER##_regsize(vdst));    \
@@ -1604,7 +1604,7 @@
         obj = (Object*)GET_REGISTER(vsrc1);
         if (!checkForNullExportPC(obj, fp, pc))
             GOTO_exceptionThrown();
-        ILOGV("+ locking %p %s\n", obj, obj->clazz->descriptor);
+        ILOGV("+ locking %p %s", obj, obj->clazz->descriptor);
         EXPORT_PC();    /* need for precise GC */
         dvmLockObject(self, obj);
     }
@@ -1633,7 +1633,7 @@
             ADJUST_PC(1);           /* monitor-exit width is 1 */
             GOTO_exceptionThrown();
         }
-        ILOGV("+ unlocking %p %s\n", obj, obj->clazz->descriptor);
+        ILOGV("+ unlocking %p %s", obj, obj->clazz->descriptor);
         if (!dvmUnlockObject(self, obj)) {
             assert(dvmCheckException(self));
             ADJUST_PC(1);
@@ -1868,7 +1868,7 @@
         obj = (Object*) GET_REGISTER(vsrc1);
         if (!checkForNull(obj)) {
             /* will throw a null pointer exception */
-            LOGVV("Bad exception\n");
+            LOGVV("Bad exception");
         } else {
             /* use the requested exception */
             dvmSetException(self, obj);
@@ -1947,7 +1947,7 @@
         testVal = GET_REGISTER(vsrc1);
 
         offset = dvmInterpHandlePackedSwitch(switchData, testVal);
-        ILOGV("> branch taken (0x%04x)\n", offset);
+        ILOGV("> branch taken (0x%04x)", offset);
         if (offset <= 0)  /* uncommon */
             PERIODIC_CHECKS(offset);
         FINISH(offset);
@@ -1978,7 +1978,7 @@
         testVal = GET_REGISTER(vsrc1);
 
         offset = dvmInterpHandleSparseSwitch(switchData, testVal);
-        ILOGV("> branch taken (0x%04x)\n", offset);
+        ILOGV("> branch taken (0x%04x)", offset);
         if (offset <= 0)  /* uncommon */
             PERIODIC_CHECKS(offset);
         FINISH(offset);
@@ -2138,7 +2138,7 @@
             if (!checkForNull(obj))
                 GOTO_exceptionThrown();
             if (!dvmCanPutArrayElement(obj->clazz, arrayObj->clazz)) {
-                LOGV("Can't put a '%s'(%p) into array type='%s'(%p)\n",
+                LOGV("Can't put a '%s'(%p) into array type='%s'(%p)",
                     obj->clazz->descriptor, obj,
                     arrayObj->obj.clazz->descriptor, arrayObj);
                 dvmThrowArrayStoreExceptionIncompatibleElement(obj->clazz, arrayObj->clazz);
@@ -2881,7 +2881,7 @@
          * the thread resumed.
          */
         u1 originalOpcode = dvmGetOriginalOpcode(pc);
-        LOGV("+++ break 0x%02x (0x%04x -> 0x%04x)\n", originalOpcode, inst,
+        LOGV("+++ break 0x%02x (0x%04x -> 0x%04x)", originalOpcode, inst,
             INST_REPLACE_OP(inst, originalOpcode));
         inst = INST_REPLACE_OP(inst, originalOpcode);
         FINISH_BKPT(originalOpcode);
@@ -4246,7 +4246,7 @@
     /*
      * In portable interp, most unused opcodes will fall through to here.
      */
-    LOGE("unknown opcode 0x%04x\n", inst);
+    LOGE("unknown opcode 0x%04x", inst);
     dvmAbort();
     FINISH(1);
 OP_END
@@ -4367,7 +4367,7 @@
 
     /* We exit via a longjmp */
     if (setjmp(jmpBuf)) {
-        LOGVV("mterp threadid=%d returning\n", dvmThreadSelf()->threadId);
+        LOGVV("mterp threadid=%d returning", dvmThreadSelf()->threadId);
         return
     }
 
@@ -4387,7 +4387,7 @@
         }
         Handler handler = (Handler) gDvmMterpHandlers[inst & 0xff];
         (void) gDvmMterpHandlerNames;   /* avoid gcc "defined but not used" */
-        LOGVV("handler %p %s\n",
+        LOGVV("handler %p %s",
             handler, (const char*) gDvmMterpHandlerNames[inst & 0xff]);
         (*handler)(self);
     }
@@ -4471,7 +4471,7 @@
         /*
          * Create an array of the specified type.
          */
-        LOGVV("+++ filled-new-array type is '%s'\n", arrayClass->descriptor);
+        LOGVV("+++ filled-new-array type is '%s'", arrayClass->descriptor);
         typeCh = arrayClass->descriptor[1];
         if (typeCh == 'D' || typeCh == 'J') {
             /* category 2 primitives not allowed */
@@ -4479,7 +4479,7 @@
             GOTO_exceptionThrown();
         } else if (typeCh != 'L' && typeCh != '[' && typeCh != 'I') {
             /* TODO: requires multiple "fill in" loops with different widths */
-            LOGE("non-int primitives not implemented\n");
+            LOGE("non-int primitives not implemented");
             dvmThrowInternalError(
                 "filled-new-array not implemented for anything but 'int'");
             GOTO_exceptionThrown();
@@ -4569,7 +4569,7 @@
         if (baseMethod == NULL) {
             baseMethod = dvmResolveMethod(curMethod->clazz, ref,METHOD_VIRTUAL);
             if (baseMethod == NULL) {
-                ILOGV("+ unknown method or access denied\n");
+                ILOGV("+ unknown method or access denied");
                 GOTO_exceptionThrown();
             }
         }
@@ -4605,7 +4605,7 @@
             methodToCall->nativeFunc != NULL);
 #endif
 
-        LOGVV("+++ base=%s.%s virtual[%d]=%s.%s\n",
+        LOGVV("+++ base=%s.%s virtual[%d]=%s.%s",
             baseMethod->clazz->descriptor, baseMethod->name,
             (u4) baseMethod->methodIndex,
             methodToCall->clazz->descriptor, methodToCall->name);
@@ -4613,7 +4613,7 @@
 
 #if 0
         if (vsrc1 != methodToCall->insSize) {
-            LOGW("WRONG METHOD: base=%s.%s virtual[%d]=%s.%s\n",
+            LOGW("WRONG METHOD: base=%s.%s virtual[%d]=%s.%s",
                 baseMethod->clazz->descriptor, baseMethod->name,
                 (u4) baseMethod->methodIndex,
                 methodToCall->clazz->descriptor, methodToCall->name);
@@ -4673,7 +4673,7 @@
         if (baseMethod == NULL) {
             baseMethod = dvmResolveMethod(curMethod->clazz, ref,METHOD_VIRTUAL);
             if (baseMethod == NULL) {
-                ILOGV("+ unknown method or access denied\n");
+                ILOGV("+ unknown method or access denied");
                 GOTO_exceptionThrown();
             }
         }
@@ -4706,7 +4706,7 @@
         assert(!dvmIsAbstractMethod(methodToCall) ||
             methodToCall->nativeFunc != NULL);
 #endif
-        LOGVV("+++ base=%s.%s super-virtual=%s.%s\n",
+        LOGVV("+++ base=%s.%s super-virtual=%s.%s",
             baseMethod->clazz->descriptor, baseMethod->name,
             methodToCall->clazz->descriptor, methodToCall->name);
         assert(methodToCall != NULL);
@@ -4815,7 +4815,7 @@
             methodToCall = dvmResolveMethod(curMethod->clazz, ref,
                             METHOD_DIRECT);
             if (methodToCall == NULL) {
-                ILOGV("+ unknown direct method\n");     // should be impossible
+                ILOGV("+ unknown direct method");     // should be impossible
                 GOTO_exceptionThrown();
             }
         }
@@ -4850,7 +4850,7 @@
     if (methodToCall == NULL) {
         methodToCall = dvmResolveMethod(curMethod->clazz, ref, METHOD_STATIC);
         if (methodToCall == NULL) {
-            ILOGV("+ unknown method\n");
+            ILOGV("+ unknown method");
             GOTO_exceptionThrown();
         }
 
@@ -4921,7 +4921,7 @@
             methodToCall->nativeFunc != NULL);
 #endif
 
-        LOGVV("+++ virtual[%d]=%s.%s\n",
+        LOGVV("+++ virtual[%d]=%s.%s",
             ref, methodToCall->clazz->descriptor, methodToCall->name);
         assert(methodToCall != NULL);
 
@@ -4981,7 +4981,7 @@
         assert(!dvmIsAbstractMethod(methodToCall) ||
             methodToCall->nativeFunc != NULL);
 #endif
-        LOGVV("+++ super-virtual[%d]=%s.%s\n",
+        LOGVV("+++ super-virtual[%d]=%s.%s",
             ref, methodToCall->clazz->descriptor, methodToCall->name);
         assert(methodToCall != NULL);
         GOTO_invokeMethod(methodCallRange, methodToCall, vsrc1, vdst);
@@ -5029,7 +5029,7 @@
 
         if (dvmIsBreakFrame(fp)) {
             /* bail without popping the method frame from stack */
-            LOGVV("+++ returned into break frame\n");
+            LOGVV("+++ returned into break frame");
             GOTO_bail();
         }
 
@@ -5050,7 +5050,7 @@
         {
             FINISH(3);
         } else {
-            //LOGE("Unknown invoke instr %02x at %d\n",
+            //LOGE("Unknown invoke instr %02x at %d",
             //    invokeInstr, (int) (pc - curMethod->insns));
             assert(false);
         }
@@ -5082,7 +5082,7 @@
         dvmAddTrackedAlloc(exception, self);
         dvmClearException(self);
 
-        LOGV("Handling exception %s at %s:%d\n",
+        LOGV("Handling exception %s at %s:%d",
             exception->clazz->descriptor, curMethod->name,
             dvmLineNumFromPC(curMethod, pc - curMethod->insns));
 
@@ -5150,7 +5150,7 @@
         if (catchRelPc < 0) {
             /* falling through to JNI code or off the bottom of the stack */
 #if DVM_SHOW_EXCEPTION >= 2
-            LOGD("Exception %s from %s:%d not caught locally\n",
+            LOGD("Exception %s from %s:%d not caught locally",
                 exception->clazz->descriptor, dvmGetMethodSourceFile(curMethod),
                 dvmLineNumFromPC(curMethod, pc - curMethod->insns));
 #endif
@@ -5162,7 +5162,7 @@
 #if DVM_SHOW_EXCEPTION >= 3
         {
             const Method* catchMethod = SAVEAREA_FROM_FP(fp)->method;
-            LOGD("Exception %s thrown from %s:%d to %s:%d\n",
+            LOGD("Exception %s thrown from %s:%d to %s:%d",
                 exception->clazz->descriptor, dvmGetMethodSourceFile(curMethod),
                 dvmLineNumFromPC(curMethod, pc - curMethod->insns),
                 dvmGetMethodSourceFile(catchMethod),
@@ -5312,7 +5312,7 @@
             bottom = (u1*) newSaveArea - methodToCall->outsSize * sizeof(u4);
             if (bottom < self->interpStackEnd) {
                 /* stack overflow */
-                LOGV("Stack overflow on method call (start=%p end=%p newBot=%p(%d) size=%d '%s')\n",
+                LOGV("Stack overflow on method call (start=%p end=%p newBot=%p(%d) size=%d '%s')",
                     self->interpStackStart, self->interpStackEnd, bottom,
                     (u1*) fp - bottom, self->interpStackSize,
                     methodToCall->name);
@@ -5320,7 +5320,7 @@
                 assert(dvmCheckException(self));
                 GOTO_exceptionThrown();
             }
-            //LOGD("+++ fp=%p newFp=%p newSave=%p bottom=%p\n",
+            //LOGD("+++ fp=%p newFp=%p newSave=%p bottom=%p",
             //    fp, newFp, newSaveArea, bottom);
         }
 
@@ -5411,7 +5411,7 @@
              * it, jump to our local exception handling.
              */
             if (dvmCheckException(self)) {
-                LOGV("Exception thrown by/below native code\n");
+                LOGV("Exception thrown by/below native code");
                 GOTO_exceptionThrown();
             }
 
@@ -5427,7 +5427,7 @@
             {
                 FINISH(3);
             } else {
-                //LOGE("Unknown invoke instr %02x at %d\n",
+                //LOGE("Unknown invoke instr %02x at %d",
                 //    invokeInstr, (int) (pc - curMethod->insns));
                 assert(false);
             }
diff --git a/vm/mterp/out/InterpC-armv5te-vfp.cpp b/vm/mterp/out/InterpC-armv5te-vfp.cpp
index 2877f51..50bde59 100644
--- a/vm/mterp/out/InterpC-armv5te-vfp.cpp
+++ b/vm/mterp/out/InterpC-armv5te-vfp.cpp
@@ -102,7 +102,7 @@
         {                                                                   \
             char* desc;                                                     \
             desc = dexProtoCopyMethodDescriptor(&curMethod->prototype);     \
-            LOGE("Invalid branch %d at 0x%04x in %s.%s %s\n",               \
+            LOGE("Invalid branch %d at 0x%04x in %s.%s %s",                 \
                 myoff, (int) (pc - curMethod->insns),                       \
                 curMethod->clazz->descriptor, curMethod->name, desc);       \
             free(desc);                                                     \
@@ -127,11 +127,11 @@
 # define ILOG(_level, ...) do {                                             \
         char debugStrBuf[128];                                              \
         snprintf(debugStrBuf, sizeof(debugStrBuf), __VA_ARGS__);            \
-        if (curMethod != NULL)                                                 \
-            LOG(_level, LOG_TAG"i", "%-2d|%04x%s\n",                        \
+        if (curMethod != NULL)                                              \
+            LOG(_level, LOG_TAG"i", "%-2d|%04x%s",                          \
                 self->threadId, (int)(pc - curMethod->insns), debugStrBuf); \
         else                                                                \
-            LOG(_level, LOG_TAG"i", "%-2d|####%s\n",                        \
+            LOG(_level, LOG_TAG"i", "%-2d|####%s",                          \
                 self->threadId, debugStrBuf);                               \
     } while(false)
 void dvmDumpRegs(const Method* method, const u4* framePtr, bool inOnly);
@@ -321,14 +321,14 @@
     }
 #ifdef WITH_EXTRA_OBJECT_VALIDATION
     if (!dvmIsValidObject(obj)) {
-        LOGE("Invalid object %p\n", obj);
+        LOGE("Invalid object %p", obj);
         dvmAbort();
     }
 #endif
 #ifndef NDEBUG
     if (obj->clazz == NULL || ((u4) obj->clazz) <= 65536) {
         /* probable heap corruption */
-        LOGE("Invalid object class %p (in %p)\n", obj->clazz, obj);
+        LOGE("Invalid object class %p (in %p)", obj->clazz, obj);
         dvmAbort();
     }
 #endif
@@ -353,14 +353,14 @@
     }
 #ifdef WITH_EXTRA_OBJECT_VALIDATION
     if (!dvmIsValidObject(obj)) {
-        LOGE("Invalid object %p\n", obj);
+        LOGE("Invalid object %p", obj);
         dvmAbort();
     }
 #endif
 #ifndef NDEBUG
     if (obj->clazz == NULL || ((u4) obj->clazz) <= 65536) {
         /* probable heap corruption */
-        LOGE("Invalid object class %p (in %p)\n", obj->clazz, obj);
+        LOGE("Invalid object class %p (in %p)", obj->clazz, obj);
         dvmAbort();
     }
 #endif
@@ -595,7 +595,7 @@
             result = 1;                                                     \
         else                                                                \
             result = (_nanVal);                                             \
-        ILOGV("+ result=%d\n", result);                                     \
+        ILOGV("+ result=%d", result);                                       \
         SET_REGISTER(vdst, result);                                         \
     }                                                                       \
     FINISH(2);
@@ -1174,7 +1174,7 @@
             if (sfield == NULL)                                             \
                 GOTO_exceptionThrown();                                     \
             if (dvmDexGetResolvedField(methodClassDex, ref) == NULL) {      \
-                JIT_STUB_HACK(dvmJitEndTraceSelect(self,pc));                  \
+                JIT_STUB_HACK(dvmJitEndTraceSelect(self,pc));               \
             }                                                               \
         }                                                                   \
         SET_REGISTER##_regsize(vdst, dvmGetStaticField##_ftype(sfield));    \
@@ -1197,7 +1197,7 @@
             if (sfield == NULL)                                             \
                 GOTO_exceptionThrown();                                     \
             if (dvmDexGetResolvedField(methodClassDex, ref) == NULL) {      \
-                JIT_STUB_HACK(dvmJitEndTraceSelect(self,pc));                  \
+                JIT_STUB_HACK(dvmJitEndTraceSelect(self,pc));               \
             }                                                               \
         }                                                                   \
         SET_REGISTER##_regsize(vdst, dvmGetStaticField##_ftype(sfield));    \
@@ -1220,7 +1220,7 @@
             if (sfield == NULL)                                             \
                 GOTO_exceptionThrown();                                     \
             if (dvmDexGetResolvedField(methodClassDex, ref) == NULL) {      \
-                JIT_STUB_HACK(dvmJitEndTraceSelect(self,pc));                  \
+                JIT_STUB_HACK(dvmJitEndTraceSelect(self,pc));               \
             }                                                               \
         }                                                                   \
         dvmSetStaticField##_ftype(sfield, GET_REGISTER##_regsize(vdst));    \
@@ -1243,7 +1243,7 @@
             if (sfield == NULL)                                             \
                 GOTO_exceptionThrown();                                     \
             if (dvmDexGetResolvedField(methodClassDex, ref) == NULL) {      \
-                JIT_STUB_HACK(dvmJitEndTraceSelect(self,pc));                  \
+                JIT_STUB_HACK(dvmJitEndTraceSelect(self,pc));               \
             }                                                               \
         }                                                                   \
         dvmSetStaticField##_ftype(sfield, GET_REGISTER##_regsize(vdst));    \
diff --git a/vm/mterp/out/InterpC-armv5te.cpp b/vm/mterp/out/InterpC-armv5te.cpp
index 5f7ffed..778c000 100644
--- a/vm/mterp/out/InterpC-armv5te.cpp
+++ b/vm/mterp/out/InterpC-armv5te.cpp
@@ -102,7 +102,7 @@
         {                                                                   \
             char* desc;                                                     \
             desc = dexProtoCopyMethodDescriptor(&curMethod->prototype);     \
-            LOGE("Invalid branch %d at 0x%04x in %s.%s %s\n",               \
+            LOGE("Invalid branch %d at 0x%04x in %s.%s %s",                 \
                 myoff, (int) (pc - curMethod->insns),                       \
                 curMethod->clazz->descriptor, curMethod->name, desc);       \
             free(desc);                                                     \
@@ -127,11 +127,11 @@
 # define ILOG(_level, ...) do {                                             \
         char debugStrBuf[128];                                              \
         snprintf(debugStrBuf, sizeof(debugStrBuf), __VA_ARGS__);            \
-        if (curMethod != NULL)                                                 \
-            LOG(_level, LOG_TAG"i", "%-2d|%04x%s\n",                        \
+        if (curMethod != NULL)                                              \
+            LOG(_level, LOG_TAG"i", "%-2d|%04x%s",                          \
                 self->threadId, (int)(pc - curMethod->insns), debugStrBuf); \
         else                                                                \
-            LOG(_level, LOG_TAG"i", "%-2d|####%s\n",                        \
+            LOG(_level, LOG_TAG"i", "%-2d|####%s",                          \
                 self->threadId, debugStrBuf);                               \
     } while(false)
 void dvmDumpRegs(const Method* method, const u4* framePtr, bool inOnly);
@@ -321,14 +321,14 @@
     }
 #ifdef WITH_EXTRA_OBJECT_VALIDATION
     if (!dvmIsValidObject(obj)) {
-        LOGE("Invalid object %p\n", obj);
+        LOGE("Invalid object %p", obj);
         dvmAbort();
     }
 #endif
 #ifndef NDEBUG
     if (obj->clazz == NULL || ((u4) obj->clazz) <= 65536) {
         /* probable heap corruption */
-        LOGE("Invalid object class %p (in %p)\n", obj->clazz, obj);
+        LOGE("Invalid object class %p (in %p)", obj->clazz, obj);
         dvmAbort();
     }
 #endif
@@ -353,14 +353,14 @@
     }
 #ifdef WITH_EXTRA_OBJECT_VALIDATION
     if (!dvmIsValidObject(obj)) {
-        LOGE("Invalid object %p\n", obj);
+        LOGE("Invalid object %p", obj);
         dvmAbort();
     }
 #endif
 #ifndef NDEBUG
     if (obj->clazz == NULL || ((u4) obj->clazz) <= 65536) {
         /* probable heap corruption */
-        LOGE("Invalid object class %p (in %p)\n", obj->clazz, obj);
+        LOGE("Invalid object class %p (in %p)", obj->clazz, obj);
         dvmAbort();
     }
 #endif
@@ -595,7 +595,7 @@
             result = 1;                                                     \
         else                                                                \
             result = (_nanVal);                                             \
-        ILOGV("+ result=%d\n", result);                                     \
+        ILOGV("+ result=%d", result);                                       \
         SET_REGISTER(vdst, result);                                         \
     }                                                                       \
     FINISH(2);
@@ -1174,7 +1174,7 @@
             if (sfield == NULL)                                             \
                 GOTO_exceptionThrown();                                     \
             if (dvmDexGetResolvedField(methodClassDex, ref) == NULL) {      \
-                JIT_STUB_HACK(dvmJitEndTraceSelect(self,pc));                  \
+                JIT_STUB_HACK(dvmJitEndTraceSelect(self,pc));               \
             }                                                               \
         }                                                                   \
         SET_REGISTER##_regsize(vdst, dvmGetStaticField##_ftype(sfield));    \
@@ -1197,7 +1197,7 @@
             if (sfield == NULL)                                             \
                 GOTO_exceptionThrown();                                     \
             if (dvmDexGetResolvedField(methodClassDex, ref) == NULL) {      \
-                JIT_STUB_HACK(dvmJitEndTraceSelect(self,pc));                  \
+                JIT_STUB_HACK(dvmJitEndTraceSelect(self,pc));               \
             }                                                               \
         }                                                                   \
         SET_REGISTER##_regsize(vdst, dvmGetStaticField##_ftype(sfield));    \
@@ -1220,7 +1220,7 @@
             if (sfield == NULL)                                             \
                 GOTO_exceptionThrown();                                     \
             if (dvmDexGetResolvedField(methodClassDex, ref) == NULL) {      \
-                JIT_STUB_HACK(dvmJitEndTraceSelect(self,pc));                  \
+                JIT_STUB_HACK(dvmJitEndTraceSelect(self,pc));               \
             }                                                               \
         }                                                                   \
         dvmSetStaticField##_ftype(sfield, GET_REGISTER##_regsize(vdst));    \
@@ -1243,7 +1243,7 @@
             if (sfield == NULL)                                             \
                 GOTO_exceptionThrown();                                     \
             if (dvmDexGetResolvedField(methodClassDex, ref) == NULL) {      \
-                JIT_STUB_HACK(dvmJitEndTraceSelect(self,pc));                  \
+                JIT_STUB_HACK(dvmJitEndTraceSelect(self,pc));               \
             }                                                               \
         }                                                                   \
         dvmSetStaticField##_ftype(sfield, GET_REGISTER##_regsize(vdst));    \
diff --git a/vm/mterp/out/InterpC-armv7-a-neon.cpp b/vm/mterp/out/InterpC-armv7-a-neon.cpp
index 805b39c..d8ee98d 100644
--- a/vm/mterp/out/InterpC-armv7-a-neon.cpp
+++ b/vm/mterp/out/InterpC-armv7-a-neon.cpp
@@ -102,7 +102,7 @@
         {                                                                   \
             char* desc;                                                     \
             desc = dexProtoCopyMethodDescriptor(&curMethod->prototype);     \
-            LOGE("Invalid branch %d at 0x%04x in %s.%s %s\n",               \
+            LOGE("Invalid branch %d at 0x%04x in %s.%s %s",                 \
                 myoff, (int) (pc - curMethod->insns),                       \
                 curMethod->clazz->descriptor, curMethod->name, desc);       \
             free(desc);                                                     \
@@ -127,11 +127,11 @@
 # define ILOG(_level, ...) do {                                             \
         char debugStrBuf[128];                                              \
         snprintf(debugStrBuf, sizeof(debugStrBuf), __VA_ARGS__);            \
-        if (curMethod != NULL)                                                 \
-            LOG(_level, LOG_TAG"i", "%-2d|%04x%s\n",                        \
+        if (curMethod != NULL)                                              \
+            LOG(_level, LOG_TAG"i", "%-2d|%04x%s",                          \
                 self->threadId, (int)(pc - curMethod->insns), debugStrBuf); \
         else                                                                \
-            LOG(_level, LOG_TAG"i", "%-2d|####%s\n",                        \
+            LOG(_level, LOG_TAG"i", "%-2d|####%s",                          \
                 self->threadId, debugStrBuf);                               \
     } while(false)
 void dvmDumpRegs(const Method* method, const u4* framePtr, bool inOnly);
@@ -321,14 +321,14 @@
     }
 #ifdef WITH_EXTRA_OBJECT_VALIDATION
     if (!dvmIsValidObject(obj)) {
-        LOGE("Invalid object %p\n", obj);
+        LOGE("Invalid object %p", obj);
         dvmAbort();
     }
 #endif
 #ifndef NDEBUG
     if (obj->clazz == NULL || ((u4) obj->clazz) <= 65536) {
         /* probable heap corruption */
-        LOGE("Invalid object class %p (in %p)\n", obj->clazz, obj);
+        LOGE("Invalid object class %p (in %p)", obj->clazz, obj);
         dvmAbort();
     }
 #endif
@@ -353,14 +353,14 @@
     }
 #ifdef WITH_EXTRA_OBJECT_VALIDATION
     if (!dvmIsValidObject(obj)) {
-        LOGE("Invalid object %p\n", obj);
+        LOGE("Invalid object %p", obj);
         dvmAbort();
     }
 #endif
 #ifndef NDEBUG
     if (obj->clazz == NULL || ((u4) obj->clazz) <= 65536) {
         /* probable heap corruption */
-        LOGE("Invalid object class %p (in %p)\n", obj->clazz, obj);
+        LOGE("Invalid object class %p (in %p)", obj->clazz, obj);
         dvmAbort();
     }
 #endif
@@ -595,7 +595,7 @@
             result = 1;                                                     \
         else                                                                \
             result = (_nanVal);                                             \
-        ILOGV("+ result=%d\n", result);                                     \
+        ILOGV("+ result=%d", result);                                       \
         SET_REGISTER(vdst, result);                                         \
     }                                                                       \
     FINISH(2);
@@ -1174,7 +1174,7 @@
             if (sfield == NULL)                                             \
                 GOTO_exceptionThrown();                                     \
             if (dvmDexGetResolvedField(methodClassDex, ref) == NULL) {      \
-                JIT_STUB_HACK(dvmJitEndTraceSelect(self,pc));                  \
+                JIT_STUB_HACK(dvmJitEndTraceSelect(self,pc));               \
             }                                                               \
         }                                                                   \
         SET_REGISTER##_regsize(vdst, dvmGetStaticField##_ftype(sfield));    \
@@ -1197,7 +1197,7 @@
             if (sfield == NULL)                                             \
                 GOTO_exceptionThrown();                                     \
             if (dvmDexGetResolvedField(methodClassDex, ref) == NULL) {      \
-                JIT_STUB_HACK(dvmJitEndTraceSelect(self,pc));                  \
+                JIT_STUB_HACK(dvmJitEndTraceSelect(self,pc));               \
             }                                                               \
         }                                                                   \
         SET_REGISTER##_regsize(vdst, dvmGetStaticField##_ftype(sfield));    \
@@ -1220,7 +1220,7 @@
             if (sfield == NULL)                                             \
                 GOTO_exceptionThrown();                                     \
             if (dvmDexGetResolvedField(methodClassDex, ref) == NULL) {      \
-                JIT_STUB_HACK(dvmJitEndTraceSelect(self,pc));                  \
+                JIT_STUB_HACK(dvmJitEndTraceSelect(self,pc));               \
             }                                                               \
         }                                                                   \
         dvmSetStaticField##_ftype(sfield, GET_REGISTER##_regsize(vdst));    \
@@ -1243,7 +1243,7 @@
             if (sfield == NULL)                                             \
                 GOTO_exceptionThrown();                                     \
             if (dvmDexGetResolvedField(methodClassDex, ref) == NULL) {      \
-                JIT_STUB_HACK(dvmJitEndTraceSelect(self,pc));                  \
+                JIT_STUB_HACK(dvmJitEndTraceSelect(self,pc));               \
             }                                                               \
         }                                                                   \
         dvmSetStaticField##_ftype(sfield, GET_REGISTER##_regsize(vdst));    \
diff --git a/vm/mterp/out/InterpC-armv7-a.cpp b/vm/mterp/out/InterpC-armv7-a.cpp
index 97a7a4c..5fe2149 100644
--- a/vm/mterp/out/InterpC-armv7-a.cpp
+++ b/vm/mterp/out/InterpC-armv7-a.cpp
@@ -102,7 +102,7 @@
         {                                                                   \
             char* desc;                                                     \
             desc = dexProtoCopyMethodDescriptor(&curMethod->prototype);     \
-            LOGE("Invalid branch %d at 0x%04x in %s.%s %s\n",               \
+            LOGE("Invalid branch %d at 0x%04x in %s.%s %s",                 \
                 myoff, (int) (pc - curMethod->insns),                       \
                 curMethod->clazz->descriptor, curMethod->name, desc);       \
             free(desc);                                                     \
@@ -127,11 +127,11 @@
 # define ILOG(_level, ...) do {                                             \
         char debugStrBuf[128];                                              \
         snprintf(debugStrBuf, sizeof(debugStrBuf), __VA_ARGS__);            \
-        if (curMethod != NULL)                                                 \
-            LOG(_level, LOG_TAG"i", "%-2d|%04x%s\n",                        \
+        if (curMethod != NULL)                                              \
+            LOG(_level, LOG_TAG"i", "%-2d|%04x%s",                          \
                 self->threadId, (int)(pc - curMethod->insns), debugStrBuf); \
         else                                                                \
-            LOG(_level, LOG_TAG"i", "%-2d|####%s\n",                        \
+            LOG(_level, LOG_TAG"i", "%-2d|####%s",                          \
                 self->threadId, debugStrBuf);                               \
     } while(false)
 void dvmDumpRegs(const Method* method, const u4* framePtr, bool inOnly);
@@ -321,14 +321,14 @@
     }
 #ifdef WITH_EXTRA_OBJECT_VALIDATION
     if (!dvmIsValidObject(obj)) {
-        LOGE("Invalid object %p\n", obj);
+        LOGE("Invalid object %p", obj);
         dvmAbort();
     }
 #endif
 #ifndef NDEBUG
     if (obj->clazz == NULL || ((u4) obj->clazz) <= 65536) {
         /* probable heap corruption */
-        LOGE("Invalid object class %p (in %p)\n", obj->clazz, obj);
+        LOGE("Invalid object class %p (in %p)", obj->clazz, obj);
         dvmAbort();
     }
 #endif
@@ -353,14 +353,14 @@
     }
 #ifdef WITH_EXTRA_OBJECT_VALIDATION
     if (!dvmIsValidObject(obj)) {
-        LOGE("Invalid object %p\n", obj);
+        LOGE("Invalid object %p", obj);
         dvmAbort();
     }
 #endif
 #ifndef NDEBUG
     if (obj->clazz == NULL || ((u4) obj->clazz) <= 65536) {
         /* probable heap corruption */
-        LOGE("Invalid object class %p (in %p)\n", obj->clazz, obj);
+        LOGE("Invalid object class %p (in %p)", obj->clazz, obj);
         dvmAbort();
     }
 #endif
@@ -595,7 +595,7 @@
             result = 1;                                                     \
         else                                                                \
             result = (_nanVal);                                             \
-        ILOGV("+ result=%d\n", result);                                     \
+        ILOGV("+ result=%d", result);                                       \
         SET_REGISTER(vdst, result);                                         \
     }                                                                       \
     FINISH(2);
@@ -1174,7 +1174,7 @@
             if (sfield == NULL)                                             \
                 GOTO_exceptionThrown();                                     \
             if (dvmDexGetResolvedField(methodClassDex, ref) == NULL) {      \
-                JIT_STUB_HACK(dvmJitEndTraceSelect(self,pc));                  \
+                JIT_STUB_HACK(dvmJitEndTraceSelect(self,pc));               \
             }                                                               \
         }                                                                   \
         SET_REGISTER##_regsize(vdst, dvmGetStaticField##_ftype(sfield));    \
@@ -1197,7 +1197,7 @@
             if (sfield == NULL)                                             \
                 GOTO_exceptionThrown();                                     \
             if (dvmDexGetResolvedField(methodClassDex, ref) == NULL) {      \
-                JIT_STUB_HACK(dvmJitEndTraceSelect(self,pc));                  \
+                JIT_STUB_HACK(dvmJitEndTraceSelect(self,pc));               \
             }                                                               \
         }                                                                   \
         SET_REGISTER##_regsize(vdst, dvmGetStaticField##_ftype(sfield));    \
@@ -1220,7 +1220,7 @@
             if (sfield == NULL)                                             \
                 GOTO_exceptionThrown();                                     \
             if (dvmDexGetResolvedField(methodClassDex, ref) == NULL) {      \
-                JIT_STUB_HACK(dvmJitEndTraceSelect(self,pc));                  \
+                JIT_STUB_HACK(dvmJitEndTraceSelect(self,pc));               \
             }                                                               \
         }                                                                   \
         dvmSetStaticField##_ftype(sfield, GET_REGISTER##_regsize(vdst));    \
@@ -1243,7 +1243,7 @@
             if (sfield == NULL)                                             \
                 GOTO_exceptionThrown();                                     \
             if (dvmDexGetResolvedField(methodClassDex, ref) == NULL) {      \
-                JIT_STUB_HACK(dvmJitEndTraceSelect(self,pc));                  \
+                JIT_STUB_HACK(dvmJitEndTraceSelect(self,pc));               \
             }                                                               \
         }                                                                   \
         dvmSetStaticField##_ftype(sfield, GET_REGISTER##_regsize(vdst));    \
diff --git a/vm/mterp/out/InterpC-portable.cpp b/vm/mterp/out/InterpC-portable.cpp
index b389f3f..a43fa8a 100644
--- a/vm/mterp/out/InterpC-portable.cpp
+++ b/vm/mterp/out/InterpC-portable.cpp
@@ -102,7 +102,7 @@
         {                                                                   \
             char* desc;                                                     \
             desc = dexProtoCopyMethodDescriptor(&curMethod->prototype);     \
-            LOGE("Invalid branch %d at 0x%04x in %s.%s %s\n",               \
+            LOGE("Invalid branch %d at 0x%04x in %s.%s %s",                 \
                 myoff, (int) (pc - curMethod->insns),                       \
                 curMethod->clazz->descriptor, curMethod->name, desc);       \
             free(desc);                                                     \
@@ -127,11 +127,11 @@
 # define ILOG(_level, ...) do {                                             \
         char debugStrBuf[128];                                              \
         snprintf(debugStrBuf, sizeof(debugStrBuf), __VA_ARGS__);            \
-        if (curMethod != NULL)                                                 \
-            LOG(_level, LOG_TAG"i", "%-2d|%04x%s\n",                        \
+        if (curMethod != NULL)                                              \
+            LOG(_level, LOG_TAG"i", "%-2d|%04x%s",                          \
                 self->threadId, (int)(pc - curMethod->insns), debugStrBuf); \
         else                                                                \
-            LOG(_level, LOG_TAG"i", "%-2d|####%s\n",                        \
+            LOG(_level, LOG_TAG"i", "%-2d|####%s",                          \
                 self->threadId, debugStrBuf);                               \
     } while(false)
 void dvmDumpRegs(const Method* method, const u4* framePtr, bool inOnly);
@@ -321,14 +321,14 @@
     }
 #ifdef WITH_EXTRA_OBJECT_VALIDATION
     if (!dvmIsValidObject(obj)) {
-        LOGE("Invalid object %p\n", obj);
+        LOGE("Invalid object %p", obj);
         dvmAbort();
     }
 #endif
 #ifndef NDEBUG
     if (obj->clazz == NULL || ((u4) obj->clazz) <= 65536) {
         /* probable heap corruption */
-        LOGE("Invalid object class %p (in %p)\n", obj->clazz, obj);
+        LOGE("Invalid object class %p (in %p)", obj->clazz, obj);
         dvmAbort();
     }
 #endif
@@ -353,14 +353,14 @@
     }
 #ifdef WITH_EXTRA_OBJECT_VALIDATION
     if (!dvmIsValidObject(obj)) {
-        LOGE("Invalid object %p\n", obj);
+        LOGE("Invalid object %p", obj);
         dvmAbort();
     }
 #endif
 #ifndef NDEBUG
     if (obj->clazz == NULL || ((u4) obj->clazz) <= 65536) {
         /* probable heap corruption */
-        LOGE("Invalid object class %p (in %p)\n", obj->clazz, obj);
+        LOGE("Invalid object class %p (in %p)", obj->clazz, obj);
         dvmAbort();
     }
 #endif
@@ -547,7 +547,7 @@
             result = 1;                                                     \
         else                                                                \
             result = (_nanVal);                                             \
-        ILOGV("+ result=%d\n", result);                                     \
+        ILOGV("+ result=%d", result);                                       \
         SET_REGISTER(vdst, result);                                         \
     }                                                                       \
     FINISH(2);
@@ -1126,7 +1126,7 @@
             if (sfield == NULL)                                             \
                 GOTO_exceptionThrown();                                     \
             if (dvmDexGetResolvedField(methodClassDex, ref) == NULL) {      \
-                JIT_STUB_HACK(dvmJitEndTraceSelect(self,pc));                  \
+                JIT_STUB_HACK(dvmJitEndTraceSelect(self,pc));               \
             }                                                               \
         }                                                                   \
         SET_REGISTER##_regsize(vdst, dvmGetStaticField##_ftype(sfield));    \
@@ -1149,7 +1149,7 @@
             if (sfield == NULL)                                             \
                 GOTO_exceptionThrown();                                     \
             if (dvmDexGetResolvedField(methodClassDex, ref) == NULL) {      \
-                JIT_STUB_HACK(dvmJitEndTraceSelect(self,pc));                  \
+                JIT_STUB_HACK(dvmJitEndTraceSelect(self,pc));               \
             }                                                               \
         }                                                                   \
         SET_REGISTER##_regsize(vdst, dvmGetStaticField##_ftype(sfield));    \
@@ -1172,7 +1172,7 @@
             if (sfield == NULL)                                             \
                 GOTO_exceptionThrown();                                     \
             if (dvmDexGetResolvedField(methodClassDex, ref) == NULL) {      \
-                JIT_STUB_HACK(dvmJitEndTraceSelect(self,pc));                  \
+                JIT_STUB_HACK(dvmJitEndTraceSelect(self,pc));               \
             }                                                               \
         }                                                                   \
         dvmSetStaticField##_ftype(sfield, GET_REGISTER##_regsize(vdst));    \
@@ -1195,7 +1195,7 @@
             if (sfield == NULL)                                             \
                 GOTO_exceptionThrown();                                     \
             if (dvmDexGetResolvedField(methodClassDex, ref) == NULL) {      \
-                JIT_STUB_HACK(dvmJitEndTraceSelect(self,pc));                  \
+                JIT_STUB_HACK(dvmJitEndTraceSelect(self,pc));               \
             }                                                               \
         }                                                                   \
         dvmSetStaticField##_ftype(sfield, GET_REGISTER##_regsize(vdst));    \
@@ -1243,7 +1243,7 @@
 
     methodClassDex = curMethod->clazz->pDvmDex;
 
-    LOGVV("threadid=%d: %s.%s pc=0x%x fp=%p\n",
+    LOGVV("threadid=%d: %s.%s pc=0x%x fp=%p",
         self->threadId, curMethod->clazz->descriptor, curMethod->name,
         pc - curMethod->insns, fp);
 
@@ -1623,7 +1623,7 @@
         obj = (Object*)GET_REGISTER(vsrc1);
         if (!checkForNullExportPC(obj, fp, pc))
             GOTO_exceptionThrown();
-        ILOGV("+ locking %p %s\n", obj, obj->clazz->descriptor);
+        ILOGV("+ locking %p %s", obj, obj->clazz->descriptor);
         EXPORT_PC();    /* need for precise GC */
         dvmLockObject(self, obj);
     }
@@ -1652,7 +1652,7 @@
             ADJUST_PC(1);           /* monitor-exit width is 1 */
             GOTO_exceptionThrown();
         }
-        ILOGV("+ unlocking %p %s\n", obj, obj->clazz->descriptor);
+        ILOGV("+ unlocking %p %s", obj, obj->clazz->descriptor);
         if (!dvmUnlockObject(self, obj)) {
             assert(dvmCheckException(self));
             ADJUST_PC(1);
@@ -1887,7 +1887,7 @@
         obj = (Object*) GET_REGISTER(vsrc1);
         if (!checkForNull(obj)) {
             /* will throw a null pointer exception */
-            LOGVV("Bad exception\n");
+            LOGVV("Bad exception");
         } else {
             /* use the requested exception */
             dvmSetException(self, obj);
@@ -1966,7 +1966,7 @@
         testVal = GET_REGISTER(vsrc1);
 
         offset = dvmInterpHandlePackedSwitch(switchData, testVal);
-        ILOGV("> branch taken (0x%04x)\n", offset);
+        ILOGV("> branch taken (0x%04x)", offset);
         if (offset <= 0)  /* uncommon */
             PERIODIC_CHECKS(offset);
         FINISH(offset);
@@ -1997,7 +1997,7 @@
         testVal = GET_REGISTER(vsrc1);
 
         offset = dvmInterpHandleSparseSwitch(switchData, testVal);
-        ILOGV("> branch taken (0x%04x)\n", offset);
+        ILOGV("> branch taken (0x%04x)", offset);
         if (offset <= 0)  /* uncommon */
             PERIODIC_CHECKS(offset);
         FINISH(offset);
@@ -2157,7 +2157,7 @@
             if (!checkForNull(obj))
                 GOTO_exceptionThrown();
             if (!dvmCanPutArrayElement(obj->clazz, arrayObj->clazz)) {
-                LOGV("Can't put a '%s'(%p) into array type='%s'(%p)\n",
+                LOGV("Can't put a '%s'(%p) into array type='%s'(%p)",
                     obj->clazz->descriptor, obj,
                     arrayObj->obj.clazz->descriptor, arrayObj);
                 dvmThrowArrayStoreExceptionIncompatibleElement(obj->clazz, arrayObj->clazz);
@@ -2900,7 +2900,7 @@
          * the thread resumed.
          */
         u1 originalOpcode = dvmGetOriginalOpcode(pc);
-        LOGV("+++ break 0x%02x (0x%04x -> 0x%04x)\n", originalOpcode, inst,
+        LOGV("+++ break 0x%02x (0x%04x -> 0x%04x)", originalOpcode, inst,
             INST_REPLACE_OP(inst, originalOpcode));
         inst = INST_REPLACE_OP(inst, originalOpcode);
         FINISH_BKPT(originalOpcode);
@@ -4265,7 +4265,7 @@
     /*
      * In portable interp, most unused opcodes will fall through to here.
      */
-    LOGE("unknown opcode 0x%04x\n", inst);
+    LOGE("unknown opcode 0x%04x", inst);
     dvmAbort();
     FINISH(1);
 OP_END
@@ -4427,7 +4427,7 @@
         /*
          * Create an array of the specified type.
          */
-        LOGVV("+++ filled-new-array type is '%s'\n", arrayClass->descriptor);
+        LOGVV("+++ filled-new-array type is '%s'", arrayClass->descriptor);
         typeCh = arrayClass->descriptor[1];
         if (typeCh == 'D' || typeCh == 'J') {
             /* category 2 primitives not allowed */
@@ -4435,7 +4435,7 @@
             GOTO_exceptionThrown();
         } else if (typeCh != 'L' && typeCh != '[' && typeCh != 'I') {
             /* TODO: requires multiple "fill in" loops with different widths */
-            LOGE("non-int primitives not implemented\n");
+            LOGE("non-int primitives not implemented");
             dvmThrowInternalError(
                 "filled-new-array not implemented for anything but 'int'");
             GOTO_exceptionThrown();
@@ -4525,7 +4525,7 @@
         if (baseMethod == NULL) {
             baseMethod = dvmResolveMethod(curMethod->clazz, ref,METHOD_VIRTUAL);
             if (baseMethod == NULL) {
-                ILOGV("+ unknown method or access denied\n");
+                ILOGV("+ unknown method or access denied");
                 GOTO_exceptionThrown();
             }
         }
@@ -4561,7 +4561,7 @@
             methodToCall->nativeFunc != NULL);
 #endif
 
-        LOGVV("+++ base=%s.%s virtual[%d]=%s.%s\n",
+        LOGVV("+++ base=%s.%s virtual[%d]=%s.%s",
             baseMethod->clazz->descriptor, baseMethod->name,
             (u4) baseMethod->methodIndex,
             methodToCall->clazz->descriptor, methodToCall->name);
@@ -4569,7 +4569,7 @@
 
 #if 0
         if (vsrc1 != methodToCall->insSize) {
-            LOGW("WRONG METHOD: base=%s.%s virtual[%d]=%s.%s\n",
+            LOGW("WRONG METHOD: base=%s.%s virtual[%d]=%s.%s",
                 baseMethod->clazz->descriptor, baseMethod->name,
                 (u4) baseMethod->methodIndex,
                 methodToCall->clazz->descriptor, methodToCall->name);
@@ -4629,7 +4629,7 @@
         if (baseMethod == NULL) {
             baseMethod = dvmResolveMethod(curMethod->clazz, ref,METHOD_VIRTUAL);
             if (baseMethod == NULL) {
-                ILOGV("+ unknown method or access denied\n");
+                ILOGV("+ unknown method or access denied");
                 GOTO_exceptionThrown();
             }
         }
@@ -4662,7 +4662,7 @@
         assert(!dvmIsAbstractMethod(methodToCall) ||
             methodToCall->nativeFunc != NULL);
 #endif
-        LOGVV("+++ base=%s.%s super-virtual=%s.%s\n",
+        LOGVV("+++ base=%s.%s super-virtual=%s.%s",
             baseMethod->clazz->descriptor, baseMethod->name,
             methodToCall->clazz->descriptor, methodToCall->name);
         assert(methodToCall != NULL);
@@ -4771,7 +4771,7 @@
             methodToCall = dvmResolveMethod(curMethod->clazz, ref,
                             METHOD_DIRECT);
             if (methodToCall == NULL) {
-                ILOGV("+ unknown direct method\n");     // should be impossible
+                ILOGV("+ unknown direct method");     // should be impossible
                 GOTO_exceptionThrown();
             }
         }
@@ -4806,7 +4806,7 @@
     if (methodToCall == NULL) {
         methodToCall = dvmResolveMethod(curMethod->clazz, ref, METHOD_STATIC);
         if (methodToCall == NULL) {
-            ILOGV("+ unknown method\n");
+            ILOGV("+ unknown method");
             GOTO_exceptionThrown();
         }
 
@@ -4877,7 +4877,7 @@
             methodToCall->nativeFunc != NULL);
 #endif
 
-        LOGVV("+++ virtual[%d]=%s.%s\n",
+        LOGVV("+++ virtual[%d]=%s.%s",
             ref, methodToCall->clazz->descriptor, methodToCall->name);
         assert(methodToCall != NULL);
 
@@ -4937,7 +4937,7 @@
         assert(!dvmIsAbstractMethod(methodToCall) ||
             methodToCall->nativeFunc != NULL);
 #endif
-        LOGVV("+++ super-virtual[%d]=%s.%s\n",
+        LOGVV("+++ super-virtual[%d]=%s.%s",
             ref, methodToCall->clazz->descriptor, methodToCall->name);
         assert(methodToCall != NULL);
         GOTO_invokeMethod(methodCallRange, methodToCall, vsrc1, vdst);
@@ -4985,7 +4985,7 @@
 
         if (dvmIsBreakFrame(fp)) {
             /* bail without popping the method frame from stack */
-            LOGVV("+++ returned into break frame\n");
+            LOGVV("+++ returned into break frame");
             GOTO_bail();
         }
 
@@ -5006,7 +5006,7 @@
         {
             FINISH(3);
         } else {
-            //LOGE("Unknown invoke instr %02x at %d\n",
+            //LOGE("Unknown invoke instr %02x at %d",
             //    invokeInstr, (int) (pc - curMethod->insns));
             assert(false);
         }
@@ -5038,7 +5038,7 @@
         dvmAddTrackedAlloc(exception, self);
         dvmClearException(self);
 
-        LOGV("Handling exception %s at %s:%d\n",
+        LOGV("Handling exception %s at %s:%d",
             exception->clazz->descriptor, curMethod->name,
             dvmLineNumFromPC(curMethod, pc - curMethod->insns));
 
@@ -5106,7 +5106,7 @@
         if (catchRelPc < 0) {
             /* falling through to JNI code or off the bottom of the stack */
 #if DVM_SHOW_EXCEPTION >= 2
-            LOGD("Exception %s from %s:%d not caught locally\n",
+            LOGD("Exception %s from %s:%d not caught locally",
                 exception->clazz->descriptor, dvmGetMethodSourceFile(curMethod),
                 dvmLineNumFromPC(curMethod, pc - curMethod->insns));
 #endif
@@ -5118,7 +5118,7 @@
 #if DVM_SHOW_EXCEPTION >= 3
         {
             const Method* catchMethod = SAVEAREA_FROM_FP(fp)->method;
-            LOGD("Exception %s thrown from %s:%d to %s:%d\n",
+            LOGD("Exception %s thrown from %s:%d to %s:%d",
                 exception->clazz->descriptor, dvmGetMethodSourceFile(curMethod),
                 dvmLineNumFromPC(curMethod, pc - curMethod->insns),
                 dvmGetMethodSourceFile(catchMethod),
@@ -5268,7 +5268,7 @@
             bottom = (u1*) newSaveArea - methodToCall->outsSize * sizeof(u4);
             if (bottom < self->interpStackEnd) {
                 /* stack overflow */
-                LOGV("Stack overflow on method call (start=%p end=%p newBot=%p(%d) size=%d '%s')\n",
+                LOGV("Stack overflow on method call (start=%p end=%p newBot=%p(%d) size=%d '%s')",
                     self->interpStackStart, self->interpStackEnd, bottom,
                     (u1*) fp - bottom, self->interpStackSize,
                     methodToCall->name);
@@ -5276,7 +5276,7 @@
                 assert(dvmCheckException(self));
                 GOTO_exceptionThrown();
             }
-            //LOGD("+++ fp=%p newFp=%p newSave=%p bottom=%p\n",
+            //LOGD("+++ fp=%p newFp=%p newSave=%p bottom=%p",
             //    fp, newFp, newSaveArea, bottom);
         }
 
@@ -5367,7 +5367,7 @@
              * it, jump to our local exception handling.
              */
             if (dvmCheckException(self)) {
-                LOGV("Exception thrown by/below native code\n");
+                LOGV("Exception thrown by/below native code");
                 GOTO_exceptionThrown();
             }
 
@@ -5383,7 +5383,7 @@
             {
                 FINISH(3);
             } else {
-                //LOGE("Unknown invoke instr %02x at %d\n",
+                //LOGE("Unknown invoke instr %02x at %d",
                 //    invokeInstr, (int) (pc - curMethod->insns));
                 assert(false);
             }
diff --git a/vm/mterp/out/InterpC-x86-atom.cpp b/vm/mterp/out/InterpC-x86-atom.cpp
index 5631917..2ace55f 100644
--- a/vm/mterp/out/InterpC-x86-atom.cpp
+++ b/vm/mterp/out/InterpC-x86-atom.cpp
@@ -102,7 +102,7 @@
         {                                                                   \
             char* desc;                                                     \
             desc = dexProtoCopyMethodDescriptor(&curMethod->prototype);     \
-            LOGE("Invalid branch %d at 0x%04x in %s.%s %s\n",               \
+            LOGE("Invalid branch %d at 0x%04x in %s.%s %s",                 \
                 myoff, (int) (pc - curMethod->insns),                       \
                 curMethod->clazz->descriptor, curMethod->name, desc);       \
             free(desc);                                                     \
@@ -127,11 +127,11 @@
 # define ILOG(_level, ...) do {                                             \
         char debugStrBuf[128];                                              \
         snprintf(debugStrBuf, sizeof(debugStrBuf), __VA_ARGS__);            \
-        if (curMethod != NULL)                                                 \
-            LOG(_level, LOG_TAG"i", "%-2d|%04x%s\n",                        \
+        if (curMethod != NULL)                                              \
+            LOG(_level, LOG_TAG"i", "%-2d|%04x%s",                          \
                 self->threadId, (int)(pc - curMethod->insns), debugStrBuf); \
         else                                                                \
-            LOG(_level, LOG_TAG"i", "%-2d|####%s\n",                        \
+            LOG(_level, LOG_TAG"i", "%-2d|####%s",                          \
                 self->threadId, debugStrBuf);                               \
     } while(false)
 void dvmDumpRegs(const Method* method, const u4* framePtr, bool inOnly);
@@ -321,14 +321,14 @@
     }
 #ifdef WITH_EXTRA_OBJECT_VALIDATION
     if (!dvmIsValidObject(obj)) {
-        LOGE("Invalid object %p\n", obj);
+        LOGE("Invalid object %p", obj);
         dvmAbort();
     }
 #endif
 #ifndef NDEBUG
     if (obj->clazz == NULL || ((u4) obj->clazz) <= 65536) {
         /* probable heap corruption */
-        LOGE("Invalid object class %p (in %p)\n", obj->clazz, obj);
+        LOGE("Invalid object class %p (in %p)", obj->clazz, obj);
         dvmAbort();
     }
 #endif
@@ -353,14 +353,14 @@
     }
 #ifdef WITH_EXTRA_OBJECT_VALIDATION
     if (!dvmIsValidObject(obj)) {
-        LOGE("Invalid object %p\n", obj);
+        LOGE("Invalid object %p", obj);
         dvmAbort();
     }
 #endif
 #ifndef NDEBUG
     if (obj->clazz == NULL || ((u4) obj->clazz) <= 65536) {
         /* probable heap corruption */
-        LOGE("Invalid object class %p (in %p)\n", obj->clazz, obj);
+        LOGE("Invalid object class %p (in %p)", obj->clazz, obj);
         dvmAbort();
     }
 #endif
@@ -595,7 +595,7 @@
             result = 1;                                                     \
         else                                                                \
             result = (_nanVal);                                             \
-        ILOGV("+ result=%d\n", result);                                     \
+        ILOGV("+ result=%d", result);                                       \
         SET_REGISTER(vdst, result);                                         \
     }                                                                       \
     FINISH(2);
@@ -1174,7 +1174,7 @@
             if (sfield == NULL)                                             \
                 GOTO_exceptionThrown();                                     \
             if (dvmDexGetResolvedField(methodClassDex, ref) == NULL) {      \
-                JIT_STUB_HACK(dvmJitEndTraceSelect(self,pc));                  \
+                JIT_STUB_HACK(dvmJitEndTraceSelect(self,pc));               \
             }                                                               \
         }                                                                   \
         SET_REGISTER##_regsize(vdst, dvmGetStaticField##_ftype(sfield));    \
@@ -1197,7 +1197,7 @@
             if (sfield == NULL)                                             \
                 GOTO_exceptionThrown();                                     \
             if (dvmDexGetResolvedField(methodClassDex, ref) == NULL) {      \
-                JIT_STUB_HACK(dvmJitEndTraceSelect(self,pc));                  \
+                JIT_STUB_HACK(dvmJitEndTraceSelect(self,pc));               \
             }                                                               \
         }                                                                   \
         SET_REGISTER##_regsize(vdst, dvmGetStaticField##_ftype(sfield));    \
@@ -1220,7 +1220,7 @@
             if (sfield == NULL)                                             \
                 GOTO_exceptionThrown();                                     \
             if (dvmDexGetResolvedField(methodClassDex, ref) == NULL) {      \
-                JIT_STUB_HACK(dvmJitEndTraceSelect(self,pc));                  \
+                JIT_STUB_HACK(dvmJitEndTraceSelect(self,pc));               \
             }                                                               \
         }                                                                   \
         dvmSetStaticField##_ftype(sfield, GET_REGISTER##_regsize(vdst));    \
@@ -1243,7 +1243,7 @@
             if (sfield == NULL)                                             \
                 GOTO_exceptionThrown();                                     \
             if (dvmDexGetResolvedField(methodClassDex, ref) == NULL) {      \
-                JIT_STUB_HACK(dvmJitEndTraceSelect(self,pc));                  \
+                JIT_STUB_HACK(dvmJitEndTraceSelect(self,pc));               \
             }                                                               \
         }                                                                   \
         dvmSetStaticField##_ftype(sfield, GET_REGISTER##_regsize(vdst));    \
@@ -1307,7 +1307,7 @@
          * the thread resumed.
          */
         u1 originalOpcode = dvmGetOriginalOpcode(pc);
-        LOGV("+++ break 0x%02x (0x%04x -> 0x%04x)\n", originalOpcode, inst,
+        LOGV("+++ break 0x%02x (0x%04x -> 0x%04x)", originalOpcode, inst,
             INST_REPLACE_OP(inst, originalOpcode));
         inst = INST_REPLACE_OP(inst, originalOpcode);
         FINISH_BKPT(originalOpcode);
@@ -1560,7 +1560,7 @@
         /*
          * Create an array of the specified type.
          */
-        LOGVV("+++ filled-new-array type is '%s'\n", arrayClass->descriptor);
+        LOGVV("+++ filled-new-array type is '%s'", arrayClass->descriptor);
         typeCh = arrayClass->descriptor[1];
         if (typeCh == 'D' || typeCh == 'J') {
             /* category 2 primitives not allowed */
@@ -1568,7 +1568,7 @@
             GOTO_exceptionThrown();
         } else if (typeCh != 'L' && typeCh != '[' && typeCh != 'I') {
             /* TODO: requires multiple "fill in" loops with different widths */
-            LOGE("non-int primitives not implemented\n");
+            LOGE("non-int primitives not implemented");
             dvmThrowInternalError(
                 "filled-new-array not implemented for anything but 'int'");
             GOTO_exceptionThrown();
@@ -1658,7 +1658,7 @@
         if (baseMethod == NULL) {
             baseMethod = dvmResolveMethod(curMethod->clazz, ref,METHOD_VIRTUAL);
             if (baseMethod == NULL) {
-                ILOGV("+ unknown method or access denied\n");
+                ILOGV("+ unknown method or access denied");
                 GOTO_exceptionThrown();
             }
         }
@@ -1694,7 +1694,7 @@
             methodToCall->nativeFunc != NULL);
 #endif
 
-        LOGVV("+++ base=%s.%s virtual[%d]=%s.%s\n",
+        LOGVV("+++ base=%s.%s virtual[%d]=%s.%s",
             baseMethod->clazz->descriptor, baseMethod->name,
             (u4) baseMethod->methodIndex,
             methodToCall->clazz->descriptor, methodToCall->name);
@@ -1702,7 +1702,7 @@
 
 #if 0
         if (vsrc1 != methodToCall->insSize) {
-            LOGW("WRONG METHOD: base=%s.%s virtual[%d]=%s.%s\n",
+            LOGW("WRONG METHOD: base=%s.%s virtual[%d]=%s.%s",
                 baseMethod->clazz->descriptor, baseMethod->name,
                 (u4) baseMethod->methodIndex,
                 methodToCall->clazz->descriptor, methodToCall->name);
@@ -1762,7 +1762,7 @@
         if (baseMethod == NULL) {
             baseMethod = dvmResolveMethod(curMethod->clazz, ref,METHOD_VIRTUAL);
             if (baseMethod == NULL) {
-                ILOGV("+ unknown method or access denied\n");
+                ILOGV("+ unknown method or access denied");
                 GOTO_exceptionThrown();
             }
         }
@@ -1795,7 +1795,7 @@
         assert(!dvmIsAbstractMethod(methodToCall) ||
             methodToCall->nativeFunc != NULL);
 #endif
-        LOGVV("+++ base=%s.%s super-virtual=%s.%s\n",
+        LOGVV("+++ base=%s.%s super-virtual=%s.%s",
             baseMethod->clazz->descriptor, baseMethod->name,
             methodToCall->clazz->descriptor, methodToCall->name);
         assert(methodToCall != NULL);
@@ -1904,7 +1904,7 @@
             methodToCall = dvmResolveMethod(curMethod->clazz, ref,
                             METHOD_DIRECT);
             if (methodToCall == NULL) {
-                ILOGV("+ unknown direct method\n");     // should be impossible
+                ILOGV("+ unknown direct method");     // should be impossible
                 GOTO_exceptionThrown();
             }
         }
@@ -1939,7 +1939,7 @@
     if (methodToCall == NULL) {
         methodToCall = dvmResolveMethod(curMethod->clazz, ref, METHOD_STATIC);
         if (methodToCall == NULL) {
-            ILOGV("+ unknown method\n");
+            ILOGV("+ unknown method");
             GOTO_exceptionThrown();
         }
 
@@ -2010,7 +2010,7 @@
             methodToCall->nativeFunc != NULL);
 #endif
 
-        LOGVV("+++ virtual[%d]=%s.%s\n",
+        LOGVV("+++ virtual[%d]=%s.%s",
             ref, methodToCall->clazz->descriptor, methodToCall->name);
         assert(methodToCall != NULL);
 
@@ -2070,7 +2070,7 @@
         assert(!dvmIsAbstractMethod(methodToCall) ||
             methodToCall->nativeFunc != NULL);
 #endif
-        LOGVV("+++ super-virtual[%d]=%s.%s\n",
+        LOGVV("+++ super-virtual[%d]=%s.%s",
             ref, methodToCall->clazz->descriptor, methodToCall->name);
         assert(methodToCall != NULL);
         GOTO_invokeMethod(methodCallRange, methodToCall, vsrc1, vdst);
@@ -2118,7 +2118,7 @@
 
         if (dvmIsBreakFrame(fp)) {
             /* bail without popping the method frame from stack */
-            LOGVV("+++ returned into break frame\n");
+            LOGVV("+++ returned into break frame");
             GOTO_bail();
         }
 
@@ -2139,7 +2139,7 @@
         {
             FINISH(3);
         } else {
-            //LOGE("Unknown invoke instr %02x at %d\n",
+            //LOGE("Unknown invoke instr %02x at %d",
             //    invokeInstr, (int) (pc - curMethod->insns));
             assert(false);
         }
@@ -2171,7 +2171,7 @@
         dvmAddTrackedAlloc(exception, self);
         dvmClearException(self);
 
-        LOGV("Handling exception %s at %s:%d\n",
+        LOGV("Handling exception %s at %s:%d",
             exception->clazz->descriptor, curMethod->name,
             dvmLineNumFromPC(curMethod, pc - curMethod->insns));
 
@@ -2239,7 +2239,7 @@
         if (catchRelPc < 0) {
             /* falling through to JNI code or off the bottom of the stack */
 #if DVM_SHOW_EXCEPTION >= 2
-            LOGD("Exception %s from %s:%d not caught locally\n",
+            LOGD("Exception %s from %s:%d not caught locally",
                 exception->clazz->descriptor, dvmGetMethodSourceFile(curMethod),
                 dvmLineNumFromPC(curMethod, pc - curMethod->insns));
 #endif
@@ -2251,7 +2251,7 @@
 #if DVM_SHOW_EXCEPTION >= 3
         {
             const Method* catchMethod = SAVEAREA_FROM_FP(fp)->method;
-            LOGD("Exception %s thrown from %s:%d to %s:%d\n",
+            LOGD("Exception %s thrown from %s:%d to %s:%d",
                 exception->clazz->descriptor, dvmGetMethodSourceFile(curMethod),
                 dvmLineNumFromPC(curMethod, pc - curMethod->insns),
                 dvmGetMethodSourceFile(catchMethod),
@@ -2401,7 +2401,7 @@
             bottom = (u1*) newSaveArea - methodToCall->outsSize * sizeof(u4);
             if (bottom < self->interpStackEnd) {
                 /* stack overflow */
-                LOGV("Stack overflow on method call (start=%p end=%p newBot=%p(%d) size=%d '%s')\n",
+                LOGV("Stack overflow on method call (start=%p end=%p newBot=%p(%d) size=%d '%s')",
                     self->interpStackStart, self->interpStackEnd, bottom,
                     (u1*) fp - bottom, self->interpStackSize,
                     methodToCall->name);
@@ -2409,7 +2409,7 @@
                 assert(dvmCheckException(self));
                 GOTO_exceptionThrown();
             }
-            //LOGD("+++ fp=%p newFp=%p newSave=%p bottom=%p\n",
+            //LOGD("+++ fp=%p newFp=%p newSave=%p bottom=%p",
             //    fp, newFp, newSaveArea, bottom);
         }
 
@@ -2500,7 +2500,7 @@
              * it, jump to our local exception handling.
              */
             if (dvmCheckException(self)) {
-                LOGV("Exception thrown by/below native code\n");
+                LOGV("Exception thrown by/below native code");
                 GOTO_exceptionThrown();
             }
 
@@ -2516,7 +2516,7 @@
             {
                 FINISH(3);
             } else {
-                //LOGE("Unknown invoke instr %02x at %d\n",
+                //LOGE("Unknown invoke instr %02x at %d",
                 //    invokeInstr, (int) (pc - curMethod->insns));
                 assert(false);
             }
diff --git a/vm/mterp/out/InterpC-x86.cpp b/vm/mterp/out/InterpC-x86.cpp
index 1d90ae7..80cae6f 100644
--- a/vm/mterp/out/InterpC-x86.cpp
+++ b/vm/mterp/out/InterpC-x86.cpp
@@ -102,7 +102,7 @@
         {                                                                   \
             char* desc;                                                     \
             desc = dexProtoCopyMethodDescriptor(&curMethod->prototype);     \
-            LOGE("Invalid branch %d at 0x%04x in %s.%s %s\n",               \
+            LOGE("Invalid branch %d at 0x%04x in %s.%s %s",                 \
                 myoff, (int) (pc - curMethod->insns),                       \
                 curMethod->clazz->descriptor, curMethod->name, desc);       \
             free(desc);                                                     \
@@ -127,11 +127,11 @@
 # define ILOG(_level, ...) do {                                             \
         char debugStrBuf[128];                                              \
         snprintf(debugStrBuf, sizeof(debugStrBuf), __VA_ARGS__);            \
-        if (curMethod != NULL)                                                 \
-            LOG(_level, LOG_TAG"i", "%-2d|%04x%s\n",                        \
+        if (curMethod != NULL)                                              \
+            LOG(_level, LOG_TAG"i", "%-2d|%04x%s",                          \
                 self->threadId, (int)(pc - curMethod->insns), debugStrBuf); \
         else                                                                \
-            LOG(_level, LOG_TAG"i", "%-2d|####%s\n",                        \
+            LOG(_level, LOG_TAG"i", "%-2d|####%s",                          \
                 self->threadId, debugStrBuf);                               \
     } while(false)
 void dvmDumpRegs(const Method* method, const u4* framePtr, bool inOnly);
@@ -321,14 +321,14 @@
     }
 #ifdef WITH_EXTRA_OBJECT_VALIDATION
     if (!dvmIsValidObject(obj)) {
-        LOGE("Invalid object %p\n", obj);
+        LOGE("Invalid object %p", obj);
         dvmAbort();
     }
 #endif
 #ifndef NDEBUG
     if (obj->clazz == NULL || ((u4) obj->clazz) <= 65536) {
         /* probable heap corruption */
-        LOGE("Invalid object class %p (in %p)\n", obj->clazz, obj);
+        LOGE("Invalid object class %p (in %p)", obj->clazz, obj);
         dvmAbort();
     }
 #endif
@@ -353,14 +353,14 @@
     }
 #ifdef WITH_EXTRA_OBJECT_VALIDATION
     if (!dvmIsValidObject(obj)) {
-        LOGE("Invalid object %p\n", obj);
+        LOGE("Invalid object %p", obj);
         dvmAbort();
     }
 #endif
 #ifndef NDEBUG
     if (obj->clazz == NULL || ((u4) obj->clazz) <= 65536) {
         /* probable heap corruption */
-        LOGE("Invalid object class %p (in %p)\n", obj->clazz, obj);
+        LOGE("Invalid object class %p (in %p)", obj->clazz, obj);
         dvmAbort();
     }
 #endif
@@ -595,7 +595,7 @@
             result = 1;                                                     \
         else                                                                \
             result = (_nanVal);                                             \
-        ILOGV("+ result=%d\n", result);                                     \
+        ILOGV("+ result=%d", result);                                       \
         SET_REGISTER(vdst, result);                                         \
     }                                                                       \
     FINISH(2);
@@ -1174,7 +1174,7 @@
             if (sfield == NULL)                                             \
                 GOTO_exceptionThrown();                                     \
             if (dvmDexGetResolvedField(methodClassDex, ref) == NULL) {      \
-                JIT_STUB_HACK(dvmJitEndTraceSelect(self,pc));                  \
+                JIT_STUB_HACK(dvmJitEndTraceSelect(self,pc));               \
             }                                                               \
         }                                                                   \
         SET_REGISTER##_regsize(vdst, dvmGetStaticField##_ftype(sfield));    \
@@ -1197,7 +1197,7 @@
             if (sfield == NULL)                                             \
                 GOTO_exceptionThrown();                                     \
             if (dvmDexGetResolvedField(methodClassDex, ref) == NULL) {      \
-                JIT_STUB_HACK(dvmJitEndTraceSelect(self,pc));                  \
+                JIT_STUB_HACK(dvmJitEndTraceSelect(self,pc));               \
             }                                                               \
         }                                                                   \
         SET_REGISTER##_regsize(vdst, dvmGetStaticField##_ftype(sfield));    \
@@ -1220,7 +1220,7 @@
             if (sfield == NULL)                                             \
                 GOTO_exceptionThrown();                                     \
             if (dvmDexGetResolvedField(methodClassDex, ref) == NULL) {      \
-                JIT_STUB_HACK(dvmJitEndTraceSelect(self,pc));                  \
+                JIT_STUB_HACK(dvmJitEndTraceSelect(self,pc));               \
             }                                                               \
         }                                                                   \
         dvmSetStaticField##_ftype(sfield, GET_REGISTER##_regsize(vdst));    \
@@ -1243,7 +1243,7 @@
             if (sfield == NULL)                                             \
                 GOTO_exceptionThrown();                                     \
             if (dvmDexGetResolvedField(methodClassDex, ref) == NULL) {      \
-                JIT_STUB_HACK(dvmJitEndTraceSelect(self,pc));                  \
+                JIT_STUB_HACK(dvmJitEndTraceSelect(self,pc));               \
             }                                                               \
         }                                                                   \
         dvmSetStaticField##_ftype(sfield, GET_REGISTER##_regsize(vdst));    \
@@ -1502,7 +1502,7 @@
         /*
          * Create an array of the specified type.
          */
-        LOGVV("+++ filled-new-array type is '%s'\n", arrayClass->descriptor);
+        LOGVV("+++ filled-new-array type is '%s'", arrayClass->descriptor);
         typeCh = arrayClass->descriptor[1];
         if (typeCh == 'D' || typeCh == 'J') {
             /* category 2 primitives not allowed */
@@ -1510,7 +1510,7 @@
             GOTO_exceptionThrown();
         } else if (typeCh != 'L' && typeCh != '[' && typeCh != 'I') {
             /* TODO: requires multiple "fill in" loops with different widths */
-            LOGE("non-int primitives not implemented\n");
+            LOGE("non-int primitives not implemented");
             dvmThrowInternalError(
                 "filled-new-array not implemented for anything but 'int'");
             GOTO_exceptionThrown();
@@ -1600,7 +1600,7 @@
         if (baseMethod == NULL) {
             baseMethod = dvmResolveMethod(curMethod->clazz, ref,METHOD_VIRTUAL);
             if (baseMethod == NULL) {
-                ILOGV("+ unknown method or access denied\n");
+                ILOGV("+ unknown method or access denied");
                 GOTO_exceptionThrown();
             }
         }
@@ -1636,7 +1636,7 @@
             methodToCall->nativeFunc != NULL);
 #endif
 
-        LOGVV("+++ base=%s.%s virtual[%d]=%s.%s\n",
+        LOGVV("+++ base=%s.%s virtual[%d]=%s.%s",
             baseMethod->clazz->descriptor, baseMethod->name,
             (u4) baseMethod->methodIndex,
             methodToCall->clazz->descriptor, methodToCall->name);
@@ -1644,7 +1644,7 @@
 
 #if 0
         if (vsrc1 != methodToCall->insSize) {
-            LOGW("WRONG METHOD: base=%s.%s virtual[%d]=%s.%s\n",
+            LOGW("WRONG METHOD: base=%s.%s virtual[%d]=%s.%s",
                 baseMethod->clazz->descriptor, baseMethod->name,
                 (u4) baseMethod->methodIndex,
                 methodToCall->clazz->descriptor, methodToCall->name);
@@ -1704,7 +1704,7 @@
         if (baseMethod == NULL) {
             baseMethod = dvmResolveMethod(curMethod->clazz, ref,METHOD_VIRTUAL);
             if (baseMethod == NULL) {
-                ILOGV("+ unknown method or access denied\n");
+                ILOGV("+ unknown method or access denied");
                 GOTO_exceptionThrown();
             }
         }
@@ -1737,7 +1737,7 @@
         assert(!dvmIsAbstractMethod(methodToCall) ||
             methodToCall->nativeFunc != NULL);
 #endif
-        LOGVV("+++ base=%s.%s super-virtual=%s.%s\n",
+        LOGVV("+++ base=%s.%s super-virtual=%s.%s",
             baseMethod->clazz->descriptor, baseMethod->name,
             methodToCall->clazz->descriptor, methodToCall->name);
         assert(methodToCall != NULL);
@@ -1846,7 +1846,7 @@
             methodToCall = dvmResolveMethod(curMethod->clazz, ref,
                             METHOD_DIRECT);
             if (methodToCall == NULL) {
-                ILOGV("+ unknown direct method\n");     // should be impossible
+                ILOGV("+ unknown direct method");     // should be impossible
                 GOTO_exceptionThrown();
             }
         }
@@ -1881,7 +1881,7 @@
     if (methodToCall == NULL) {
         methodToCall = dvmResolveMethod(curMethod->clazz, ref, METHOD_STATIC);
         if (methodToCall == NULL) {
-            ILOGV("+ unknown method\n");
+            ILOGV("+ unknown method");
             GOTO_exceptionThrown();
         }
 
@@ -1952,7 +1952,7 @@
             methodToCall->nativeFunc != NULL);
 #endif
 
-        LOGVV("+++ virtual[%d]=%s.%s\n",
+        LOGVV("+++ virtual[%d]=%s.%s",
             ref, methodToCall->clazz->descriptor, methodToCall->name);
         assert(methodToCall != NULL);
 
@@ -2012,7 +2012,7 @@
         assert(!dvmIsAbstractMethod(methodToCall) ||
             methodToCall->nativeFunc != NULL);
 #endif
-        LOGVV("+++ super-virtual[%d]=%s.%s\n",
+        LOGVV("+++ super-virtual[%d]=%s.%s",
             ref, methodToCall->clazz->descriptor, methodToCall->name);
         assert(methodToCall != NULL);
         GOTO_invokeMethod(methodCallRange, methodToCall, vsrc1, vdst);
@@ -2060,7 +2060,7 @@
 
         if (dvmIsBreakFrame(fp)) {
             /* bail without popping the method frame from stack */
-            LOGVV("+++ returned into break frame\n");
+            LOGVV("+++ returned into break frame");
             GOTO_bail();
         }
 
@@ -2081,7 +2081,7 @@
         {
             FINISH(3);
         } else {
-            //LOGE("Unknown invoke instr %02x at %d\n",
+            //LOGE("Unknown invoke instr %02x at %d",
             //    invokeInstr, (int) (pc - curMethod->insns));
             assert(false);
         }
@@ -2113,7 +2113,7 @@
         dvmAddTrackedAlloc(exception, self);
         dvmClearException(self);
 
-        LOGV("Handling exception %s at %s:%d\n",
+        LOGV("Handling exception %s at %s:%d",
             exception->clazz->descriptor, curMethod->name,
             dvmLineNumFromPC(curMethod, pc - curMethod->insns));
 
@@ -2181,7 +2181,7 @@
         if (catchRelPc < 0) {
             /* falling through to JNI code or off the bottom of the stack */
 #if DVM_SHOW_EXCEPTION >= 2
-            LOGD("Exception %s from %s:%d not caught locally\n",
+            LOGD("Exception %s from %s:%d not caught locally",
                 exception->clazz->descriptor, dvmGetMethodSourceFile(curMethod),
                 dvmLineNumFromPC(curMethod, pc - curMethod->insns));
 #endif
@@ -2193,7 +2193,7 @@
 #if DVM_SHOW_EXCEPTION >= 3
         {
             const Method* catchMethod = SAVEAREA_FROM_FP(fp)->method;
-            LOGD("Exception %s thrown from %s:%d to %s:%d\n",
+            LOGD("Exception %s thrown from %s:%d to %s:%d",
                 exception->clazz->descriptor, dvmGetMethodSourceFile(curMethod),
                 dvmLineNumFromPC(curMethod, pc - curMethod->insns),
                 dvmGetMethodSourceFile(catchMethod),
@@ -2343,7 +2343,7 @@
             bottom = (u1*) newSaveArea - methodToCall->outsSize * sizeof(u4);
             if (bottom < self->interpStackEnd) {
                 /* stack overflow */
-                LOGV("Stack overflow on method call (start=%p end=%p newBot=%p(%d) size=%d '%s')\n",
+                LOGV("Stack overflow on method call (start=%p end=%p newBot=%p(%d) size=%d '%s')",
                     self->interpStackStart, self->interpStackEnd, bottom,
                     (u1*) fp - bottom, self->interpStackSize,
                     methodToCall->name);
@@ -2351,7 +2351,7 @@
                 assert(dvmCheckException(self));
                 GOTO_exceptionThrown();
             }
-            //LOGD("+++ fp=%p newFp=%p newSave=%p bottom=%p\n",
+            //LOGD("+++ fp=%p newFp=%p newSave=%p bottom=%p",
             //    fp, newFp, newSaveArea, bottom);
         }
 
@@ -2442,7 +2442,7 @@
              * it, jump to our local exception handling.
              */
             if (dvmCheckException(self)) {
-                LOGV("Exception thrown by/below native code\n");
+                LOGV("Exception thrown by/below native code");
                 GOTO_exceptionThrown();
             }
 
@@ -2458,7 +2458,7 @@
             {
                 FINISH(3);
             } else {
-                //LOGE("Unknown invoke instr %02x at %d\n",
+                //LOGE("Unknown invoke instr %02x at %d",
                 //    invokeInstr, (int) (pc - curMethod->insns));
                 assert(false);
             }
diff --git a/vm/mterp/portable/entry.cpp b/vm/mterp/portable/entry.cpp
index ad6d254..062de1c 100644
--- a/vm/mterp/portable/entry.cpp
+++ b/vm/mterp/portable/entry.cpp
@@ -36,7 +36,7 @@
 
     methodClassDex = curMethod->clazz->pDvmDex;
 
-    LOGVV("threadid=%d: %s.%s pc=0x%x fp=%p\n",
+    LOGVV("threadid=%d: %s.%s pc=0x%x fp=%p",
         self->threadId, curMethod->clazz->descriptor, curMethod->name,
         pc - curMethod->insns, fp);
 
diff --git a/vm/native/InternalNative.cpp b/vm/native/InternalNative.cpp
index 7ebe8b9..1be0646 100644
--- a/vm/native/InternalNative.cpp
+++ b/vm/native/InternalNative.cpp
@@ -118,7 +118,7 @@
                     pMeth->signature, method) == 0)
                 {
                     /* match */
-                    //LOGV("+++  match on %s.%s %s at %p\n",
+                    //LOGV("+++  match on %s.%s %s at %p",
                     //    className, methodName, methodSignature, pMeth->fnPtr);
                     return pMeth->fnPtr;
                 }
@@ -141,7 +141,7 @@
  */
 void dvmAbstractMethodStub(const u4* args, JValue* pResult)
 {
-    LOGD("--- called into dvmAbstractMethodStub\n");
+    LOGD("--- called into dvmAbstractMethodStub");
     dvmThrowAbstractMethodError("abstract method not implemented");
 }
 
@@ -199,7 +199,7 @@
      * auto-generating bogus array classes.
      */
     if (!dexIsValidClassName(name, true)) {
-        LOGW("dvmFindClassByName rejecting '%s'\n", name);
+        LOGW("dvmFindClassByName rejecting '%s'", name);
         dvmThrowClassNotFoundException(name);
         goto bail;
     }
@@ -215,7 +215,7 @@
         clazz = dvmFindClassNoInit(descriptor, loader);
 
     if (clazz == NULL) {
-        LOGVV("FAIL: load %s (%d)\n", descriptor, doInit);
+        LOGVV("FAIL: load %s (%d)", descriptor, doInit);
         Thread* self = dvmThreadSelf();
         Object* oldExcep = dvmGetException(self);
         dvmAddTrackedAlloc(oldExcep, self);     /* don't let this be GCed */
@@ -223,7 +223,7 @@
         dvmThrowChainedClassNotFoundException(name, oldExcep);
         dvmReleaseTrackedAlloc(oldExcep, self);
     } else {
-        LOGVV("GOOD: load %s (%d) --> %p ldr=%p\n",
+        LOGVV("GOOD: load %s (%d) --> %p ldr=%p",
             descriptor, doInit, clazz, clazz->classLoader);
     }
 
diff --git a/vm/native/dalvik_system_DexFile.cpp b/vm/native/dalvik_system_DexFile.cpp
index 59dddfc..3de6f51 100644
--- a/vm/native/dalvik_system_DexFile.cpp
+++ b/vm/native/dalvik_system_DexFile.cpp
@@ -50,7 +50,7 @@
 {
     DexOrJar* pDexOrJar = (DexOrJar*) vptr;
 
-    LOGV("Freeing DexOrJar '%s'\n", pDexOrJar->fileName);
+    LOGV("Freeing DexOrJar '%s'", pDexOrJar->fileName);
 
     if (pDexOrJar->isDex)
         dvmRawDexFileFree(pDexOrJar->pRawDexFile);
@@ -82,7 +82,7 @@
 {
     DexOrJar* pDexOrJar = (DexOrJar*) cookie;
 
-    LOGVV("+++ dex verifying cookie %p\n", pDexOrJar);
+    LOGVV("+++ dex verifying cookie %p", pDexOrJar);
 
     if (pDexOrJar == NULL)
         return false;
@@ -122,7 +122,7 @@
     dvmHashTableUnlock(gDvm.userDexFiles);
 
     if (result != pDexOrJar) {
-        LOGE("Pointer has already been added?\n");
+        LOGE("Pointer has already been added?");
         dvmAbort();
     }
 
@@ -192,7 +192,7 @@
      * if the caller specifies their own output file.
      */
     if (dvmClassPathContains(gDvm.bootClassPath, sourceName)) {
-        LOGW("Refusing to reopen boot DEX '%s'\n", sourceName);
+        LOGW("Refusing to reopen boot DEX '%s'", sourceName);
         dvmThrowIOException(
             "Re-opening BOOTCLASSPATH DEX files is not allowed");
         free(sourceName);
@@ -207,21 +207,21 @@
      */
     if (hasDexExtension(sourceName)
             && dvmRawDexFileOpen(sourceName, outputName, &pRawDexFile, false) == 0) {
-        LOGV("Opening DEX file '%s' (DEX)\n", sourceName);
+        LOGV("Opening DEX file '%s' (DEX)", sourceName);
 
         pDexOrJar = (DexOrJar*) malloc(sizeof(DexOrJar));
         pDexOrJar->isDex = true;
         pDexOrJar->pRawDexFile = pRawDexFile;
         pDexOrJar->pDexMemory = NULL;
     } else if (dvmJarFileOpen(sourceName, outputName, &pJarFile, false) == 0) {
-        LOGV("Opening DEX file '%s' (Jar)\n", sourceName);
+        LOGV("Opening DEX file '%s' (Jar)", sourceName);
 
         pDexOrJar = (DexOrJar*) malloc(sizeof(DexOrJar));
         pDexOrJar->isDex = false;
         pDexOrJar->pJarFile = pJarFile;
         pDexOrJar->pDexMemory = NULL;
     } else {
-        LOGV("Unable to open DEX file '%s'\n", sourceName);
+        LOGV("Unable to open DEX file '%s'", sourceName);
         dvmThrowIOException("unable to open DEX file");
     }
 
@@ -271,13 +271,13 @@
     memcpy(pBytes, fileContentsObj->contents, length);
 
     if (dvmRawDexFileOpenArray(pBytes, length, &pRawDexFile) != 0) {
-        LOGV("Unable to open in-memory DEX file\n");
+        LOGV("Unable to open in-memory DEX file");
         free(pBytes);
         dvmThrowRuntimeException("unable to open in-memory DEX file");
         RETURN_VOID();
     }
 
-    LOGV("Opening in-memory DEX\n");
+    LOGV("Opening in-memory DEX");
     pDexOrJar = (DexOrJar*) malloc(sizeof(DexOrJar));
     pDexOrJar->isDex = true;
     pDexOrJar->pRawDexFile = pRawDexFile;
@@ -304,7 +304,7 @@
     if (!validateCookie(cookie))
         RETURN_VOID();
 
-    LOGV("Closing DEX file %p (%s)\n", pDexOrJar, pDexOrJar->fileName);
+    LOGV("Closing DEX file %p (%s)", pDexOrJar, pDexOrJar->fileName);
 
     /*
      * We can't just free arbitrary DEX files because they have bits and
@@ -318,14 +318,14 @@
         u4 hash = (u4) pDexOrJar;
         dvmHashTableLock(gDvm.userDexFiles);
         if (!dvmHashTableRemove(gDvm.userDexFiles, hash, pDexOrJar)) {
-            LOGW("WARNING: could not remove '%s' from DEX hash table\n",
+            LOGW("WARNING: could not remove '%s' from DEX hash table",
                 pDexOrJar->fileName);
         }
         dvmHashTableUnlock(gDvm.userDexFiles);
-        LOGV("+++ freeing DexFile '%s' resources\n", pDexOrJar->fileName);
+        LOGV("+++ freeing DexFile '%s' resources", pDexOrJar->fileName);
         dvmFreeDexOrJar(pDexOrJar);
     } else {
-        LOGV("+++ NOT freeing DexFile '%s' resources\n", pDexOrJar->fileName);
+        LOGV("+++ NOT freeing DexFile '%s' resources", pDexOrJar->fileName);
     }
 
     RETURN_VOID();
@@ -359,7 +359,7 @@
 
     name = dvmCreateCstrFromString(nameObj);
     descriptor = dvmDotToDescriptor(name);
-    LOGV("--- Explicit class load '%s' l=%p c=0x%08x\n",
+    LOGV("--- Explicit class load '%s' l=%p c=0x%08x",
         descriptor, loader, cookie);
     free(name);
 
@@ -428,7 +428,7 @@
         dvmAllocArrayByClass(arrayClass, count, ALLOC_DEFAULT);
     if (stringArray == NULL) {
         /* probably OOM */
-        LOGD("Failed allocating array of %d strings\n", count);
+        LOGD("Failed allocating array of %d strings", count);
         assert(dvmCheckException(self));
         RETURN_VOID();
     }
@@ -486,7 +486,7 @@
         RETURN_VOID();
     }
     status = dvmDexCacheStatus(name);
-    LOGV("dvmDexCacheStatus(%s) returned %d\n", name, status);
+    LOGV("dvmDexCacheStatus(%s) returned %d", name, status);
 
     result = true;
     switch (status) {
diff --git a/vm/native/dalvik_system_VMDebug.cpp b/vm/native/dalvik_system_VMDebug.cpp
index cfd8ebc..a87dcba 100644
--- a/vm/native/dalvik_system_VMDebug.cpp
+++ b/vm/native/dalvik_system_VMDebug.cpp
@@ -614,14 +614,14 @@
     }
     *methodDescr++ = '\0';
 
-    //LOGD("GOT: %s %s %s\n", classAndMethodDesc, methodName, methodDescr);
+    //LOGD("GOT: %s %s %s", classAndMethodDesc, methodName, methodDescr);
 
     /*
      * Find the class, but only if it's already loaded.
      */
     clazz = dvmLookupClass(classAndMethodDesc, NULL, false);
     if (clazz == NULL) {
-        LOGD("Class %s not found in bootstrap loader\n", classAndMethodDesc);
+        LOGD("Class %s not found in bootstrap loader", classAndMethodDesc);
         goto bail;
     }
 
@@ -657,15 +657,15 @@
         const RegisterMap* pMap;
         pMap = dvmGetExpandedRegisterMap(method);
         if (pMap == NULL) {
-            LOGV("No map for %s.%s %s\n",
+            LOGV("No map for %s.%s %s",
                 classAndMethodDesc, methodName, methodDescr);
         } else {
-            LOGV("Found map %s.%s %s\n",
+            LOGV("Found map %s.%s %s",
                 classAndMethodDesc, methodName, methodDescr);
             result = true;
         }
     } else {
-        LOGV("Unable to find %s.%s %s\n",
+        LOGV("Unable to find %s.%s %s",
             classAndMethodDesc, methodName, methodDescr);
     }
 
@@ -683,11 +683,11 @@
     UNUSED_PARAMETER(args);
     UNUSED_PARAMETER(pResult);
 
-    LOGI("--- reference table dump ---\n");
+    LOGI("--- reference table dump ---");
     dvmDumpJniReferenceTables();
     // could dump thread's internalLocalRefTable, probably not useful
     // ditto for thread's jniMonitorRefTable
-    LOGI("---\n");
+    LOGI("---");
     RETURN_VOID();
 }
 
@@ -706,7 +706,7 @@
     UNUSED_PARAMETER(args);
     UNUSED_PARAMETER(pResult);
 
-    LOGW("Crashing VM on request\n");
+    LOGW("Crashing VM on request");
     dvmDumpThread(dvmThreadSelf(), false);
     dvmAbort();
 }
diff --git a/vm/native/dalvik_system_VMStack.cpp b/vm/native/dalvik_system_VMStack.cpp
index e69fa93..65755a1 100644
--- a/vm/native/dalvik_system_VMStack.cpp
+++ b/vm/native/dalvik_system_VMStack.cpp
@@ -168,7 +168,7 @@
             break;
     }
     if (thread == NULL) {
-        LOGI("VMStack.getTraceBuf: threadObj %p not active\n",
+        LOGI("VMStack.getTraceBuf: threadObj %p not active",
             targetThreadObj);
         dvmUnlockThreadList();
         return NULL;
diff --git a/vm/native/dalvik_system_Zygote.cpp b/vm/native/dalvik_system_Zygote.cpp
index fb33405..f755884 100644
--- a/vm/native/dalvik_system_Zygote.cpp
+++ b/vm/native/dalvik_system_Zygote.cpp
@@ -60,7 +60,7 @@
            become unsafe. */
         if (WIFEXITED(status)) {
             if (WEXITSTATUS(status)) {
-                LOG(LOG_DEBUG, ZYGOTE_LOG_TAG, "Process %d exited cleanly (%d)\n",
+                LOG(LOG_DEBUG, ZYGOTE_LOG_TAG, "Process %d exited cleanly (%d)",
                     (int) pid, WEXITSTATUS(status));
             } else {
                 IF_LOGV(/*should use ZYGOTE_LOG_TAG*/) {
@@ -83,7 +83,7 @@
             }
 #ifdef WCOREDUMP
             if (WCOREDUMP(status)) {
-                LOG(LOG_INFO, ZYGOTE_LOG_TAG, "Process %d dumped core\n",
+                LOG(LOG_INFO, ZYGOTE_LOG_TAG, "Process %d dumped core",
                     (int) pid);
             }
 #endif /* ifdef WCOREDUMP */
@@ -235,7 +235,7 @@
     }
 
     if (!dvmGcPreZygoteFork()) {
-        LOGE("pre-fork heap failed\n");
+        LOGE("pre-fork heap failed");
         dvmAbort();
     }
 
@@ -276,7 +276,7 @@
  */
 static void enableDebugFeatures(u4 debugFlags)
 {
-    LOGV("debugFlags is 0x%02x\n", debugFlags);
+    LOGV("debugFlags is 0x%02x", debugFlags);
 
     gDvm.jdwpAllowed = ((debugFlags & DEBUG_ENABLE_DEBUGGER) != 0);
 
@@ -342,7 +342,7 @@
     capdata.effective = effective;
     capdata.permitted = permitted;
 
-    LOGV("CAPSET perm=%llx eff=%llx\n", permitted, effective);
+    LOGV("CAPSET perm=%llx eff=%llx", permitted, effective);
     if (capset(&capheader, &capdata) != 0)
         return errno;
 #endif /*HAVE_ANDROID_OS*/
@@ -386,7 +386,7 @@
     }
 
     if (!dvmGcPreZygoteFork()) {
-        LOGE("pre-fork heap failed\n");
+        LOGE("pre-fork heap failed");
         dvmAbort();
     }
 
@@ -443,7 +443,7 @@
 
         err = setCapabilities(permittedCapabilities, effectiveCapabilities);
         if (err != 0) {
-            LOGE("cannot set capabilities (%llx,%llx): %s\n",
+            LOGE("cannot set capabilities (%llx,%llx): %s",
                 permittedCapabilities, effectiveCapabilities, strerror(err));
             dvmAbort();
         }
@@ -460,7 +460,7 @@
         unsetSignalHandler();
         gDvm.zygote = false;
         if (!dvmInitAfterZygote()) {
-            LOGE("error in post-zygote initialization\n");
+            LOGE("error in post-zygote initialization");
             dvmAbort();
         }
     } else if (pid > 0) {
diff --git a/vm/native/java_lang_Class.cpp b/vm/native/java_lang_Class.cpp
index 790e7b7..cc0bccb 100644
--- a/vm/native/java_lang_Class.cpp
+++ b/vm/native/java_lang_Class.cpp
@@ -69,10 +69,10 @@
             if (pCtrl->pkgOrClassLen > pkgLen ||
                 memcmp(pCtrl->pkgOrClass, className, pCtrl->pkgOrClassLen) != 0)
             {
-                LOGV("ASRT: pkg no match: '%s'(%d) vs '%s'\n",
+                LOGV("ASRT: pkg no match: '%s'(%d) vs '%s'",
                     className, pkgLen, pCtrl->pkgOrClass);
             } else {
-                LOGV("ASRT: pkg match: '%s'(%d) vs '%s' --> %d\n",
+                LOGV("ASRT: pkg match: '%s'(%d) vs '%s' --> %d",
                     className, pkgLen, pCtrl->pkgOrClass, pCtrl->enable);
                 enable = pCtrl->enable;
             }
@@ -84,22 +84,22 @@
             if (pCtrl->pkgOrClass == NULL) {
                 /* -esa/-dsa; see if class is a "system" class */
                 if (strncmp(className, "java/", 5) != 0) {
-                    LOGV("ASRT: sys no match: '%s'\n", className);
+                    LOGV("ASRT: sys no match: '%s'", className);
                 } else {
-                    LOGV("ASRT: sys match: '%s' --> %d\n",
+                    LOGV("ASRT: sys match: '%s' --> %d",
                         className, pCtrl->enable);
                     enable = pCtrl->enable;
                 }
             } else if (*pCtrl->pkgOrClass == '\0') {
-                LOGV("ASRT: class all: '%s' --> %d\n",
+                LOGV("ASRT: class all: '%s' --> %d",
                     className, pCtrl->enable);
                 enable = pCtrl->enable;
             } else {
                 if (strcmp(pCtrl->pkgOrClass, className) != 0) {
-                    LOGV("ASRT: cls no match: '%s' vs '%s'\n",
+                    LOGV("ASRT: cls no match: '%s' vs '%s'",
                         className, pCtrl->pkgOrClass);
                 } else {
-                    LOGV("ASRT: cls match: '%s' vs '%s' --> %d\n",
+                    LOGV("ASRT: cls match: '%s' vs '%s' --> %d",
                         className, pCtrl->pkgOrClass, pCtrl->enable);
                     enable = pCtrl->enable;
                 }
@@ -382,7 +382,7 @@
             case 'D': name = "double";  break;
             case 'V': name = "void";    break;
             default: {
-                LOGE("Unknown primitive type '%c'\n", descriptor[0]);
+                LOGE("Unknown primitive type '%c'", descriptor[0]);
                 assert(false);
                 RETURN_PTR(NULL);
             }
@@ -500,7 +500,7 @@
     if (dvmIsPrimitiveClass(clazz) || dvmIsInterfaceClass(clazz)
         || dvmIsArrayClass(clazz) || dvmIsAbstractClass(clazz))
     {
-        LOGD("newInstance failed: p%d i%d [%d a%d\n",
+        LOGD("newInstance failed: p%d i%d [%d a%d",
             dvmIsPrimitiveClass(clazz), dvmIsInterfaceClass(clazz),
             dvmIsArrayClass(clazz), dvmIsAbstractClass(clazz));
         dvmThrowInstantiationException(clazz, NULL);
@@ -510,7 +510,7 @@
     /* initialize the class if it hasn't been already */
     if (!dvmIsClassInitialized(clazz)) {
         if (!dvmInitClass(clazz)) {
-            LOGW("Class init failed in newInstance call (%s)\n",
+            LOGW("Class init failed in newInstance call (%s)",
                 clazz->descriptor);
             assert(dvmCheckException(self));
             RETURN_VOID();
@@ -521,7 +521,7 @@
     init = dvmFindDirectMethodByDescriptor(clazz, "<init>", "()V");
     if (init == NULL) {
         /* common cause: secret "this" arg on non-static inner class ctor */
-        LOGD("newInstance failed: no <init>()\n");
+        LOGD("newInstance failed: no <init>()");
         dvmThrowInstantiationException(clazz, "no empty constructor");
         RETURN_VOID();
     }
@@ -539,13 +539,13 @@
     ClassObject* callerClass = dvmGetCaller2Class(self->interpSave.curFrame);
 
     if (!dvmCheckClassAccess(callerClass, clazz)) {
-        LOGD("newInstance failed: %s not accessible to %s\n",
+        LOGD("newInstance failed: %s not accessible to %s",
             clazz->descriptor, callerClass->descriptor);
         dvmThrowIllegalAccessException("access to class not allowed");
         RETURN_VOID();
     }
     if (!dvmCheckMethodAccess(callerClass, init)) {
-        LOGD("newInstance failed: %s.<init>() not accessible to %s\n",
+        LOGD("newInstance failed: %s.<init>() not accessible to %s",
             clazz->descriptor, callerClass->descriptor);
         dvmThrowIllegalAccessException("access to constructor not allowed");
         RETURN_VOID();
diff --git a/vm/native/java_lang_Runtime.cpp b/vm/native/java_lang_Runtime.cpp
index 112448c..c09b840 100644
--- a/vm/native/java_lang_Runtime.cpp
+++ b/vm/native/java_lang_Runtime.cpp
@@ -51,9 +51,9 @@
         dvmChangeStatus(NULL, THREAD_NATIVE);
         (*gDvm.exitHook)(status);     // not expected to return
         dvmChangeStatus(NULL, THREAD_RUNNING);
-        LOGW("JNI exit hook returned\n");
+        LOGW("JNI exit hook returned");
     }
-    LOGD("Calling exit(%d)\n", status);
+    LOGD("Calling exit(%d)", status);
 #if defined(WITH_JIT) && defined(WITH_JIT_TUNING)
     dvmCompilerDumpStats();
 #endif
diff --git a/vm/native/java_lang_System.cpp b/vm/native/java_lang_System.cpp
index 06ab5f8..8223afd 100644
--- a/vm/native/java_lang_System.cpp
+++ b/vm/native/java_lang_System.cpp
@@ -172,7 +172,7 @@
             RETURN_VOID();
         }
 
-        if (false) LOGD("arraycopy prim[%c] dst=%p %d src=%p %d len=%d\n",
+        if (false) LOGD("arraycopy prim[%c] dst=%p %d src=%p %d len=%d",
             srcType, dstArray->contents, dstPos,
             srcArray->contents, srcPos, length);
 
@@ -209,7 +209,7 @@
                 length * 8);
             break;
         default:        /* illegal array type */
-            LOGE("Weird array type '%s'\n", srcClass->descriptor);
+            LOGE("Weird array type '%s'", srcClass->descriptor);
             dvmAbort();
         }
     } else {
@@ -226,7 +226,7 @@
             /*
              * "dst" can hold "src"; copy the whole thing.
              */
-            if (false) LOGD("arraycopy ref dst=%p %d src=%p %d len=%d\n",
+            if (false) LOGD("arraycopy ref dst=%p %d src=%p %d len=%d",
                 dstArray->contents, dstPos * width,
                 srcArray->contents, srcPos * width,
                 length * width);
@@ -273,7 +273,7 @@
                 }
             }
 
-            if (false) LOGD("arraycopy iref dst=%p %d src=%p %d count=%d of %d\n",
+            if (false) LOGD("arraycopy iref dst=%p %d src=%p %d count=%d of %d",
                 dstArray->contents, dstPos * width,
                 srcArray->contents, srcPos * width,
                 copyCount, length);
diff --git a/vm/native/java_lang_Throwable.cpp b/vm/native/java_lang_Throwable.cpp
index f96ee6d..1324e5a 100644
--- a/vm/native/java_lang_Throwable.cpp
+++ b/vm/native/java_lang_Throwable.cpp
@@ -48,7 +48,7 @@
     ArrayObject* elements = NULL;
 
     if (stackState == NULL) {
-        LOGW("getStackTrace() called but no trace available\n");
+        LOGW("getStackTrace() called but no trace available");
         RETURN_PTR(NULL);   /* could throw NPE; currently caller will do so */
     }
 
diff --git a/vm/native/java_lang_VMClassLoader.cpp b/vm/native/java_lang_VMClassLoader.cpp
index 770ce5e..c80713c 100644
--- a/vm/native/java_lang_VMClassLoader.cpp
+++ b/vm/native/java_lang_VMClassLoader.cpp
@@ -39,7 +39,7 @@
     char* name = NULL;
 
     name = dvmCreateCstrFromString(nameObj);
-    LOGE("ERROR: defineClass(%p, %s, %p, %d, %d)\n",
+    LOGE("ERROR: defineClass(%p, %s, %p, %d, %d)",
         loader, name, data, offset, len);
     dvmThrowUnsupportedOperationException(
         "can't load this type of class file");
@@ -64,7 +64,7 @@
     int offset = args[2];
     int len = args[3];
 
-    LOGE("ERROR: defineClass(%p, %p, %d, %d)\n",
+    LOGE("ERROR: defineClass(%p, %p, %d, %d)",
         loader, data, offset, len);
     dvmThrowUnsupportedOperationException(
         "can't load this type of class file");
@@ -101,7 +101,7 @@
         goto bail;
 
     clazz = dvmLookupClass(descriptor, loader, false);
-    LOGVV("look: %s ldr=%p --> %p\n", descriptor, loader, clazz);
+    LOGVV("look: %s ldr=%p --> %p", descriptor, loader, clazz);
 
 bail:
     free(name);
diff --git a/vm/native/java_lang_VMThread.cpp b/vm/native/java_lang_VMThread.cpp
index 0a02020..57ce006 100644
--- a/vm/native/java_lang_VMThread.cpp
+++ b/vm/native/java_lang_VMThread.cpp
@@ -179,7 +179,7 @@
 
     dvmDdmSendThreadNameChange(threadId, nameStr);
     //char* str = dvmCreateCstrFromString(nameStr);
-    //LOGI("UPDATE: threadid=%d now '%s'\n", threadId, str);
+    //LOGI("UPDATE: threadid=%d now '%s'", threadId, str);
     //free(str);
 
     RETURN_VOID();
diff --git a/vm/native/java_lang_reflect_Array.cpp b/vm/native/java_lang_reflect_Array.cpp
index 007d738..c2fbb3d 100644
--- a/vm/native/java_lang_reflect_Array.cpp
+++ b/vm/native/java_lang_reflect_Array.cpp
@@ -74,7 +74,7 @@
     int numDim, i;
     int* dimensions;
 
-    LOGV("createMultiArray: '%s' [%d]\n",
+    LOGV("createMultiArray: '%s' [%d]",
         elementClass->descriptor, dimArray->length);
 
     assert(elementClass != NULL);       // verified by caller
@@ -95,7 +95,7 @@
             dvmThrowNegativeArraySizeException(dimensions[i]);
             RETURN_VOID();
         }
-        LOGVV("DIM %d: %d\n", i, dimensions[i]);
+        LOGVV("DIM %d: %d", i, dimensions[i]);
     }
 
     /*
@@ -105,7 +105,7 @@
         (char*) malloc(strlen(elementClass->descriptor) + numDim + 1);
     memset(acDescriptor, '[', numDim);
 
-    LOGVV("#### element name = '%s'\n", elementClass->descriptor);
+    LOGVV("#### element name = '%s'", elementClass->descriptor);
     if (dvmIsPrimitiveClass(elementClass)) {
         assert(elementClass->primitiveType != PRIM_NOT);
         acDescriptor[numDim] = dexGetPrimitiveTypeDescriptorChar(elementClass->primitiveType);
@@ -113,14 +113,14 @@
     } else {
         strcpy(acDescriptor+numDim, elementClass->descriptor);
     }
-    LOGVV("#### array name = '%s'\n", acDescriptor);
+    LOGVV("#### array name = '%s'", acDescriptor);
 
     /*
      * Find/generate the array class.
      */
     arrayClass = dvmFindArrayClass(acDescriptor, elementClass->classLoader);
     if (arrayClass == NULL) {
-        LOGW("Unable to find or generate array class '%s'\n", acDescriptor);
+        LOGW("Unable to find or generate array class '%s'", acDescriptor);
         assert(dvmCheckException(dvmThreadSelf()));
         free(acDescriptor);
         RETURN_VOID();
diff --git a/vm/native/java_lang_reflect_Constructor.cpp b/vm/native/java_lang_reflect_Constructor.cpp
index 84fd207..e776bf1 100644
--- a/vm/native/java_lang_reflect_Constructor.cpp
+++ b/vm/native/java_lang_reflect_Constructor.cpp
@@ -51,7 +51,7 @@
     /* initialize the class if it hasn't been already */
     if (!dvmIsClassInitialized(declaringClass)) {
         if (!dvmInitClass(declaringClass)) {
-            LOGW("Class init failed in Constructor.constructNative (%s)\n",
+            LOGW("Class init failed in Constructor.constructNative (%s)",
                 declaringClass->descriptor);
             assert(dvmCheckException(dvmThreadSelf()));
             RETURN_VOID();
diff --git a/vm/native/java_lang_reflect_Field.cpp b/vm/native/java_lang_reflect_Field.cpp
index dc1b30f..d1918bc 100644
--- a/vm/native/java_lang_reflect_Field.cpp
+++ b/vm/native/java_lang_reflect_Field.cpp
@@ -172,7 +172,7 @@
             value->l = dvmGetStaticFieldObjectVolatile(sfield);
             break;
         default:
-            LOGE("Unhandled field signature '%s'\n", sfield->signature);
+            LOGE("Unhandled field signature '%s'", sfield->signature);
             dvmAbort();
         }
     }
@@ -219,7 +219,7 @@
             value->l = dvmGetFieldObject(obj, ifield->byteOffset);
             break;
         default:
-            LOGE("Unhandled field signature '%s'\n", ifield->signature);
+            LOGE("Unhandled field signature '%s'", ifield->signature);
             dvmAbort();
         }
     } else {
@@ -254,7 +254,7 @@
             value->l = dvmGetFieldObjectVolatile(obj, ifield->byteOffset);
             break;
         default:
-            LOGE("Unhandled field signature '%s'\n", ifield->signature);
+            LOGE("Unhandled field signature '%s'", ifield->signature);
             dvmAbort();
         }
     }
@@ -321,7 +321,7 @@
             dvmSetStaticFieldObjectVolatile(sfield, (Object*)value->l);
             break;
         default:
-            LOGE("Unhandled field signature '%s'\n", sfield->signature);
+            LOGE("Unhandled field signature '%s'", sfield->signature);
             dvmAbort();
         }
     }
@@ -366,7 +366,7 @@
             dvmSetFieldObject(obj, ifield->byteOffset, (Object *)value->l);
             break;
         default:
-            LOGE("Unhandled field signature '%s'\n", ifield->signature);
+            LOGE("Unhandled field signature '%s'", ifield->signature);
             dvmAbort();
         }
 #if ANDROID_SMP != 0
@@ -410,7 +410,7 @@
             dvmSetFieldObjectVolatile(obj, ifield->byteOffset, (Object*)value->l);
             break;
         default:
-            LOGE("Unhandled field signature '%s'\n", ifield->signature);
+            LOGE("Unhandled field signature '%s'", ifield->signature);
             dvmAbort();
         }
     }
diff --git a/vm/native/java_lang_reflect_Method.cpp b/vm/native/java_lang_reflect_Method.cpp
index d38a62b..164e435 100644
--- a/vm/native/java_lang_reflect_Method.cpp
+++ b/vm/native/java_lang_reflect_Method.cpp
@@ -106,7 +106,7 @@
     /*
      * If initialization failed, an exception will be raised.
      */
-    LOGD("Method.invoke() on bad class %s failed\n",
+    LOGD("Method.invoke() on bad class %s failed",
         declaringClass->descriptor);
     assert(dvmCheckException(dvmThreadSelf()));
     RETURN_VOID();
diff --git a/vm/native/org_apache_harmony_dalvik_ddmc_DdmVmInternal.cpp b/vm/native/org_apache_harmony_dalvik_ddmc_DdmVmInternal.cpp
index caa280b..eed8ce1 100644
--- a/vm/native/org_apache_harmony_dalvik_ddmc_DdmVmInternal.cpp
+++ b/vm/native/org_apache_harmony_dalvik_ddmc_DdmVmInternal.cpp
@@ -31,7 +31,7 @@
 {
     bool enable = (args[0] != 0);
 
-    //LOGI("ddmThreadNotification: %d\n", enable);
+    //LOGI("ddmThreadNotification: %d", enable);
     dvmDdmSetThreadNotification(enable);
     RETURN_VOID();
 }
diff --git a/vm/oo/AccessCheck.cpp b/vm/oo/AccessCheck.cpp
index 95b7f3e..cac56c4 100644
--- a/vm/oo/AccessCheck.cpp
+++ b/vm/oo/AccessCheck.cpp
@@ -143,7 +143,7 @@
  */
 bool dvmCheckFieldAccess(const ClassObject* accessFrom, const Field* field)
 {
-    //LOGI("CHECK ACCESS from '%s' to field '%s' (in %s) flags=0x%x\n",
+    //LOGI("CHECK ACCESS from '%s' to field '%s' (in %s) flags=0x%x",
     //    accessFrom->descriptor, field->name,
     //    field->clazz->descriptor, field->accessFlags);
     return checkAccess(accessFrom, field->clazz, field->accessFlags);
diff --git a/vm/oo/Array.cpp b/vm/oo/Array.cpp
index 2193ec1..7d898eb 100644
--- a/vm/oo/Array.cpp
+++ b/vm/oo/Array.cpp
@@ -151,7 +151,7 @@
         width = 8;
         break;
     default:
-        LOGE("Unknown primitive type '%c'\n", type);
+        LOGE("Unknown primitive type '%c'", type);
         dvmAbort();
         return NULL; // Keeps the compiler happy.
     }
@@ -175,17 +175,17 @@
     ArrayObject* newArray;
     const char* elemName = arrayClass->descriptor + 1; // Advance past one '['.
 
-    LOGVV("dvmAllocMultiArray: class='%s' curDim=%d *dimensions=%d\n",
+    LOGVV("dvmAllocMultiArray: class='%s' curDim=%d *dimensions=%d",
         arrayClass->descriptor, curDim, *dimensions);
 
     if (curDim == 0) {
         if (*elemName == 'L' || *elemName == '[') {
-            LOGVV("  end: array class (obj) is '%s'\n",
+            LOGVV("  end: array class (obj) is '%s'",
                 arrayClass->descriptor);
             newArray = allocArray(arrayClass, *dimensions,
                         kObjectArrayRefWidth, ALLOC_DEFAULT);
         } else {
-            LOGVV("  end: array class (prim) is '%s'\n",
+            LOGVV("  end: array class (prim) is '%s'",
                 arrayClass->descriptor);
             newArray = dvmAllocPrimitiveArray(
                     dexGetPrimitiveTypeDescriptorChar(arrayClass->elementClass->primitiveType),
@@ -246,11 +246,11 @@
     ClassObject* clazz;
 
     assert(descriptor[0] == '[');
-    //LOGV("dvmFindArrayClass: '%s' %p\n", descriptor, loader);
+    //LOGV("dvmFindArrayClass: '%s' %p", descriptor, loader);
 
     clazz = dvmLookupClass(descriptor, loader, false);
     if (clazz == NULL) {
-        LOGV("Array class '%s' %p not found; creating\n", descriptor, loader);
+        LOGV("Array class '%s' %p not found; creating", descriptor, loader);
         clazz = createArrayClass(descriptor, loader);
         if (clazz != NULL)
             dvmAddInitiatingLoader(clazz, loader);
@@ -306,7 +306,7 @@
         if (descriptor[1] == 'L') {
             /* array of objects; strip off "[" and look up descriptor. */
             const char* subDescriptor = &descriptor[1];
-            LOGVV("searching for element class '%s'\n", subDescriptor);
+            LOGVV("searching for element class '%s'", subDescriptor);
             elementClass = dvmFindClassNoInit(subDescriptor, loader);
             extraFlags |= CLASS_ISOBJECTARRAY;
         } else {
@@ -342,11 +342,11 @@
      * other threads.)
      */
     if (loader != elementClass->classLoader) {
-        LOGVV("--- checking for '%s' in %p vs. elem %p\n",
+        LOGVV("--- checking for '%s' in %p vs. elem %p",
             descriptor, loader, elementClass->classLoader);
         newClass = dvmLookupClass(descriptor, elementClass->classLoader, false);
         if (newClass != NULL) {
-            LOGV("--- we already have %s in %p, don't need in %p\n",
+            LOGV("--- we already have %s in %p, don't need in %p",
                 descriptor, elementClass->classLoader, loader);
             return newClass;
         }
@@ -414,7 +414,7 @@
         dvmFindSystemClassNoInit("Ljava/io/Serializable;");
     dvmLinearReadOnly(newClass->classLoader, newClass->interfaces);
     if (newClass->interfaces[0] == NULL || newClass->interfaces[1] == NULL) {
-        LOGE("Unable to create array class '%s': missing interfaces\n",
+        LOGE("Unable to create array class '%s': missing interfaces",
             descriptor);
         dvmFreeClassInnards(newClass);
         dvmThrowInternalError("missing array ifaces");
@@ -478,7 +478,7 @@
     }
     dvmReleaseTrackedAlloc((Object*) newClass, NULL);
 
-    LOGV("Created array class '%s' %p (access=0x%04x.%04x)\n",
+    LOGV("Created array class '%s' %p (access=0x%04x.%04x)",
         descriptor, newClass->classLoader,
         newClass->accessFlags >> 16,
         newClass->accessFlags & JAVA_FLAGS_MASK);
@@ -504,7 +504,7 @@
     length = dstArray->length;
     for (count = 0; count < length; count++) {
         if (!dvmInstanceof(src[count]->clazz, dstElemClass)) {
-            LOGW("dvmCopyObjectArray: can't store %s in %s\n",
+            LOGW("dvmCopyObjectArray: can't store %s in %s",
                 src[count]->clazz->descriptor, dstElemClass->descriptor);
             return false;
         }
@@ -540,7 +540,7 @@
          * necessary for correctness.
          */
         if (!dvmUnboxPrimitive(*src, dstElemClass, &result)) {
-            LOGW("dvmCopyObjectArray: can't store %s in %s\n",
+            LOGW("dvmCopyObjectArray: can't store %s in %s",
                 (*src)->clazz->descriptor, dstElemClass->descriptor);
             return false;
         }
diff --git a/vm/oo/Class.cpp b/vm/oo/Class.cpp
index d4c98b5..191c847 100644
--- a/vm/oo/Class.cpp
+++ b/vm/oo/Class.cpp
@@ -205,7 +205,7 @@
     pid_t pid = getpid();
     unsigned int tid = (unsigned int) pthread_self();
 
-    LOG(LOG_INFO, "PRELOAD", "%c%d:%d:%d:%s:%d:%s:%lld\n", type, ppid, pid, tid,
+    LOG(LOG_INFO, "PRELOAD", "%c%d:%d:%d:%s:%d:%s:%lld", type, ppid, pid, tid,
         get_process_name(), (int) clazz->classLoader, clazz->descriptor,
         time);
 }
@@ -274,13 +274,13 @@
     dvmLinearReadOnly(NULL, (char*)fiddle);
 
     char* str = (char*)dvmLinearStrdup(NULL, "This is a test!");
-    LOGI("GOT: '%s'\n", str);
+    LOGI("GOT: '%s'", str);
 
     /* try to check the bounds; allocator may round allocation size up */
     fiddle = (char*)dvmLinearAlloc(NULL, 12);
-    LOGI("Should be 1: %d\n", dvmLinearAllocContains(fiddle, 12));
-    LOGI("Should be 0: %d\n", dvmLinearAllocContains(fiddle, 13));
-    LOGI("Should be 0: %d\n", dvmLinearAllocContains(fiddle - 128*1024, 1));
+    LOGI("Should be 1: %d", dvmLinearAllocContains(fiddle, 12));
+    LOGI("Should be 0: %d", dvmLinearAllocContains(fiddle, 13));
+    LOGI("Should be 0: %d", dvmLinearAllocContains(fiddle - 128*1024, 1));
 
     dvmLinearAllocDump(NULL);
     dvmLinearFree(NULL, (char*)str);
@@ -314,7 +314,7 @@
         case PRIM_FLOAT:   return gDvm.typeFloat;
         case PRIM_DOUBLE:  return gDvm.typeDouble;
         default: {
-            LOGW("Unknown primitive type '%c'\n", type);
+            LOGW("Unknown primitive type '%c'", type);
             return NULL;
         }
     }
@@ -354,7 +354,7 @@
 
     /* don't need to set newClass->objectSize */
 
-    LOGVV("Constructed class for primitive type '%s'\n", newClass->descriptor);
+    LOGVV("Constructed class for primitive type '%s'", newClass->descriptor);
 
     *pClass = newClass;
     dvmReleaseTrackedAlloc((Object*) newClass, NULL);
@@ -380,7 +380,7 @@
     SET_CLASS_FLAG(clazz, ACC_PUBLIC | ACC_FINAL | CLASS_ISCLASS);
     clazz->descriptor = "Ljava/lang/Class;";
     gDvm.classJavaLangClass = clazz;
-    LOGVV("Constructed the class Class.\n");
+    LOGVV("Constructed the class Class.");
 
     /*
      * Initialize the classes representing primitive types. These are
@@ -410,7 +410,7 @@
 {
     /* make this a requirement -- don't currently support dirs in path */
     if (strcmp(gDvm.bootClassPathStr, ".") == 0) {
-        LOGE("ERROR: must specify non-'.' bootclasspath\n");
+        LOGE("ERROR: must specify non-'.' bootclasspath");
         return false;
     }
 
@@ -515,7 +515,7 @@
         default:            kindStr = "???";    break;
         }
 
-        LOGI("  %2d: type=%s %s %p\n", idx, kindStr, cpe->fileName, cpe->ptr);
+        LOGI("  %2d: type=%s %s %p", idx, kindStr, cpe->fileName, cpe->ptr);
         if (CALC_CACHE_STATS && cpe->kind == kCpeJar) {
             JarFile* pJarFile = (JarFile*) cpe->ptr;
             DvmDex* pDvmDex = dvmGetJarFileDex(pJarFile);
@@ -599,7 +599,7 @@
 
     cc = stat(cpe->fileName, &sb);
     if (cc < 0) {
-        LOGD("Unable to stat classpath element '%s'\n", cpe->fileName);
+        LOGD("Unable to stat classpath element '%s'", cpe->fileName);
         return false;
     }
     if (S_ISDIR(sb.st_mode)) {
@@ -631,7 +631,7 @@
         return true;
     }
 
-    LOGD("Unable to process classpath element '%s'\n", cpe->fileName);
+    LOGD("Unable to process classpath element '%s'", cpe->fileName);
     return false;
 }
 
@@ -696,7 +696,7 @@
         } else {
             if (isBootstrap &&
                     dvmPathToAbsolutePortion(cp) == NULL) {
-                LOGE("Non-absolute bootclasspath entry '%s'\n", cp);
+                LOGE("Non-absolute bootclasspath entry '%s'", cp);
                 free(cpe);
                 cpe = NULL;
                 goto bail;
@@ -729,13 +729,13 @@
     }
     assert(idx <= count);
     if (idx == 0 && !gDvm.optimizing) {
-        LOGE("No valid entries found in bootclasspath '%s'\n", pathStr);
+        LOGE("No valid entries found in bootclasspath '%s'", pathStr);
         free(cpe);
         cpe = NULL;
         goto bail;
     }
 
-    LOGVV("  (filled %d of %d slots)\n", idx, count);
+    LOGVV("  (filled %d of %d slots)", idx, count);
 
     /* put end marker in over-alloc slot */
     cpe[idx].kind = kCpeLastEntry;
@@ -764,15 +764,15 @@
     const DexClassDef* pFoundDef = NULL;
     DvmDex* pFoundFile = NULL;
 
-    LOGVV("+++ class '%s' not yet loaded, scanning bootclasspath...\n",
+    LOGVV("+++ class '%s' not yet loaded, scanning bootclasspath...",
         descriptor);
 
     while (cpe->kind != kCpeLastEntry) {
-        //LOGV("+++  checking '%s' (%d)\n", cpe->fileName, cpe->kind);
+        //LOGV("+++  checking '%s' (%d)", cpe->fileName, cpe->kind);
 
         switch (cpe->kind) {
         case kCpeDir:
-            LOGW("Directory entries ('%s') not supported in bootclasspath\n",
+            LOGW("Directory entries ('%s') not supported in bootclasspath",
                 cpe->fileName);
             break;
         case kCpeJar:
@@ -808,7 +808,7 @@
             }
             break;
         default:
-            LOGE("Unknown kind %d\n", cpe->kind);
+            LOGE("Unknown kind %d", cpe->kind);
             assert(false);
             break;
         }
@@ -884,7 +884,7 @@
     const ClassPathEntry* cpe = gDvm.bootClassPath;
     StringObject* urlObj = NULL;
 
-    LOGV("+++ searching for resource '%s' in %d(%s)\n",
+    LOGV("+++ searching for resource '%s' in %d(%s)",
         name, idx, cpe[idx].fileName);
 
     /* we could use direct array index, but I don't entirely trust "idx" */
@@ -912,14 +912,14 @@
         }
         break;
     case kCpeDex:
-        LOGV("No resources in DEX files\n");
+        LOGV("No resources in DEX files");
         goto bail;
     default:
         assert(false);
         goto bail;
     }
 
-    LOGV("+++ using URL='%s'\n", urlBuf);
+    LOGV("+++ using URL='%s'", urlBuf);
     urlObj = dvmCreateStringFromCstr(urlBuf);
 
 bail:
@@ -983,7 +983,7 @@
     int i;
     for (i = loaderList->initiatingLoaderCount-1; i >= 0; --i) {
         if (loaderList->initiatingLoaders[i] == loader) {
-            //LOGI("+++ found initiating match %p in %s\n",
+            //LOGI("+++ found initiating match %p in %s",
             //    loader, clazz->descriptor);
             return true;
         }
@@ -1006,7 +1006,7 @@
     if (loader != clazz->classLoader) {
         assert(loader != NULL);
 
-        LOGVV("Adding %p to '%s' init list\n", loader, clazz->descriptor);
+        LOGVV("Adding %p to '%s' init list", loader, clazz->descriptor);
         dvmHashTableLock(gDvm.loadedClasses);
 
         /*
@@ -1015,7 +1015,7 @@
          * checking before every add, so we may not want to do this.
          */
         //if (dvmLoaderInInitiatingList(clazz, loader)) {
-        //    LOGW("WOW: simultaneous add of initiating class loader\n");
+        //    LOGW("WOW: simultaneous add of initiating class loader");
         //    goto bail_unlock;
         //}
 
@@ -1041,7 +1041,7 @@
             }
             loaderList->initiatingLoaders = newList;
 
-            //LOGI("Expanded init list to %d (%s)\n",
+            //LOGI("Expanded init list to %d (%s)",
             //    loaderList->initiatingLoaderCount+kInitLoaderInc,
             //    clazz->descriptor);
         }
@@ -1078,7 +1078,7 @@
               (pCrit->loader != NULL &&
                dvmLoaderInInitiatingList(clazz, pCrit->loader)) ));
     //if (match)
-    //    LOGI("+++ %s %p matches existing %s %p\n",
+    //    LOGI("+++ %s %p matches existing %s %p",
     //        pCrit->descriptor, pCrit->loader,
     //        clazz->descriptor, clazz->classLoader);
     return !match;
@@ -1131,7 +1131,7 @@
     crit.loader = loader;
     hash = dvmComputeUtf8Hash(descriptor);
 
-    LOGVV("threadid=%d: dvmLookupClass searching for '%s' %p\n",
+    LOGVV("threadid=%d: dvmLookupClass searching for '%s' %p",
         dvmThreadSelf()->threadId, descriptor, loader);
 
     dvmHashTableLock(gDvm.loadedClasses);
@@ -1148,7 +1148,7 @@
      * the wait-for-class code centralized.
      */
     if (found && !unprepOkay && !dvmIsClassLinked((ClassObject*)found)) {
-        LOGV("Ignoring not-yet-ready %s, using slow path\n",
+        LOGV("Ignoring not-yet-ready %s, using slow path",
             ((ClassObject*)found)->descriptor);
         found = NULL;
     }
@@ -1180,7 +1180,7 @@
                 hashcmpClassByClass, true);
     dvmHashTableUnlock(gDvm.loadedClasses);
 
-    LOGV("+++ dvmAddClassToHash '%s' %p (isnew=%d) --> %p\n",
+    LOGV("+++ dvmAddClassToHash '%s' %p (isnew=%d) --> %p",
         clazz->descriptor, clazz->classLoader,
         (found == (void*) clazz), clazz);
 
@@ -1216,13 +1216,13 @@
  */
 static void removeClassFromHash(ClassObject* clazz)
 {
-    LOGV("+++ removeClassFromHash '%s'\n", clazz->descriptor);
+    LOGV("+++ removeClassFromHash '%s'", clazz->descriptor);
 
     u4 hash = dvmComputeUtf8Hash(clazz->descriptor);
 
     dvmHashTableLock(gDvm.loadedClasses);
     if (!dvmHashTableRemove(gDvm.loadedClasses, hash, clazz))
-        LOGW("Hash table remove failed on class '%s'\n", clazz->descriptor);
+        LOGW("Hash table remove failed on class '%s'", clazz->descriptor);
     dvmHashTableUnlock(gDvm.loadedClasses);
 }
 
@@ -1290,7 +1290,7 @@
     assert(descriptor != NULL);
     //assert(loader != NULL);
 
-    LOGVV("FindClassNoInit '%s' %p\n", descriptor, loader);
+    LOGVV("FindClassNoInit '%s' %p", descriptor, loader);
 
     if (*descriptor == '[') {
         /*
@@ -1318,7 +1318,7 @@
 static ClassObject* findClassFromLoaderNoInit(const char* descriptor,
     Object* loader)
 {
-    //LOGI("##### findClassFromLoaderNoInit (%s,%p)\n",
+    //LOGI("##### findClassFromLoaderNoInit (%s,%p)",
     //        descriptor, loader);
 
     Thread* self = dvmThreadSelf();
@@ -1337,10 +1337,10 @@
      */
     ClassObject* clazz = dvmLookupClass(descriptor, loader, false);
     if (clazz != NULL) {
-        LOGVV("Already loaded: %s %p\n", descriptor, loader);
+        LOGVV("Already loaded: %s %p", descriptor, loader);
         return clazz;
     } else {
-        LOGVV("Not already loaded: %s %p\n", descriptor, loader);
+        LOGVV("Not already loaded: %s %p", descriptor, loader);
     }
 
     char* dotName = NULL;
@@ -1366,7 +1366,7 @@
      * implementation eventually calls VMClassLoader.loadClass to see if
      * the bootstrap class loader can find it before doing its own load.
      */
-    LOGVV("--- Invoking loadClass(%s, %p)\n", dotName, loader);
+    LOGVV("--- Invoking loadClass(%s, %p)", dotName, loader);
     {
         const Method* loadClass =
             loader->clazz->vtable[gDvm.voffJavaLangClassLoader_loadClass];
@@ -1378,7 +1378,7 @@
         Object* excep = dvmGetException(self);
         if (excep != NULL) {
 #if DVM_SHOW_EXCEPTION >= 2
-            LOGD("NOTE: loadClass '%s' %p threw exception %s\n",
+            LOGD("NOTE: loadClass '%s' %p threw exception %s",
                  dotName, loader, excep->clazz->descriptor);
 #endif
             dvmAddTrackedAlloc(excep, self);
@@ -1388,7 +1388,7 @@
             clazz = NULL;
             goto bail;
         } else if (clazz == NULL) {
-            LOGW("ClassLoader returned NULL w/o exception pending\n");
+            LOGW("ClassLoader returned NULL w/o exception pending");
             dvmThrowNullPointerException("ClassLoader returned null");
             goto bail;
         }
@@ -1398,7 +1398,7 @@
 
     dvmAddInitiatingLoader(clazz, loader);
 
-    LOGVV("--- Successfully loaded %s %p (thisldr=%p clazz=%p)\n",
+    LOGVV("--- Successfully loaded %s %p (thisldr=%p clazz=%p)",
         descriptor, clazz->classLoader, loader, clazz);
 
 bail:
@@ -1480,7 +1480,7 @@
     bool profilerNotified = false;
 
     if (loader != NULL) {
-        LOGVV("#### findClassNoInit(%s,%p,%p)\n", descriptor, loader,
+        LOGVV("#### findClassNoInit(%s,%p,%p)", descriptor, loader,
             pDvmDex->pDexFile);
     }
 
@@ -1567,7 +1567,7 @@
              *
              * (Yes, this happens.)
              */
-            //LOGW("WOW: somebody loaded %s simultaneously\n", descriptor);
+            //LOGW("WOW: somebody loaded %s simultaneously", descriptor);
             clazz->initThreadId = 0;
             dvmUnlockObject(self, (Object*) clazz);
 
@@ -1606,7 +1606,7 @@
             dvmUnlockObject(self, (Object*) clazz);
 
 #if LOG_CLASS_LOADING
-            LOG(LOG_INFO, "DVMLINK FAILED FOR CLASS ", "%s in %s\n",
+            LOG(LOG_INFO, "DVMLINK FAILED FOR CLASS ", "%s in %s",
                 clazz->descriptor, get_process_name());
 
             /*
@@ -1619,9 +1619,9 @@
             clazz = NULL;
             if (gDvm.optimizing) {
                 /* happens with "external" libs */
-                LOGV("Link of class '%s' failed\n", descriptor);
+                LOGV("Link of class '%s' failed", descriptor);
             } else {
-                LOGW("Link of class '%s' failed\n", descriptor);
+                LOGW("Link of class '%s' failed", descriptor);
             }
             goto bail;
         }
@@ -1678,13 +1678,13 @@
             if (!dvmIsClassLinked(clazz) &&
                 clazz->initThreadId == self->threadId)
             {
-                LOGW("Recursive link on class %s\n", clazz->descriptor);
+                LOGW("Recursive link on class %s", clazz->descriptor);
                 dvmUnlockObject(self, (Object*) clazz);
                 dvmThrowClassCircularityError(clazz->descriptor);
                 clazz = NULL;
                 goto bail;
             }
-            //LOGI("WAITING  for '%s' (owner=%d)\n",
+            //LOGI("WAITING  for '%s' (owner=%d)",
             //    clazz->descriptor, clazz->initThreadId);
             while (!dvmIsClassLinked(clazz) && clazz->status != CLASS_ERROR) {
                 dvmObjectWait(self, (Object*) clazz, 0, 0, false);
@@ -1709,7 +1709,7 @@
     assert(dvmIsClassObject(clazz));
     assert(clazz == gDvm.classJavaLangObject || clazz->super != NULL);
     if (!dvmIsInterfaceClass(clazz)) {
-        //LOGI("class=%s vtableCount=%d, virtualMeth=%d\n",
+        //LOGI("class=%s vtableCount=%d, virtualMeth=%d",
         //    clazz->descriptor, clazz->vtableCount,
         //    clazz->virtualMethodCount);
         assert(clazz->vtableCount >= clazz->virtualMethodCount);
@@ -1743,7 +1743,7 @@
      * runtime state.
      */
     if ((pClassDef->accessFlags & ~EXPECTED_FILE_FLAGS) != 0) {
-        LOGW("Invalid file flags in class %s: %04x\n",
+        LOGW("Invalid file flags in class %s: %04x",
             descriptor, pClassDef->accessFlags);
         return NULL;
     }
@@ -1876,7 +1876,7 @@
         if (classMapData != NULL &&
             pHeader->directMethodsSize + pHeader->virtualMethodsSize != numMethods)
         {
-            LOGE("ERROR: in %s, direct=%d virtual=%d, maps have %d\n",
+            LOGE("ERROR: in %s, direct=%d virtual=%d, maps have %d",
                 newClass->descriptor, pHeader->directMethodsSize,
                 pHeader->virtualMethodsSize, numMethods);
             assert(false);
@@ -1961,7 +1961,7 @@
     pDexFile = pDvmDex->pDexFile;
 
     if (gDvm.verboseClass) {
-        LOGV("CLASS: loading '%s'...\n",
+        LOGV("CLASS: loading '%s'...",
             dexGetClassDescriptor(pDexFile, pClassDef));
     }
 
@@ -1978,7 +1978,7 @@
             classLoader);
 
     if (gDvm.verboseClass && (result != NULL)) {
-        LOGI("[Loaded %s from DEX %p (cl=%p)]\n",
+        LOGI("[Loaded %s from DEX %p (cl=%p)]",
             result->descriptor, pDvmDex, classLoader);
     }
 
@@ -2134,8 +2134,8 @@
 static void cloneMethod(Method* dst, const Method* src)
 {
     if (src->registerMap != NULL) {
-        LOGE("GLITCH: only expected abstract methods here\n");
-        LOGE("        cloning %s.%s\n", src->clazz->descriptor, src->name);
+        LOGE("GLITCH: only expected abstract methods here");
+        LOGE("        cloning %s.%s", src->clazz->descriptor, src->name);
         dvmAbort();
     }
     memcpy(dst, src, sizeof(Method));
@@ -2238,7 +2238,7 @@
     assert(!dvmIsNativeMethod(meth) && !dvmIsAbstractMethod(meth));
 
     size_t dexCodeSize = dexGetDexCodeSize(methodDexCode);
-    LOGD("Making a copy of %s.%s code (%d bytes)\n",
+    LOGD("Making a copy of %s.%s code (%d bytes)",
         meth->clazz->descriptor, meth->name, dexCodeSize);
 
     DexCode* newCode =
@@ -2258,7 +2258,7 @@
 void dvmMakeCodeReadOnly(Method* meth)
 {
     DexCode* methodDexCode = (DexCode*) dvmGetMethodCode(meth);
-    LOGV("+++ marking %p read-only\n", methodDexCode);
+    LOGV("+++ marking %p read-only", methodDexCode);
     dvmLinearReadOnly(meth->clazz->classLoader, methodDexCode);
 }
 #endif
@@ -2427,7 +2427,7 @@
     }
     dvmLinearReadOnly(clazz->classLoader, clazz->ifields);
     if (i == clazz->ifieldRefCount) {
-        LOGE("Unable to reorder 'referent' in %s\n", clazz->descriptor);
+        LOGE("Unable to reorder 'referent' in %s", clazz->descriptor);
         return false;
     }
 
@@ -2436,7 +2436,7 @@
      * info about the class.
      */
     if (!dvmFindReferenceMembers(clazz)) {
-        LOGE("Trouble with Reference setup\n");
+        LOGE("Trouble with Reference setup");
         return false;
     }
 
@@ -2514,7 +2514,7 @@
     assert(clazz->descriptor != NULL);
     assert(clazz->status == CLASS_IDX || clazz->status == CLASS_LOADED);
     if (gDvm.verboseClass)
-        LOGV("CLASS: linking '%s'...\n", clazz->descriptor);
+        LOGV("CLASS: linking '%s'...", clazz->descriptor);
 
     assert(gDvm.classJavaLangClass != NULL);
     assert(clazz->clazz == gDvm.classJavaLangClass);
@@ -2575,10 +2575,10 @@
                 assert(dvmCheckException(dvmThreadSelf()));
                 if (gDvm.optimizing) {
                     /* happens with "external" libs */
-                    LOGV("Unable to resolve superclass of %s (%d)\n",
+                    LOGV("Unable to resolve superclass of %s (%d)",
                          clazz->descriptor, superclassIdx);
                 } else {
-                    LOGW("Unable to resolve superclass of %s (%d)\n",
+                    LOGW("Unable to resolve superclass of %s (%d)",
                          clazz->descriptor, superclassIdx);
                 }
                 goto bail;
@@ -2607,11 +2607,11 @@
                         dexStringByTypeIdx(pDexFile, interfaceIdxArray[i]);
                     if (gDvm.optimizing) {
                         /* happens with "external" libs */
-                        LOGV("Failed resolving %s interface %d '%s'\n",
+                        LOGV("Failed resolving %s interface %d '%s'",
                              clazz->descriptor, interfaceIdxArray[i],
                              classDescriptor);
                     } else {
-                        LOGI("Failed resolving %s interface %d '%s'\n",
+                        LOGI("Failed resolving %s interface %d '%s'",
                              clazz->descriptor, interfaceIdxArray[i],
                              classDescriptor);
                     }
@@ -2621,12 +2621,12 @@
                 /* are we allowed to implement this interface? */
                 if (!dvmCheckClassAccess(clazz, clazz->interfaces[i])) {
                     dvmLinearReadOnly(clazz->classLoader, clazz->interfaces);
-                    LOGW("Interface '%s' is not accessible to '%s'\n",
+                    LOGW("Interface '%s' is not accessible to '%s'",
                          clazz->interfaces[i]->descriptor, clazz->descriptor);
                     dvmThrowIllegalAccessError("interface not accessible");
                     goto bail;
                 }
-                LOGVV("+++  found interface '%s'\n",
+                LOGVV("+++  found interface '%s'",
                       clazz->interfaces[i]->descriptor);
             }
             dvmLinearReadOnly(clazz->classLoader, clazz->interfaces);
@@ -2663,17 +2663,17 @@
         }
         /* verify */
         if (dvmIsFinalClass(clazz->super)) {
-            LOGW("Superclass of '%s' is final '%s'\n",
+            LOGW("Superclass of '%s' is final '%s'",
                 clazz->descriptor, clazz->super->descriptor);
             dvmThrowIncompatibleClassChangeError("superclass is final");
             goto bail;
         } else if (dvmIsInterfaceClass(clazz->super)) {
-            LOGW("Superclass of '%s' is interface '%s'\n",
+            LOGW("Superclass of '%s' is interface '%s'",
                 clazz->descriptor, clazz->super->descriptor);
             dvmThrowIncompatibleClassChangeError("superclass is an interface");
             goto bail;
         } else if (!dvmCheckClassAccess(clazz, clazz->super)) {
-            LOGW("Superclass of '%s' (%s) is not accessible\n",
+            LOGW("Superclass of '%s' (%s) is not accessible",
                 clazz->descriptor, clazz->super->descriptor);
             dvmThrowIllegalAccessError("superclass not accessible");
             goto bail;
@@ -2759,7 +2759,7 @@
         int count = clazz->virtualMethodCount;
 
         if (count != (u2) count) {
-            LOGE("Too many methods (%d) in interface '%s'\n", count,
+            LOGE("Too many methods (%d) in interface '%s'", count,
                  clazz->descriptor);
             goto bail;
         }
@@ -2772,7 +2772,7 @@
         dvmLinearReadOnly(clazz->classLoader, clazz->virtualMethods);
     } else {
         if (!createVtable(clazz)) {
-            LOGW("failed creating vtable\n");
+            LOGW("failed creating vtable");
             goto bail;
         }
     }
@@ -2803,7 +2803,7 @@
     if ((clazz->classLoader == NULL)
             && (strcmp(clazz->descriptor, "Ljava/lang/ref/Reference;") == 0)) {
         if (!precacheReferenceOffsets(clazz)) {
-            LOGE("failed pre-caching Reference offsets\n");
+            LOGE("failed pre-caching Reference offsets");
             dvmThrowInternalError(NULL);
             goto bail;
         }
@@ -2825,7 +2825,7 @@
         clazz->status = CLASS_RESOLVED;
     okay = true;
     if (gDvm.verboseClass)
-        LOGV("CLASS: linked '%s'\n", clazz->descriptor);
+        LOGV("CLASS: linked '%s'", clazz->descriptor);
 
     /*
      * We send CLASS_PREPARE events to the debugger from here.  The
@@ -2870,7 +2870,7 @@
     int i;
 
     if (clazz->super != NULL) {
-        //LOGI("SUPER METHODS %d %s->%s\n", clazz->super->vtableCount,
+        //LOGI("SUPER METHODS %d %s->%s", clazz->super->vtableCount,
         //    clazz->descriptor, clazz->super->descriptor);
     }
 
@@ -2884,7 +2884,7 @@
          */
         assert(strcmp(clazz->descriptor, "Ljava/lang/Object;") == 0);
     }
-    //LOGD("+++ max vmethods for '%s' is %d\n", clazz->descriptor, maxCount);
+    //LOGD("+++ max vmethods for '%s' is %d", clazz->descriptor, maxCount);
 
     /*
      * Over-allocate the table, then realloc it down if necessary.  So
@@ -2919,14 +2919,14 @@
                 {
                     /* verify */
                     if (dvmIsFinalMethod(superMeth)) {
-                        LOGW("Method %s.%s overrides final %s.%s\n",
+                        LOGW("Method %s.%s overrides final %s.%s",
                             localMeth->clazz->descriptor, localMeth->name,
                             superMeth->clazz->descriptor, superMeth->name);
                         goto bail;
                     }
                     clazz->vtable[si] = localMeth;
                     localMeth->methodIndex = (u2) si;
-                    //LOGV("+++   override %s.%s (slot %d)\n",
+                    //LOGV("+++   override %s.%s (slot %d)",
                     //    clazz->descriptor, localMeth->name, si);
                     break;
                 }
@@ -2938,13 +2938,13 @@
                 localMeth->methodIndex = (u2) actualCount;
                 actualCount++;
 
-                //LOGV("+++   add method %s.%s\n",
+                //LOGV("+++   add method %s.%s",
                 //    clazz->descriptor, localMeth->name);
             }
         }
 
         if (actualCount != (u2) actualCount) {
-            LOGE("Too many methods (%d) in class '%s'\n", actualCount,
+            LOGE("Too many methods (%d) in class '%s'", actualCount,
                  clazz->descriptor);
             goto bail;
         }
@@ -2957,10 +2957,10 @@
             clazz->vtable = (Method **)dvmLinearRealloc(clazz->classLoader,
                 clazz->vtable, sizeof(*(clazz->vtable)) * actualCount);
             if (clazz->vtable == NULL) {
-                LOGE("vtable realloc failed\n");
+                LOGE("vtable realloc failed");
                 goto bail;
             } else {
-                LOGVV("+++  reduced vtable from %d to %d\n",
+                LOGVV("+++  reduced vtable from %d to %d",
                     maxCount, actualCount);
             }
         }
@@ -2970,7 +2970,7 @@
         /* java/lang/Object case */
         int count = clazz->virtualMethodCount;
         if (count != (u2) count) {
-            LOGE("Too many methods (%d) in base class '%s'\n", count,
+            LOGE("Too many methods (%d) in base class '%s'", count,
                  clazz->descriptor);
             goto bail;
         }
@@ -3028,7 +3028,7 @@
     for (int i = 0; i < clazz->interfaceCount; i++)
         ifCount += clazz->interfaces[i]->iftableCount;
 
-    LOGVV("INTF: class '%s' direct w/supra=%d super=%d total=%d\n",
+    LOGVV("INTF: class '%s' direct w/supra=%d super=%d total=%d",
         clazz->descriptor, ifCount - superIfCount, superIfCount, ifCount);
 
     if (ifCount == 0) {
@@ -3061,7 +3061,7 @@
 
         /* make sure this is still an interface class */
         if (!dvmIsInterfaceClass(interf)) {
-            LOGW("Class '%s' implements non-interface '%s'\n",
+            LOGW("Class '%s' implements non-interface '%s'",
                 clazz->descriptor, interf->descriptor);
             dvmThrowIncompatibleClassChangeErrorWithClassMessage(
                 clazz->descriptor);
@@ -3104,7 +3104,7 @@
                 if (i == j)
                     continue;
                 if (clazz->iftable[i].clazz == clazz->iftable[j].clazz) {
-                    LOGVV("INTF: redundant interface %s in %s\n",
+                    LOGVV("INTF: redundant interface %s in %s",
                         clazz->iftable[i].clazz->descriptor,
                         clazz->descriptor);
 
@@ -3117,7 +3117,7 @@
                 }
             }
         }
-        LOGVV("INTF: class '%s' nodupes=%d\n", clazz->descriptor, ifCount);
+        LOGVV("INTF: class '%s' nodupes=%d", clazz->descriptor, ifCount);
     } // if (false)
 
     clazz->iftableCount = ifCount;
@@ -3155,14 +3155,14 @@
          * Note it's valid for an interface to have no methods (e.g.
          * java/io/Serializable).
          */
-        LOGVV("INTF: pool: %d from %s\n",
+        LOGVV("INTF: pool: %d from %s",
             clazz->iftable[i].clazz->virtualMethodCount,
             clazz->iftable[i].clazz->descriptor);
         poolSize += clazz->iftable[i].clazz->virtualMethodCount;
     }
 
     if (poolSize == 0) {
-        LOGVV("INTF: didn't find any new interfaces with methods\n");
+        LOGVV("INTF: didn't find any new interfaces with methods");
         result = true;
         goto bail;
     }
@@ -3220,7 +3220,7 @@
 
             IF_LOGVV() {
                 char* desc = dexProtoCopyMethodDescriptor(&imeth->prototype);
-                LOGVV("INTF:  matching '%s' '%s'\n", imeth->name, desc);
+                LOGVV("INTF:  matching '%s' '%s'", imeth->name, desc);
                 free(desc);
             }
 
@@ -3228,9 +3228,9 @@
                 if (dvmCompareMethodNamesAndProtos(imeth, clazz->vtable[j])
                     == 0)
                 {
-                    LOGVV("INTF:   matched at %d\n", j);
+                    LOGVV("INTF:   matched at %d", j);
                     if (!dvmIsPublicMethod(clazz->vtable[j])) {
-                        LOGW("Implementation of %s.%s is not public\n",
+                        LOGW("Implementation of %s.%s is not public",
                             clazz->descriptor, clazz->vtable[j]->name);
                         dvmThrowIllegalAccessError(
                             "interface implementation not public");
@@ -3244,7 +3244,7 @@
                 IF_LOGV() {
                     char* desc =
                         dexProtoCopyMethodDescriptor(&imeth->prototype);
-                    LOGV("No match for '%s' '%s' in '%s' (creating miranda)\n",
+                    LOGV("No match for '%s' '%s' in '%s' (creating miranda)",
                             imeth->name, desc, clazz->descriptor);
                     free(desc);
                 }
@@ -3280,7 +3280,7 @@
                         IF_LOGVV() {
                             char* desc = dexProtoCopyMethodDescriptor(
                                     &imeth->prototype);
-                            LOGVV("MIRANDA dupe: %s and %s %s%s\n",
+                            LOGVV("MIRANDA dupe: %s and %s %s%s",
                                 mirandaList[mir]->clazz->descriptor,
                                 imeth->clazz->descriptor,
                                 imeth->name, desc);
@@ -3293,12 +3293,12 @@
                 /* point the iftable at a phantom slot index */
                 clazz->iftable[i].methodIndexArray[methIdx] =
                     clazz->vtableCount + mir;
-                LOGVV("MIRANDA: %s points at slot %d\n",
+                LOGVV("MIRANDA: %s points at slot %d",
                     imeth->name, clazz->vtableCount + mir);
 
                 /* if non-duplicate among Mirandas, add to Miranda list */
                 if (mir == mirandaCount) {
-                    //LOGV("MIRANDA: holding '%s' in slot %d\n",
+                    //LOGV("MIRANDA: holding '%s' in slot %d",
                     //    imeth->name, mir);
                     mirandaList[mirandaCount++] = imeth;
                 }
@@ -3313,7 +3313,7 @@
         int oldMethodCount, oldVtableCount;
 
         for (int i = 0; i < mirandaCount; i++) {
-            LOGVV("MIRANDA %d: %s.%s\n", i,
+            LOGVV("MIRANDA %d: %s.%s", i,
                 mirandaList[i]->clazz->descriptor, mirandaList[i]->name);
         }
         if (mirandaCount > kManyMirandas) {
@@ -3324,7 +3324,7 @@
              * massive collection of Miranda methods and a lot of wasted
              * space, sometimes enough to blow out the LinearAlloc cap.
              */
-            LOGD("Note: class %s has %d unimplemented (abstract) methods\n",
+            LOGD("Note: class %s has %d unimplemented (abstract) methods",
                 clazz->descriptor, mirandaCount);
         }
 
@@ -3359,7 +3359,7 @@
              * stuff makes it look like the class actually has an abstract
              * method declaration in it.
              */
-            LOGVV("MIRANDA fixing vtable pointers\n");
+            LOGVV("MIRANDA fixing vtable pointers");
             dvmLinearReadWrite(clazz->classLoader, clazz->vtable);
             Method* meth = newVirtualMethods;
             for (int i = 0; i < clazz->virtualMethodCount; i++, meth++)
@@ -3504,7 +3504,7 @@
 {
     InstField swap;
 
-    LOGVV("  --- swap '%s' and '%s'\n", pOne->name, pTwo->name);
+    LOGVV("  --- swap '%s' and '%s'", pOne->name, pTwo->name);
     swap = *pOne;
     *pOne = *pTwo;
     *pTwo = swap;
@@ -3553,12 +3553,12 @@
     else
         fieldOffset = OFFSETOF_MEMBER(DataObject, instanceData);
 
-    LOGVV("--- computeFieldOffsets '%s'\n", clazz->descriptor);
+    LOGVV("--- computeFieldOffsets '%s'", clazz->descriptor);
 
-    //LOGI("OFFSETS fieldCount=%d\n", clazz->ifieldCount);
-    //LOGI("dataobj, instance: %d\n", offsetof(DataObject, instanceData));
-    //LOGI("classobj, access: %d\n", offsetof(ClassObject, accessFlags));
-    //LOGI("super=%p, fieldOffset=%d\n", clazz->super, fieldOffset);
+    //LOGI("OFFSETS fieldCount=%d", clazz->ifieldCount);
+    //LOGI("dataobj, instance: %d", offsetof(DataObject, instanceData));
+    //LOGI("classobj, access: %d", offsetof(ClassObject, accessFlags));
+    //LOGI("super=%p, fieldOffset=%d", clazz->super, fieldOffset);
 
     /*
      * Start by moving all reference fields to the front.
@@ -3610,7 +3610,7 @@
 
         pField->byteOffset = fieldOffset;
         fieldOffset += sizeof(u4);
-        LOGVV("  --- offset1 '%s'=%d\n", pField->name,pField->byteOffset);
+        LOGVV("  --- offset1 '%s'=%d", pField->name,pField->byteOffset);
     }
 
     /*
@@ -3619,7 +3619,7 @@
      * If we can't find one, we'll have to pad it.
      */
     if (i != clazz->ifieldCount && (fieldOffset & 0x04) != 0) {
-        LOGVV("  +++ not aligned\n");
+        LOGVV("  +++ not aligned");
 
         InstField* pField = &clazz->ifields[i];
         char c = pField->signature[0];
@@ -3632,7 +3632,7 @@
             pField->byteOffset = fieldOffset;
             fieldOffset += sizeof(u4);
             i++;
-            LOGVV("  --- offset2 '%s'=%d\n",
+            LOGVV("  --- offset2 '%s'=%d",
                 pField->name, pField->byteOffset);
         } else {
             /*
@@ -3648,11 +3648,11 @@
                 if (rc != 'J' && rc != 'D') {
                     swapField(pField, singleField);
                     //c = rc;
-                    LOGVV("  +++ swapped '%s' for alignment\n",
+                    LOGVV("  +++ swapped '%s' for alignment",
                         pField->name);
                     pField->byteOffset = fieldOffset;
                     fieldOffset += sizeof(u4);
-                    LOGVV("  --- offset3 '%s'=%d\n",
+                    LOGVV("  --- offset3 '%s'=%d",
                         pField->name, pField->byteOffset);
                     found = true;
                     i++;
@@ -3660,7 +3660,7 @@
                 }
             }
             if (!found) {
-                LOGV("  +++ inserting pad field in '%s'\n", clazz->descriptor);
+                LOGV("  +++ inserting pad field in '%s'", clazz->descriptor);
                 fieldOffset += sizeof(u4);
             }
         }
@@ -3705,7 +3705,7 @@
         }
 
         pField->byteOffset = fieldOffset;
-        LOGVV("  --- offset4 '%s'=%d\n", pField->name,pField->byteOffset);
+        LOGVV("  --- offset4 '%s'=%d", pField->name,pField->byteOffset);
         fieldOffset += sizeof(u4);
         if (c == 'J' || c == 'D')
             fieldOffset += sizeof(u4);
@@ -3759,7 +3759,7 @@
  */
 static void throwEarlierClassFailure(ClassObject* clazz)
 {
-    LOGI("Rejecting re-init on previously-failed class %s v=%p\n",
+    LOGI("Rejecting re-init on previously-failed class %s v=%p",
         clazz->descriptor, clazz->verifyErrorClass);
 
     if (clazz->verifyErrorClass == NULL) {
@@ -3788,7 +3788,7 @@
     }
     if (clazz->pDvmDex == NULL) {
         /* generated class; any static fields should already be set up */
-        LOGV("Not initializing static fields in %s\n", clazz->descriptor);
+        LOGV("Not initializing static fields in %s", clazz->descriptor);
         return;
     }
     pDexFile = clazz->pDvmDex->pDexFile;
@@ -4088,7 +4088,7 @@
             if (meth != clazz->super->vtable[i] &&
                 !checkMethodDescriptorClasses(meth, clazz->super, clazz))
             {
-                LOGW("Method mismatch: %s in %s (cl=%p) and super %s (cl=%p)\n",
+                LOGW("Method mismatch: %s in %s (cl=%p) and super %s (cl=%p)",
                     meth->name, clazz->descriptor, clazz->classLoader,
                     clazz->super->descriptor, clazz->super->classLoader);
                 dvmThrowLinkageError(
@@ -4260,14 +4260,14 @@
              clazz->classLoader == NULL))
         {
             /* advance to "verified" state */
-            LOGV("+++ not verifying class %s (cl=%p)\n",
+            LOGV("+++ not verifying class %s (cl=%p)",
                 clazz->descriptor, clazz->classLoader);
             clazz->status = CLASS_VERIFIED;
             goto noverify;
         }
 
         if (!gDvm.optimizing)
-            LOGV("+++ late verify on %s\n", clazz->descriptor);
+            LOGV("+++ late verify on %s", clazz->descriptor);
 
         /*
          * We're not supposed to optimize an unverified class, but during
@@ -4312,7 +4312,7 @@
      * system classes, and dexopt runs single-threaded.
      */
     if (!IS_CLASS_FLAG_SET(clazz, CLASS_ISOPTIMIZED) && !gDvm.optimizing) {
-        LOGV("+++ late optimize on %s (pv=%d)\n",
+        LOGV("+++ late optimize on %s (pv=%d)",
             clazz->descriptor, IS_CLASS_FLAG_SET(clazz, CLASS_ISPREVERIFIED));
         bool essentialOnly = (gDvm.dexOptMode != OPTIMIZE_MODE_FULL);
         dvmOptimizeClass(clazz, essentialOnly);
@@ -4328,12 +4328,12 @@
     while (clazz->status == CLASS_INITIALIZING) {
         /* we caught somebody else in the act; was it us? */
         if (clazz->initThreadId == self->threadId) {
-            //LOGV("HEY: found a recursive <clinit>\n");
+            //LOGV("HEY: found a recursive <clinit>");
             goto bail_unlock;
         }
 
         if (dvmCheckException(self)) {
-            LOGW("GLITCH: exception pending at start of class init\n");
+            LOGW("GLITCH: exception pending at start of class init");
             dvmAbort();
         }
 
@@ -4350,7 +4350,7 @@
          * was set), bail out.
          */
         if (dvmCheckException(self)) {
-            LOGI("Class init of '%s' failing with wait() exception\n",
+            LOGI("Class init of '%s' failing with wait() exception",
                 clazz->descriptor);
             /*
              * TODO: this is bogus, because it means the two threads have a
@@ -4370,7 +4370,7 @@
             goto bail_unlock;
         }
         if (clazz->status == CLASS_INITIALIZING) {
-            LOGI("Waiting again for class init\n");
+            LOGI("Waiting again for class init");
             continue;
         }
         assert(clazz->status == CLASS_INITIALIZED ||
@@ -4467,9 +4467,9 @@
      */
     method = dvmFindDirectMethodByDescriptor(clazz, "<clinit>", "()V");
     if (method == NULL) {
-        LOGVV("No <clinit> found for %s\n", clazz->descriptor);
+        LOGVV("No <clinit> found for %s", clazz->descriptor);
     } else {
-        LOGVV("Invoking %s.<clinit>\n", clazz->descriptor);
+        LOGVV("Invoking %s.<clinit>", clazz->descriptor);
         JValue unused;
         dvmCallMethod(self, method, NULL, &unused);
     }
@@ -4480,10 +4480,10 @@
          * need to throw an ExceptionInInitializerError, but we want to
          * tuck the original exception into the "cause" field.
          */
-        LOGW("Exception %s thrown while initializing %s\n",
+        LOGW("Exception %s thrown while initializing %s",
             (dvmGetException(self)->clazz)->descriptor, clazz->descriptor);
         dvmThrowExceptionInInitializerError();
-        //LOGW("+++ replaced\n");
+        //LOGW("+++ replaced");
 
         dvmLockObject(self, (Object*) clazz);
         clazz->status = CLASS_ERROR;
@@ -4491,7 +4491,7 @@
         /* success! */
         dvmLockObject(self, (Object*) clazz);
         clazz->status = CLASS_INITIALIZED;
-        LOGVV("Initialized class: %s\n", clazz->descriptor);
+        LOGVV("Initialized class: %s", clazz->descriptor);
 
         /*
          * Update alloc counters.  TODO: guard with mutex.
@@ -4585,7 +4585,7 @@
 
     if (method->registerMap != NULL) {
         /* unexpected during class loading, okay on first use (uncompress) */
-        LOGV("NOTE: registerMap already set for %s.%s\n",
+        LOGV("NOTE: registerMap already set for %s.%s",
             method->clazz->descriptor, method->name);
         /* keep going */
     }
@@ -4671,7 +4671,7 @@
     int i;
 
     if (clazz == NULL) {
-        LOGI("dumpClass: ignoring request to dump null class\n");
+        LOGI("dumpClass: ignoring request to dump null class");
         return 0;
     }
 
@@ -4683,13 +4683,13 @@
         initStr = dvmIsClassInitialized(clazz) ? "true" : "false";
 
         if (showInit && showLoader)
-            LOGI("%s %p %s\n", clazz->descriptor, clazz->classLoader, initStr);
+            LOGI("%s %p %s", clazz->descriptor, clazz->classLoader, initStr);
         else if (showInit)
-            LOGI("%s %s\n", clazz->descriptor, initStr);
+            LOGI("%s %s", clazz->descriptor, initStr);
         else if (showLoader)
-            LOGI("%s %p\n", clazz->descriptor, clazz->classLoader);
+            LOGI("%s %p", clazz->descriptor, clazz->classLoader);
         else
-            LOGI("%s\n", clazz->descriptor);
+            LOGI("%s", clazz->descriptor);
 
         return 0;
     }
@@ -4700,32 +4700,32 @@
     else
         super = NULL;
 
-    LOGI("----- %s '%s' cl=%p ser=0x%08x -----\n",
+    LOGI("----- %s '%s' cl=%p ser=0x%08x -----",
         dvmIsInterfaceClass(clazz) ? "interface" : "class",
         clazz->descriptor, clazz->classLoader, clazz->serialNumber);
-    LOGI("  objectSize=%d (%d from super)\n", (int) clazz->objectSize,
+    LOGI("  objectSize=%d (%d from super)", (int) clazz->objectSize,
         super != NULL ? (int) super->objectSize : -1);
-    LOGI("  access=0x%04x.%04x\n", clazz->accessFlags >> 16,
+    LOGI("  access=0x%04x.%04x", clazz->accessFlags >> 16,
         clazz->accessFlags & JAVA_FLAGS_MASK);
     if (super != NULL)
-        LOGI("  super='%s' (cl=%p)\n", super->descriptor, super->classLoader);
+        LOGI("  super='%s' (cl=%p)", super->descriptor, super->classLoader);
     if (dvmIsArrayClass(clazz)) {
-        LOGI("  dimensions=%d elementClass=%s\n",
+        LOGI("  dimensions=%d elementClass=%s",
             clazz->arrayDim, clazz->elementClass->descriptor);
     }
     if (clazz->iftableCount > 0) {
-        LOGI("  interfaces (%d):\n", clazz->iftableCount);
+        LOGI("  interfaces (%d):", clazz->iftableCount);
         for (i = 0; i < clazz->iftableCount; i++) {
             InterfaceEntry* ent = &clazz->iftable[i];
             int j;
 
-            LOGI("    %2d: %s (cl=%p)\n",
+            LOGI("    %2d: %s (cl=%p)",
                 i, ent->clazz->descriptor, ent->clazz->classLoader);
 
             /* enable when needed */
             if (false && ent->methodIndexArray != NULL) {
                 for (j = 0; j < ent->clazz->virtualMethodCount; j++)
-                    LOGI("      %2d: %d %s %s\n",
+                    LOGI("      %2d: %d %s %s",
                         j, ent->methodIndexArray[j],
                         ent->clazz->virtualMethods[j].name,
                         clazz->vtable[ent->methodIndexArray[j]]->name);
@@ -4733,30 +4733,30 @@
         }
     }
     if (!dvmIsInterfaceClass(clazz)) {
-        LOGI("  vtable (%d entries, %d in super):\n", clazz->vtableCount,
+        LOGI("  vtable (%d entries, %d in super):", clazz->vtableCount,
             super != NULL ? super->vtableCount : 0);
         for (i = 0; i < clazz->vtableCount; i++) {
             desc = dexProtoCopyMethodDescriptor(&clazz->vtable[i]->prototype);
-            LOGI("    %s%2d: %p %20s %s\n",
+            LOGI("    %s%2d: %p %20s %s",
                 (i != clazz->vtable[i]->methodIndex) ? "*** " : "",
                 (u4) clazz->vtable[i]->methodIndex, clazz->vtable[i],
                 clazz->vtable[i]->name, desc);
             free(desc);
         }
-        LOGI("  direct methods (%d entries):\n", clazz->directMethodCount);
+        LOGI("  direct methods (%d entries):", clazz->directMethodCount);
         for (i = 0; i < clazz->directMethodCount; i++) {
             desc = dexProtoCopyMethodDescriptor(
                     &clazz->directMethods[i].prototype);
-            LOGI("    %2d: %20s %s\n", i, clazz->directMethods[i].name,
+            LOGI("    %2d: %20s %s", i, clazz->directMethods[i].name,
                 desc);
             free(desc);
         }
     } else {
-        LOGI("  interface methods (%d):\n", clazz->virtualMethodCount);
+        LOGI("  interface methods (%d):", clazz->virtualMethodCount);
         for (i = 0; i < clazz->virtualMethodCount; i++) {
             desc = dexProtoCopyMethodDescriptor(
                     &clazz->virtualMethods[i].prototype);
-            LOGI("    %2d: %2d %20s %s\n", i,
+            LOGI("    %2d: %2d %20s %s", i,
                 (u4) clazz->virtualMethods[i].methodIndex,
                 clazz->virtualMethods[i].name,
                 desc);
@@ -4764,16 +4764,16 @@
         }
     }
     if (clazz->sfieldCount > 0) {
-        LOGI("  static fields (%d entries):\n", clazz->sfieldCount);
+        LOGI("  static fields (%d entries):", clazz->sfieldCount);
         for (i = 0; i < clazz->sfieldCount; i++) {
-            LOGI("    %2d: %20s %s\n", i, clazz->sfields[i].name,
+            LOGI("    %2d: %20s %s", i, clazz->sfields[i].name,
                 clazz->sfields[i].signature);
         }
     }
     if (clazz->ifieldCount > 0) {
-        LOGI("  instance fields (%d entries):\n", clazz->ifieldCount);
+        LOGI("  instance fields (%d entries):", clazz->ifieldCount);
         for (i = 0; i < clazz->ifieldCount; i++) {
-            LOGI("    %2d: %20s %s\n", i, clazz->ifields[i].name,
+            LOGI("    %2d: %20s %s", i, clazz->ifields[i].name,
                 clazz->ifields[i].signature);
         }
     }
@@ -4817,12 +4817,12 @@
  */
 void dvmDumpLoaderStats(const char* msg)
 {
-    LOGV("VM stats (%s): cls=%d/%d meth=%d ifld=%d sfld=%d linear=%d\n",
+    LOGV("VM stats (%s): cls=%d/%d meth=%d ifld=%d sfld=%d linear=%d",
         msg, gDvm.numLoadedClasses, dvmHashTableNumEntries(gDvm.loadedClasses),
         gDvm.numDeclaredMethods, gDvm.numDeclaredInstFields,
         gDvm.numDeclaredStaticFields, gDvm.pBootLoaderAlloc->curOffset);
 #ifdef COUNT_PRECISE_METHODS
-    LOGI("GC precise methods: %d\n",
+    LOGI("GC precise methods: %d",
         dvmPointerSetGetCount(gDvm.preciseMethods));
 #endif
 }
diff --git a/vm/oo/Object.cpp b/vm/oo/Object.cpp
index 0e05b52..c1ed334 100644
--- a/vm/oo/Object.cpp
+++ b/vm/oo/Object.cpp
@@ -369,7 +369,7 @@
     size_t argCount = countArgsAndFindReturnType(descriptor, &returnType);
 
     if (returnType == NULL) {
-        LOGW("Bogus method descriptor: %s\n", descriptor);
+        LOGW("Bogus method descriptor: %s", descriptor);
         return NULL;
     }
 
diff --git a/vm/oo/Resolve.cpp b/vm/oo/Resolve.cpp
index a52cfe6..c5899b2 100644
--- a/vm/oo/Resolve.cpp
+++ b/vm/oo/Resolve.cpp
@@ -75,7 +75,7 @@
     if (resClass != NULL)
         return resClass;
 
-    LOGVV("--- resolving class %u (referrer=%s cl=%p)\n",
+    LOGVV("--- resolving class %u (referrer=%s cl=%p)",
         classIdx, referrer->descriptor, referrer->classLoader);
 
     /*
@@ -131,7 +131,7 @@
                     referrer->pDvmDex,
                     resClass->descriptor, resClassCheck->descriptor,
                     resClassCheck->classLoader, resClassCheck->pDvmDex);
-                LOGW("(%s had used a different %s during pre-verification)\n",
+                LOGW("(%s had used a different %s during pre-verification)",
                     referrer->descriptor, resClass->descriptor);
                 dvmThrowIllegalAccessError(
                     "Class ref in pre-verified class resolved to unexpected "
@@ -140,7 +140,7 @@
             }
         }
 
-        LOGVV("##### +ResolveClass(%s): referrer=%s dex=%p ldr=%p ref=%d\n",
+        LOGVV("##### +ResolveClass(%s): referrer=%s dex=%p ldr=%p ref=%d",
             resClass->descriptor, referrer->descriptor, referrer->pDvmDex,
             referrer->classLoader, classIdx);
 
@@ -154,7 +154,7 @@
         dvmDexSetResolvedClass(pDvmDex, classIdx, resClass);
     } else {
         /* not found, exception should be raised */
-        LOGVV("Class not found: %s\n",
+        LOGVV("Class not found: %s",
             dexStringByTypeIdx(pDvmDex->pDexFile, classIdx));
         assert(dvmCheckException(dvmThreadSelf()));
     }
@@ -183,7 +183,7 @@
 
     assert(methodType != METHOD_INTERFACE);
 
-    LOGVV("--- resolving method %u (referrer=%s)\n", methodIdx,
+    LOGVV("--- resolving method %u (referrer=%s)", methodIdx,
         referrer->descriptor);
     pMethodId = dexGetMethodId(pDvmDex->pDexFile, methodIdx);
 
@@ -223,7 +223,7 @@
         return NULL;
     }
 
-    LOGVV("--- found method %d (%s.%s)\n",
+    LOGVV("--- found method %d (%s.%s)",
         methodIdx, resClass->descriptor, resMethod->name);
 
     /* see if this is a pure-abstract method */
@@ -264,7 +264,7 @@
      */
     if (methodType == METHOD_STATIC && !dvmIsClassInitialized(resMethod->clazz))
     {
-        LOGVV("--- not caching resolved method %s.%s (class init=%d/%d)\n",
+        LOGVV("--- not caching resolved method %s.%s (class init=%d/%d)",
             resMethod->clazz->descriptor, resMethod->name,
             dvmIsClassInitializing(resMethod->clazz),
             dvmIsClassInitialized(resMethod->clazz));
@@ -287,7 +287,7 @@
     const DexMethodId* pMethodId;
     Method* resMethod;
 
-    LOGVV("--- resolving interface method %d (referrer=%s)\n",
+    LOGVV("--- resolving interface method %d (referrer=%s)",
         methodIdx, referrer->descriptor);
     pMethodId = dexGetMethodId(pDvmDex->pDexFile, methodIdx);
 
@@ -333,7 +333,7 @@
     DexProto proto;
     dexProtoSetFromMethodId(&proto, pDvmDex->pDexFile, pMethodId);
 
-    LOGVV("+++ looking for '%s' '%s' in resClass='%s'\n",
+    LOGVV("+++ looking for '%s' '%s' in resClass='%s'",
         methodName, methodSig, resClass->descriptor);
     resMethod = dvmFindInterfaceMethodHier(resClass, methodName, &proto);
     if (resMethod == NULL) {
@@ -341,7 +341,7 @@
         return NULL;
     }
 
-    LOGVV("--- found interface method %d (%s.%s)\n",
+    LOGVV("--- found interface method %d (%s.%s)",
         methodIdx, resClass->descriptor, resMethod->name);
 
     /* we're expecting this to be abstract */
@@ -386,7 +386,7 @@
     const DexFieldId* pFieldId;
     InstField* resField;
 
-    LOGVV("--- resolving field %u (referrer=%s cl=%p)\n",
+    LOGVV("--- resolving field %u (referrer=%s cl=%p)",
         ifieldIdx, referrer->descriptor, referrer->classLoader);
 
     pFieldId = dexGetFieldId(pDvmDex->pDexFile, ifieldIdx);
@@ -428,7 +428,7 @@
      * So it's always okay to update the table.
      */
     dvmDexSetResolvedField(pDvmDex, ifieldIdx, (Field*)resField);
-    LOGVV("    field %u is %s.%s\n",
+    LOGVV("    field %u is %s.%s",
         ifieldIdx, resField->clazz->descriptor, resField->name);
 
     return resField;
@@ -490,7 +490,7 @@
     if (dvmIsClassInitialized(resField->clazz)) {
         dvmDexSetResolvedField(pDvmDex, sfieldIdx, (Field*) resField);
     } else {
-        LOGVV("--- not caching resolved field %s.%s (class init=%d/%d)\n",
+        LOGVV("--- not caching resolved field %s.%s (class init=%d/%d)",
             resField->clazz->descriptor, resField->name,
             dvmIsClassInitializing(resField->clazz),
             dvmIsClassInitialized(resField->clazz));
@@ -515,7 +515,7 @@
     const char* utf8;
     u4 utf16Size;
 
-    LOGVV("+++ resolving string, referrer is %s\n", referrer->descriptor);
+    LOGVV("+++ resolving string, referrer is %s", referrer->descriptor);
 
     /*
      * Create a UTF-16 version so we can trivially compare it to what's
diff --git a/vm/reflect/Annotation.cpp b/vm/reflect/Annotation.cpp
index 1fe20a7..aa1b4e6 100644
--- a/vm/reflect/Annotation.cpp
+++ b/vm/reflect/Annotation.cpp
@@ -245,12 +245,12 @@
     resClass = dvmResolveClass(referrer, pMethodId->classIdx, true);
     if (resClass == NULL) {
         /* note exception will be pending */
-        LOGD("resolveAmbiguousMethod: unable to find class %d\n", methodIdx);
+        LOGD("resolveAmbiguousMethod: unable to find class %d", methodIdx);
         return NULL;
     }
     if (dvmIsInterfaceClass(resClass)) {
         /* method is part of an interface -- not expecting that */
-        LOGD("resolveAmbiguousMethod: method in interface?\n");
+        LOGD("resolveAmbiguousMethod: method in interface?");
         return NULL;
     }
 
@@ -330,7 +330,7 @@
     valueArg = valueType >> kDexAnnotationValueArgShift;
     width = valueArg + 1;       /* assume, correct later */
 
-    LOGV("----- type is 0x%02x %d, ptr=%p [0x%06x]\n",
+    LOGV("----- type is 0x%02x %d, ptr=%p [0x%06x]",
         valueType & kDexAnnotationValueTypeMask, valueArg, ptr-1,
         (ptr-1) - (u1*)clazz->pDvmDex->pDexFile->baseAddr);
 
@@ -485,11 +485,11 @@
             u4 size, count;
 
             size = readUleb128(&ptr);
-            LOGVV("--- annotation array, size is %u at %p\n", size, ptr);
+            LOGVV("--- annotation array, size is %u at %p", size, ptr);
             newArray = dvmAllocArrayByClass(gDvm.classJavaLangObjectArray,
                 size, ALLOC_DEFAULT);
             if (newArray == NULL) {
-                LOGE("annotation element array alloc failed (%d)\n", size);
+                LOGE("annotation element array alloc failed (%d)", size);
                 return false;
             }
 
@@ -531,7 +531,7 @@
         width = 0;
         break;
     default:
-        LOGE("Bad annotation element value byte 0x%02x (0x%02x)\n",
+        LOGE("Bad annotation element value byte 0x%02x (0x%02x)",
             valueType, valueType & kDexAnnotationValueTypeMask);
         assert(false);
         return false;
@@ -580,7 +580,7 @@
      * (valueObj->clazz->descriptor+1, valueObj->clazz->classLoader).
      */
     if (strcmp(valueObj->clazz->descriptor, "[Ljava/lang/Object;") != 0) {
-        LOGE("Unexpected src type class (%s)\n", valueObj->clazz->descriptor);
+        LOGE("Unexpected src type class (%s)", valueObj->clazz->descriptor);
         return NULL;
     }
     srcElemClass = gDvm.classJavaLangObject;
@@ -596,7 +596,7 @@
     } else {
         dstElemClass = dvmFindPrimitiveClass(firstChar);
     }
-    LOGV("HEY: converting valueObj from [%s to [%s\n",
+    LOGV("HEY: converting valueObj from [%s to [%s",
         srcElemClass->descriptor, dstElemClass->descriptor);
 
     ArrayObject* srcArray = (ArrayObject*) valueObj;
@@ -605,7 +605,7 @@
 
     newArray = dvmAllocArrayByClass(methodReturn, length, ALLOC_DEFAULT);
     if (newArray == NULL) {
-        LOGE("Failed creating duplicate annotation class (%s %d)\n",
+        LOGE("Failed creating duplicate annotation class (%s %d)",
             methodReturn->descriptor, length);
         goto bail;
     }
@@ -617,7 +617,7 @@
         success = dvmUnboxObjectArray(newArray, srcArray, dstElemClass);
     }
     if (!success) {
-        LOGE("Annotation array copy failed\n");
+        LOGE("Annotation array copy failed");
         dvmReleaseTrackedAlloc((Object*)newArray, self);
         newArray = NULL;
         goto bail;
@@ -660,7 +660,7 @@
     elementNameIdx = readUleb128(pPtr);
 
     if (!processAnnotationValue(clazz, pPtr, &avalue, kAllObjects)) {
-        LOGW("Failed processing annotation value\n");
+        LOGW("Failed processing annotation value");
         goto bail;
     }
     valueObj = (Object*)avalue.value.l;
@@ -676,7 +676,7 @@
     if (name != NULL) {
         Method* annoMeth = dvmFindVirtualMethodByName(annoClass, name);
         if (annoMeth == NULL) {
-            LOGW("WARNING: could not find annotation member %s in %s\n",
+            LOGW("WARNING: could not find annotation member %s in %s",
                 name, annoClass->descriptor);
         } else {
             methodObj = dvmCreateReflectMethodObject(annoMeth);
@@ -686,7 +686,7 @@
     if (newMember == NULL || nameObj == NULL || methodObj == NULL ||
         methodReturn == NULL)
     {
-        LOGE("Failed creating annotation element (m=%p n=%p a=%p r=%p)\n",
+        LOGE("Failed creating annotation element (m=%p n=%p a=%p r=%p)",
             newMember, nameObj, methodObj, methodReturn);
         goto bail;
     }
@@ -700,7 +700,7 @@
     dvmCallMethod(self, gDvm.methOrgApacheHarmonyLangAnnotationAnnotationMember_init,
         newMember, &unused, nameObj, valueObj, methodReturn, methodObj);
     if (dvmCheckException(self)) {
-        LOGD("Failed constructing annotation element\n");
+        LOGD("Failed constructing annotation element");
         goto bail;
     }
 
@@ -749,20 +749,20 @@
     typeIdx = readUleb128(&ptr);
     size = readUleb128(&ptr);
 
-    LOGVV("----- processEnc ptr=%p type=%d size=%d\n", ptr, typeIdx, size);
+    LOGVV("----- processEnc ptr=%p type=%d size=%d", ptr, typeIdx, size);
 
     annoClass = dvmDexGetResolvedClass(clazz->pDvmDex, typeIdx);
     if (annoClass == NULL) {
         annoClass = dvmResolveClass(clazz, typeIdx, true);
         if (annoClass == NULL) {
-            LOGE("Unable to resolve %s annotation class %d\n",
+            LOGE("Unable to resolve %s annotation class %d",
                 clazz->descriptor, typeIdx);
             assert(dvmCheckException(self));
             return NULL;
         }
     }
 
-    LOGV("----- processEnc ptr=%p [0x%06x]  typeIdx=%d size=%d class=%s\n",
+    LOGV("----- processEnc ptr=%p [0x%06x]  typeIdx=%d size=%d class=%s",
         *pPtr, *pPtr - (u1*) clazz->pDvmDex->pDexFile->baseAddr,
         typeIdx, size, annoClass->descriptor);
 
@@ -778,7 +778,7 @@
             gDvm.classOrgApacheHarmonyLangAnnotationAnnotationMemberArray,
             size, ALLOC_DEFAULT);
         if (elementArray == NULL) {
-            LOGE("failed to allocate annotation member array (%d elements)\n",
+            LOGE("failed to allocate annotation member array (%d elements)",
                 size);
             goto bail;
         }
@@ -801,7 +801,7 @@
         gDvm.methOrgApacheHarmonyLangAnnotationAnnotationFactory_createAnnotation,
         NULL, &result, annoClass, elementArray);
     if (dvmCheckException(self)) {
-        LOGD("Failed creating an annotation\n");
+        LOGD("Failed creating an annotation");
         //dvmLogExceptionStackTrace();
         goto bail;
     }
@@ -960,7 +960,7 @@
     valueArg = valueType >> kDexAnnotationValueArgShift;
     width = valueArg + 1;       /* assume */
 
-    LOGV("----- type is 0x%02x %d, ptr=%p [0x%06x]\n",
+    LOGV("----- type is 0x%02x %d, ptr=%p [0x%06x]",
         valueType & kDexAnnotationValueTypeMask, valueArg, ptr-1,
         (ptr-1) - (u1*)clazz->pDvmDex->pDexFile->baseAddr);
 
@@ -1000,7 +1000,7 @@
         width = 0;
         break;
     default:
-        LOGE("Bad annotation element value byte 0x%02x\n", valueType);
+        LOGE("Bad annotation element value byte 0x%02x", valueType);
         assert(false);
         return false;
     }
@@ -1146,7 +1146,7 @@
     /* find the annotation */
     ptr = searchEncodedAnnotation(clazz, pAnnoItem->annotation, annoName);
     if (ptr == NULL) {
-        LOGW("%s annotation lacks '%s' member\n", debugAnnoName, annoName);
+        LOGW("%s annotation lacks '%s' member", debugAnnoName, annoName);
         return GAV_FAILED;
     }
 
@@ -1155,7 +1155,7 @@
 
     /* make sure it has the expected format */
     if (avalue.type != expectedType) {
-        LOGW("%s %s has wrong type (0x%02x, expected 0x%02x)\n",
+        LOGW("%s %s has wrong type (0x%02x, expected 0x%02x)",
             debugAnnoName, annoName, avalue.type, expectedType);
         return GAV_FAILED;
     }
@@ -1412,18 +1412,18 @@
     const u1* ptr;
     ptr = searchEncodedAnnotation(clazz, pAnnoItem->annotation, "value");
     if (ptr == NULL) {
-        LOGW("EnclosingMethod annotation lacks 'value' member\n");
+        LOGW("EnclosingMethod annotation lacks 'value' member");
         return NULL;
     }
 
     /* parse it, verify the type */
     AnnotationValue avalue;
     if (!processAnnotationValue(clazz, &ptr, &avalue, kAllRaw)) {
-        LOGW("EnclosingMethod parse failed\n");
+        LOGW("EnclosingMethod parse failed");
         return NULL;
     }
     if (avalue.type != kDexAnnotationMethod) {
-        LOGW("EnclosingMethod value has wrong type (0x%02x, expected 0x%02x)\n",
+        LOGW("EnclosingMethod value has wrong type (0x%02x, expected 0x%02x)",
             avalue.type, kDexAnnotationMethod);
         return NULL;
     }
@@ -1469,14 +1469,14 @@
     const u1* ptr;
     ptr = searchEncodedAnnotation(clazz, pAnnoItem->annotation, "name");
     if (ptr == NULL) {
-        LOGW("InnerClass annotation lacks 'name' member\n");
+        LOGW("InnerClass annotation lacks 'name' member");
         return false;
     }
 
     /* parse it into an Object */
     AnnotationValue avalue;
     if (!processAnnotationValue(clazz, &ptr, &avalue, kAllObjects)) {
-        LOGD("processAnnotationValue failed on InnerClass member 'name'\n");
+        LOGD("processAnnotationValue failed on InnerClass member 'name'");
         return false;
     }
 
@@ -1484,7 +1484,7 @@
     if (avalue.type != kDexAnnotationNull &&
         avalue.type != kDexAnnotationString)
     {
-        LOGW("InnerClass name has bad type (0x%02x, expected STRING or NULL)\n",
+        LOGW("InnerClass name has bad type (0x%02x, expected STRING or NULL)",
             avalue.type);
         return false;
     }
@@ -1494,17 +1494,17 @@
 
     ptr = searchEncodedAnnotation(clazz, pAnnoItem->annotation, "accessFlags");
     if (ptr == NULL) {
-        LOGW("InnerClass annotation lacks 'accessFlags' member\n");
+        LOGW("InnerClass annotation lacks 'accessFlags' member");
         return false;
     }
 
     /* parse it, verify the type */
     if (!processAnnotationValue(clazz, &ptr, &avalue, kAllRaw)) {
-        LOGW("InnerClass accessFlags parse failed\n");
+        LOGW("InnerClass accessFlags parse failed");
         return false;
     }
     if (avalue.type != kDexAnnotationInt) {
-        LOGW("InnerClass value has wrong type (0x%02x, expected 0x%02x)\n",
+        LOGW("InnerClass value has wrong type (0x%02x, expected 0x%02x)",
             avalue.type, kDexAnnotationInt);
         return false;
     }
@@ -1616,7 +1616,7 @@
     if (hi < lo) {
         /* this should be impossible -- the method came out of this DEX */
         char* desc = dexProtoCopyMethodDescriptor(&method->prototype);
-        LOGE("Unable to find method %s.%s %s in DEX file!\n",
+        LOGE("Unable to find method %s.%s %s in DEX file!",
             method->clazz->descriptor, method->name, desc);
         free(desc);
         dvmAbort();
@@ -1833,11 +1833,11 @@
     const u1* ptr;
     ptr = searchEncodedAnnotation(clazz, pAnnoItem->annotation, "value");
     if (ptr == NULL) {
-        LOGW("AnnotationDefault annotation lacks 'value'\n");
+        LOGW("AnnotationDefault annotation lacks 'value'");
         return NULL;
     }
     if ((*ptr & kDexAnnotationValueTypeMask) != kDexAnnotationAnnotation) {
-        LOGW("AnnotationDefault value has wrong type (0x%02x)\n",
+        LOGW("AnnotationDefault value has wrong type (0x%02x)",
             *ptr & kDexAnnotationValueTypeMask);
         return NULL;
     }
@@ -1855,7 +1855,7 @@
     /* got it, pull it out */
     AnnotationValue avalue;
     if (!processAnnotationValue(clazz, &ptr, &avalue, kAllObjects)) {
-        LOGD("processAnnotationValue failed on default for '%s'\n",
+        LOGD("processAnnotationValue failed on default for '%s'",
             method->name);
         return NULL;
     }
@@ -1925,7 +1925,7 @@
 
     if (hi < lo) {
         /* this should be impossible -- the field came out of this DEX */
-        LOGE("Unable to find field %s.%s %s in DEX file!\n",
+        LOGE("Unable to find field %s.%s %s in DEX file!",
             field->clazz->descriptor, field->name, field->signature);
         dvmAbort();
     }
@@ -2076,7 +2076,7 @@
     annoArrayArray = dvmAllocArrayByClass(
         gDvm.classJavaLangAnnotationAnnotationArrayArray, count, ALLOC_DEFAULT);
     if (annoArrayArray == NULL) {
-        LOGW("annotation set ref array alloc failed\n");
+        LOGW("annotation set ref array alloc failed");
         goto bail;
     }
 
@@ -2092,7 +2092,7 @@
                                                  pAnnoSet,
                                                  kDexVisibilityRuntime);
         if (annoSet == NULL) {
-            LOGW("processAnnotationSet failed\n");
+            LOGW("processAnnotationSet failed");
             annoArrayArray = NULL;
             goto bail;
         }
diff --git a/vm/reflect/Proxy.cpp b/vm/reflect/Proxy.cpp
index 52eebab..f23dd75 100644
--- a/vm/reflect/Proxy.cpp
+++ b/vm/reflect/Proxy.cpp
@@ -75,7 +75,7 @@
         return NULL;
     }
 
-    LOGV("+++ Generate proxy class '%s' %p from %d interface classes\n",
+    LOGV("+++ Generate proxy class '%s' %p from %d interface classes",
         nameStr, loader, interfaces->length);
 
 
@@ -190,7 +190,7 @@
      */
     newClass->status = CLASS_LOADED;
     if (!dvmLinkClass(newClass)) {
-        LOGD("Proxy class link failed\n");
+        LOGD("Proxy class link failed");
         goto bail;
     }
 
@@ -200,7 +200,7 @@
      * with a duplicate name.
      */
     if (!dvmAddClassToHash(newClass)) {
-        LOGE("ERROR: attempted to generate %s more than once\n",
+        LOGE("ERROR: attempted to generate %s more than once",
             newClass->descriptor);
         goto bail;
     }
@@ -258,7 +258,7 @@
     for (i = 0; i < numInterfaces; i++, classes++) {
         ClassObject* clazz = *classes;
 
-        LOGVV("---  %s virtualMethodCount=%d\n",
+        LOGVV("---  %s virtualMethodCount=%d",
             clazz->descriptor, clazz->virtualMethodCount);
         maxCount += clazz->virtualMethodCount;
 
@@ -266,7 +266,7 @@
         for (j = 0; j < clazz->iftableCount; j++) {
             ClassObject* iclass = clazz->iftable[j].clazz;
 
-            LOGVV("---  +%s %d\n",
+            LOGVV("---  +%s %d",
                 iclass->descriptor, iclass->virtualMethodCount);
             maxCount += iclass->virtualMethodCount;
         }
@@ -329,9 +329,9 @@
     if (actualCount < 0)
         goto bail;
 
-    //LOGI("gathered methods:\n");
+    //LOGI("gathered methods:");
     //for (i = 0; i < actualCount; i++) {
-    //    LOGI(" %d: %s.%s\n",
+    //    LOGI(" %d: %s.%s",
     //        i, methods[i]->clazz->descriptor, methods[i]->name);
     //}
 
@@ -419,7 +419,7 @@
                  * type or void, the types must match exactly, or we throw
                  * an exception now.
                  */
-                LOGV("MATCH on %s.%s and %s.%s\n",
+                LOGV("MATCH on %s.%s and %s.%s",
                     allMethods[i]->clazz->descriptor, allMethods[i]->name,
                     allMethods[j]->clazz->descriptor, allMethods[j]->name);
                 dupe = true;
@@ -437,7 +437,7 @@
          */
         if (dupe) {
             if (best) {
-                LOGV("BEST %d %s.%s -> %d\n", i,
+                LOGV("BEST %d %s.%s -> %d", i,
                     allMethods[i]->clazz->descriptor, allMethods[i]->name,
                     outCount);
 
@@ -458,7 +458,7 @@
                     if (dvmCompareMethodNamesAndParameterProtos(allMethods[i],
                             allMethods[j]) == 0)
                     {
-                        LOGV("DEL %d %s.%s\n", j,
+                        LOGV("DEL %d %s.%s", j,
                             allMethods[j]->clazz->descriptor,
                             allMethods[j]->name);
 
@@ -492,7 +492,7 @@
                             gDvm.classJavaLangClassArray, commonCount,
                             ALLOC_DEFAULT);
                     if (throwArray == NULL) {
-                        LOGE("common-throw array alloc failed\n");
+                        LOGE("common-throw array alloc failed");
                         return -1;
                     }
 
@@ -514,13 +514,13 @@
 
                 dvmPointerSetFree(commonThrows);
             } else {
-                LOGV("BEST not %d\n", i);
+                LOGV("BEST not %d", i);
             }
         } else {
             /*
              * Singleton.  Copy the entry and NULL it out.
              */
-            LOGV("COPY singleton %d %s.%s -> %d\n", i,
+            LOGV("COPY singleton %d %s.%s -> %d", i,
                 allMethods[i]->clazz->descriptor, allMethods[i]->name,
                 outCount);
 
@@ -544,7 +544,7 @@
      */
     for (i = 0; i < allCount; i++) {
         if (allMethods[i] != NULL) {
-            LOGV("BAD DUPE: %d %s.%s\n", i,
+            LOGV("BAD DUPE: %d %s.%s", i,
                 allMethods[i]->clazz->descriptor, allMethods[i]->name);
             dvmThrowIllegalArgumentException(
                 "incompatible return types in proxied interfaces");
@@ -893,11 +893,11 @@
     invoke = dvmFindVirtualMethodHierByDescriptor(handler->clazz, "invoke",
             "(Ljava/lang/Object;Ljava/lang/reflect/Method;[Ljava/lang/Object;)Ljava/lang/Object;");
     if (invoke == NULL) {
-        LOGE("Unable to find invoke()\n");
+        LOGE("Unable to find invoke()");
         dvmAbort();
     }
 
-    LOGV("invoke: %s.%s, this=%p, handler=%s\n",
+    LOGV("invoke: %s.%s, this=%p, handler=%s",
         method->clazz->descriptor, method->name,
         thisObj, handler->clazz->descriptor);
 
@@ -925,12 +925,12 @@
     returnType = dvmGetBoxedReturnType(method);
     if (returnType == NULL) {
         char* desc = dexProtoCopyMethodDescriptor(&method->prototype);
-        LOGE("Could not determine return type for '%s'\n", desc);
+        LOGE("Could not determine return type for '%s'", desc);
         free(desc);
         assert(dvmCheckException(self));
         goto bail;
     }
-    LOGV("  return type will be %s\n", returnType->descriptor);
+    LOGV("  return type will be %s", returnType->descriptor);
 
     /*
      * Convert "args" array into Object[] array, using the method
@@ -968,7 +968,7 @@
      * primitive type, throw a NullPointerException.
      */
     if (returnType->primitiveType == PRIM_VOID) {
-        LOGVV("+++ ignoring return to void\n");
+        LOGVV("+++ ignoring return to void");
     } else if (invokeResult.l == NULL) {
         if (dvmIsPrimitiveClass(returnType)) {
             dvmThrowNullPointerException(
diff --git a/vm/reflect/Reflect.cpp b/vm/reflect/Reflect.cpp
index acd4c41..28086f4 100644
--- a/vm/reflect/Reflect.cpp
+++ b/vm/reflect/Reflect.cpp
@@ -49,12 +49,12 @@
 
         clazz = dvmFindClassNoInit(*ccp, NULL);
         if (clazz == NULL) {
-            LOGE("Couldn't find '%s'\n", *ccp);
+            LOGE("Couldn't find '%s'", *ccp);
             return false;
         }
 
         if (clazz->ifieldCount != 1) {
-            LOGE("Found %d instance fields in '%s'\n",
+            LOGE("Found %d instance fields in '%s'",
                 clazz->ifieldCount, *ccp);
             return false;
         }
@@ -107,7 +107,7 @@
     }
 
     if (clazz == NULL) {
-        LOGW("Unable to match class for part: '%s'\n", *pSignature);
+        LOGW("Unable to match class for part: '%s'", *pSignature);
     }
     *pSignature = signature;
     return clazz;
@@ -146,7 +146,7 @@
         }
         cp++;
     }
-    LOGVV("REFLECT found %d parameters in '%s'\n", count, *pSignature);
+    LOGVV("REFLECT found %d parameters in '%s'", count, *pSignature);
 
     /* create an array to hold them */
     ArrayObject* classArray = dvmAllocArrayByClass(gDvm.classJavaLangClassArray,
@@ -162,7 +162,7 @@
             assert(dvmCheckException(dvmThreadSelf()));
             return NULL;
         }
-        LOGVV("REFLECT  %d: '%s'\n", i, clazz->descriptor);
+        LOGVV("REFLECT  %d: '%s'", i, clazz->descriptor);
         dvmSetObjectArrayElement(classArray, i, (Object *)clazz);
     }
 
@@ -250,7 +250,7 @@
     dvmCallMethod(dvmThreadSelf(), gDvm.methJavaLangReflectField_init,
         fieldObj, &unused, clazz, type, nameObj, slot);
     if (dvmCheckException(dvmThreadSelf())) {
-        LOGD("Field class init threw exception\n");
+        LOGD("Field class init threw exception");
         goto bail;
     }
 
@@ -430,7 +430,7 @@
     dvmCallMethod(dvmThreadSelf(), gDvm.methJavaLangReflectConstructor_init,
         consObj, &unused, meth->clazz, params, exceptions, slot);
     if (dvmCheckException(dvmThreadSelf())) {
-        LOGD("Constructor class init threw exception\n");
+        LOGD("Constructor class init threw exception");
         goto bail;
     }
 
@@ -583,7 +583,7 @@
         methObj, &unused, meth->clazz, params, exceptions, returnType,
         nameObj, slot);
     if (dvmCheckException(dvmThreadSelf())) {
-        LOGD("Method class init threw exception\n");
+        LOGD("Method class init threw exception");
         goto bail;
     }
 
@@ -984,7 +984,7 @@
         case ItoF: *(float*) dstPtr = (float) (*(int*) srcPtr);         return 1;
         case JtoF: *(float*) dstPtr = (float) (*(long long*) srcPtr);   return 1;
         case bad: {
-            LOGV("illegal primitive conversion: '%s' to '%s'\n",
+            LOGV("illegal primitive conversion: '%s' to '%s'",
                     dexGetPrimitiveTypeDescriptor(srcType),
                     dexGetPrimitiveTypeDescriptor(dstType));
             return -1;
@@ -1013,7 +1013,7 @@
 
         srcType = getBoxedType(arg);
         if (srcType == PRIM_NOT) {     // didn't pass a boxed primitive in
-            LOGVV("conv arg: type '%s' not boxed primitive\n",
+            LOGVV("conv arg: type '%s' not boxed primitive",
                 arg->clazz->descriptor);
             return -1;
         }
@@ -1029,7 +1029,7 @@
             *destPtr = (s4) arg;
             retVal = 1;
         } else {
-            LOGVV("Arg %p (%s) not compatible with %s\n",
+            LOGVV("Arg %p (%s) not compatible with %s",
                 arg, arg->clazz->descriptor, type->descriptor);
             retVal = -1;
         }
@@ -1070,7 +1070,7 @@
 
     wrapperClass = dvmFindSystemClass(classDescriptor);
     if (wrapperClass == NULL) {
-        LOGW("Unable to find '%s'\n", classDescriptor);
+        LOGW("Unable to find '%s'", classDescriptor);
         assert(dvmCheckException(dvmThreadSelf()));
         return NULL;
     }
@@ -1109,7 +1109,7 @@
 
     if (typeIndex == PRIM_NOT) {
         if (value != NULL && !dvmInstanceof(value->clazz, returnType)) {
-            LOGD("wrong object type: %s %s\n",
+            LOGD("wrong object type: %s %s",
                 value->clazz->descriptor, returnType->descriptor);
             return false;
         }
@@ -1129,7 +1129,7 @@
     if (dvmConvertPrimitiveValue(valueIndex, typeIndex,
             (s4*) ((DataObject*)value)->instanceData, (s4*)pResult) < 0)
     {
-        LOGV("Prim conversion failed\n");
+        LOGV("Prim conversion failed");
         return false;
     }
 
@@ -1165,7 +1165,7 @@
     default: {
         /* should not have passed verification */
         char* desc = dexProtoCopyMethodDescriptor(&meth->prototype);
-        LOGE("Bad return type in signature '%s'\n", desc);
+        LOGE("Bad return type in signature '%s'", desc);
         free(desc);
         dvmThrowInternalError(NULL);
         return NULL;
diff --git a/vm/test/TestHash.cpp b/vm/test/TestHash.cpp
index 9eabbb6..d03fe49 100644
--- a/vm/test/TestHash.cpp
+++ b/vm/test/TestHash.cpp
@@ -44,7 +44,7 @@
     //printf("Print from foreach:\n");
     dvmHashForeach(pTab, printFunc, &count);
     if (count != kNumTestEntries) {
-        LOGE("TestHash foreach test failed\n");
+        LOGE("TestHash foreach test failed");
         assert(false);
     }
 }
@@ -67,7 +67,7 @@
         count++;
     }
     if (count != kNumTestEntries) {
-        LOGE("TestHash iterator test failed\n");
+        LOGE("TestHash iterator test failed");
         assert(false);
     }
 }
@@ -83,7 +83,7 @@
     u4 hash;
     int i;
 
-    LOGV("TestHash BEGIN\n");
+    LOGV("TestHash BEGIN");
 
     pTab = dvmHashTableCreate(dvmHashSize(12), free);
     if (pTab == NULL)
@@ -108,7 +108,7 @@
         str = (const char*) dvmHashTableLookup(pTab, hash, tmpStr,
                 (HashCompareFunc) strcmp, false);
         if (str == NULL) {
-            LOGE("TestHash: failure: could not find '%s'\n", tmpStr);
+            LOGE("TestHash: failure: could not find '%s'", tmpStr);
             /* return false */
         }
     }
@@ -121,7 +121,7 @@
     if (str == NULL) {
         /* good */
     } else {
-        LOGE("TestHash found nonexistent string (improper add?)\n");
+        LOGE("TestHash found nonexistent string (improper add?)");
     }
 
     dumpForeach(pTab);
@@ -150,7 +150,7 @@
 
     /* remove the first one */
     if (!dvmHashTableRemove(pTab, hash, (void*)str1))
-        LOGE("TestHash failed to delete item\n");
+        LOGE("TestHash failed to delete item");
     else
         free((void*)str1);     // "Remove" doesn't call the free func
 
@@ -163,7 +163,7 @@
         count++;
     }
     if (count != 1) {
-        LOGE("TestHash wrong number of entries (%d)\n", count);
+        LOGE("TestHash wrong number of entries (%d)", count);
     }
 
     /* see if we can find them */
@@ -174,7 +174,7 @@
     str = (const char*) dvmHashTableLookup(pTab, hash, (void*)"two",
             (HashCompareFunc) strcmp,false);
     if (str == NULL)
-        LOGE("TestHash entry vanished\n");
+        LOGE("TestHash entry vanished");
 
     /* force a table realloc to exercise tombstone removal */
     for (i = 0; i < 20; i++) {
@@ -185,7 +185,7 @@
     }
 
     dvmHashTableFree(pTab);
-    LOGV("TestHash END\n");
+    LOGV("TestHash END");
 
     return true;
 }
diff --git a/vm/test/TestIndirectRefTable.cpp b/vm/test/TestIndirectRefTable.cpp
index a72e2b0..de68c20 100644
--- a/vm/test/TestIndirectRefTable.cpp
+++ b/vm/test/TestIndirectRefTable.cpp
@@ -50,7 +50,7 @@
 
     iref0 = (IndirectRef) 0x11110;
     if (dvmRemoveFromIndirectRefTable(&irt, cookie, iref0)) {
-        LOGE("unexpectedly successful removal\n");
+        LOGE("unexpectedly successful removal");
         goto bail;
     }
 
@@ -62,7 +62,7 @@
     iref1 = dvmAddToIndirectRefTable(&irt, cookie, obj1);
     iref2 = dvmAddToIndirectRefTable(&irt, cookie, obj2);
     if (iref0 == NULL || iref1 == NULL || iref2 == NULL) {
-        LOGE("trivial add1 failed\n");
+        LOGE("trivial add1 failed");
         goto bail;
     }
 
@@ -70,7 +70,7 @@
         dvmGetFromIndirectRefTable(&irt, iref1) != obj1 ||
         dvmGetFromIndirectRefTable(&irt, iref2) != obj2)
     {
-        LOGE("objects don't match expected values %p %p %p vs. %p %p %p\n",
+        LOGE("objects don't match expected values %p %p %p vs. %p %p %p",
             dvmGetFromIndirectRefTable(&irt, iref0),
             dvmGetFromIndirectRefTable(&irt, iref1),
             dvmGetFromIndirectRefTable(&irt, iref2),
@@ -84,19 +84,19 @@
         !dvmRemoveFromIndirectRefTable(&irt, cookie, iref1) ||
         !dvmRemoveFromIndirectRefTable(&irt, cookie, iref2))
     {
-        LOGE("fifo deletion failed\n");
+        LOGE("fifo deletion failed");
         goto bail;
     }
 
     /* table should be empty now */
     if (dvmIndirectRefTableEntries(&irt) != 0) {
-        LOGE("fifo del not empty\n");
+        LOGE("fifo del not empty");
         goto bail;
     }
 
     /* get invalid entry (off the end of the list) */
     if (dvmGetFromIndirectRefTable(&irt, iref0) != kInvalidIndirectRefObject) {
-        LOGE("stale entry get succeeded unexpectedly\n");
+        LOGE("stale entry get succeeded unexpectedly");
         goto bail;
     }
 
@@ -108,7 +108,7 @@
     iref1 = dvmAddToIndirectRefTable(&irt, cookie, obj1);
     iref2 = dvmAddToIndirectRefTable(&irt, cookie, obj2);
     if (iref0 == NULL || iref1 == NULL || iref2 == NULL) {
-        LOGE("trivial add2 failed\n");
+        LOGE("trivial add2 failed");
         goto bail;
     }
 
@@ -116,13 +116,13 @@
         !dvmRemoveFromIndirectRefTable(&irt, cookie, iref1) ||
         !dvmRemoveFromIndirectRefTable(&irt, cookie, iref0))
     {
-        LOGE("lifo deletion failed\n");
+        LOGE("lifo deletion failed");
         goto bail;
     }
 
     /* table should be empty now */
     if (dvmIndirectRefTableEntries(&irt) != 0) {
-        LOGE("lifo del not empty\n");
+        LOGE("lifo del not empty");
         goto bail;
     }
 
@@ -135,12 +135,12 @@
     iref1 = dvmAddToIndirectRefTable(&irt, cookie, obj1);
     iref2 = dvmAddToIndirectRefTable(&irt, cookie, obj2);
     if (iref0 == NULL || iref1 == NULL || iref2 == NULL) {
-        LOGE("trivial add3 failed\n");
+        LOGE("trivial add3 failed");
         goto bail;
     }
 
     if (dvmIndirectRefTableEntries(&irt) != 3) {
-        LOGE("expected 3 entries, found %d\n",
+        LOGE("expected 3 entries, found %d",
             dvmIndirectRefTableEntries(&irt));
         goto bail;
     }
@@ -148,26 +148,26 @@
     if (!dvmRemoveFromIndirectRefTable(&irt, cookie, iref1) ||
         dvmRemoveFromIndirectRefTable(&irt, cookie, iref1))
     {
-        LOGE("unorder deletion1 failed\n");
+        LOGE("unorder deletion1 failed");
         goto bail;
     }
 
     /* get invalid entry (from hole) */
     if (dvmGetFromIndirectRefTable(&irt, iref1) != kInvalidIndirectRefObject) {
-        LOGE("hole get succeeded unexpectedly\n");
+        LOGE("hole get succeeded unexpectedly");
         goto bail;
     }
 
     if (!dvmRemoveFromIndirectRefTable(&irt, cookie, iref2) ||
         !dvmRemoveFromIndirectRefTable(&irt, cookie, iref0))
     {
-        LOGE("unorder deletion2 failed\n");
+        LOGE("unorder deletion2 failed");
         goto bail;
     }
 
     /* table should be empty now */
     if (dvmIndirectRefTableEntries(&irt) != 0) {
-        LOGE("unorder del not empty\n");
+        LOGE("unorder del not empty");
         goto bail;
     }
 
@@ -182,36 +182,36 @@
     iref2 = dvmAddToIndirectRefTable(&irt, cookie, obj2);
     iref3 = dvmAddToIndirectRefTable(&irt, cookie, obj3);
     if (iref0 == NULL || iref1 == NULL || iref2 == NULL || iref3 == NULL) {
-        LOGE("trivial add4 failed\n");
+        LOGE("trivial add4 failed");
         goto bail;
     }
     if (!dvmRemoveFromIndirectRefTable(&irt, cookie, iref1)) {
-        LOGE("remove 1 of 4 failed\n");
+        LOGE("remove 1 of 4 failed");
         goto bail;
     }
     iref1 = dvmAddToIndirectRefTable(&irt, cookie, obj1);
     if (dvmIndirectRefTableEntries(&irt) != 4) {
-        LOGE("hole not filled\n");
+        LOGE("hole not filled");
         goto bail;
     }
     if (!dvmRemoveFromIndirectRefTable(&irt, cookie, iref1) ||
         !dvmRemoveFromIndirectRefTable(&irt, cookie, iref3))
     {
-        LOGE("remove 1/3 failed\n");
+        LOGE("remove 1/3 failed");
         goto bail;
     }
     if (dvmIndirectRefTableEntries(&irt) != 3) {
-        LOGE("should be 3 after two deletions\n");
+        LOGE("should be 3 after two deletions");
         goto bail;
     }
     if (!dvmRemoveFromIndirectRefTable(&irt, cookie, iref2) ||
         !dvmRemoveFromIndirectRefTable(&irt, cookie, iref0))
     {
-        LOGE("remove 2/0 failed\n");
+        LOGE("remove 2/0 failed");
         goto bail;
     }
     if (dvmIndirectRefTableEntries(&irt) != 0) {
-        LOGE("not empty after split remove\n");
+        LOGE("not empty after split remove");
         goto bail;
     }
 
@@ -225,15 +225,15 @@
     dvmRemoveFromIndirectRefTable(&irt, cookie, iref0);
     iref1 = dvmAddToIndirectRefTable(&irt, cookie, obj1);
     if (dvmRemoveFromIndirectRefTable(&irt, cookie, iref0)) {
-        LOGE("mismatched del succeeded (%p vs %p)\n", iref0, iref1);
+        LOGE("mismatched del succeeded (%p vs %p)", iref0, iref1);
         goto bail;
     }
     if (!dvmRemoveFromIndirectRefTable(&irt, cookie, iref1)) {
-        LOGE("switched del failed\n");
+        LOGE("switched del failed");
         goto bail;
     }
     if (dvmIndirectRefTableEntries(&irt) != 0) {
-        LOGE("switching del not empty\n");
+        LOGE("switching del not empty");
         goto bail;
     }
 
@@ -247,16 +247,16 @@
     if (iref0 != iref1) {
         /* try 0, should not work */
         if (dvmRemoveFromIndirectRefTable(&irt, cookie, iref0)) {
-            LOGE("temporal del succeeded (%p vs %p)\n", iref0, iref1);
+            LOGE("temporal del succeeded (%p vs %p)", iref0, iref1);
             goto bail;
         }
     }
     if (!dvmRemoveFromIndirectRefTable(&irt, cookie, iref1)) {
-        LOGE("temporal cleanup failed\n");
+        LOGE("temporal cleanup failed");
         goto bail;
     }
     if (dvmIndirectRefTableEntries(&irt) != 0) {
-        LOGE("temporal del not empty\n");
+        LOGE("temporal del not empty");
         goto bail;
     }
 
@@ -268,37 +268,37 @@
     for (i = 0; i < kTableMax; i++) {
         manyRefs[i] = dvmAddToIndirectRefTable(&irt, cookie, obj0);
         if (manyRefs[i] == NULL) {
-            LOGE("Failed adding %d of %d\n", i, kTableMax);
+            LOGE("Failed adding %d of %d", i, kTableMax);
             goto bail;
         }
     }
     if (dvmAddToIndirectRefTable(&irt, cookie, obj0) != NULL) {
-        LOGE("Table overflow succeeded\n");
+        LOGE("Table overflow succeeded");
         goto bail;
     }
     if (dvmIndirectRefTableEntries(&irt) != (size_t)kTableMax) {
-        LOGE("Expected %d entries, found %d\n",
+        LOGE("Expected %d entries, found %d",
             kTableMax, dvmIndirectRefTableEntries(&irt));
         goto bail;
     }
     for (i = 0; i < kTableMax-1; i++) {
         if (!dvmRemoveFromIndirectRefTable(&irt, cookie, manyRefs[i])) {
-            LOGE("multi-remove failed at %d\n", i);
+            LOGE("multi-remove failed at %d", i);
             goto bail;
         }
     }
     /* because of removal order, should have 20 entries, 19 of them holes */
     if (dvmIndirectRefTableEntries(&irt) != (size_t)kTableMax) {
-        LOGE("Expected %d entries (with holes), found %d\n",
+        LOGE("Expected %d entries (with holes), found %d",
             kTableMax, dvmIndirectRefTableEntries(&irt));
         goto bail;
     }
     if (!dvmRemoveFromIndirectRefTable(&irt, cookie, manyRefs[kTableMax-1])) {
-        LOGE("multi-remove final failed\n");
+        LOGE("multi-remove final failed");
         goto bail;
     }
     if (dvmIndirectRefTableEntries(&irt) != 0) {
-        LOGE("multi-del not empty\n");
+        LOGE("multi-del not empty");
         goto bail;
     }
 
@@ -351,17 +351,17 @@
     if (dvmRemoveFromIndirectRefTable(&irt, cookie, iref0) ||
         dvmRemoveFromIndirectRefTable(&irt, cookie, iref1))
     {
-        LOGE("removed values from earlier segment\n");
+        LOGE("removed values from earlier segment");
         goto bail;
     }
     if (!dvmRemoveFromIndirectRefTable(&irt, cookie, iref2) ||
         !dvmRemoveFromIndirectRefTable(&irt, cookie, iref3))
     {
-        LOGE("unable to remove values from current segment\n");
+        LOGE("unable to remove values from current segment");
         goto bail;
     }
     if (dvmIndirectRefTableEntries(&irt) != 2) {
-        LOGE("wrong total entries\n");
+        LOGE("wrong total entries");
         goto bail;
     }
     dvmPopIndirectRefTableSegment(&irt, segmentState[1]);
@@ -369,11 +369,11 @@
     if (!dvmRemoveFromIndirectRefTable(&irt, cookie, iref0) ||
         !dvmRemoveFromIndirectRefTable(&irt, cookie, iref1))
     {
-        LOGE("unable to remove values from first segment\n");
+        LOGE("unable to remove values from first segment");
         goto bail;
     }
     if (dvmIndirectRefTableEntries(&irt) != 0) {
-        LOGE("basic push/pop not empty\n");
+        LOGE("basic push/pop not empty");
         goto bail;
     }
 
@@ -392,12 +392,12 @@
     dvmPopIndirectRefTableSegment(&irt, segmentState[1]);
     cookie = segmentState[0];
     if (dvmIndirectRefTableEntries(&irt) != 2) {
-        LOGE("wrong total entries after pop\n");
+        LOGE("wrong total entries after pop");
         goto bail;
     }
     dvmRemoveFromIndirectRefTable(&irt, cookie, iref1);
     if (dvmIndirectRefTableEntries(&irt) != 0) {
-        LOGE("not back to zero after pop + del\n");
+        LOGE("not back to zero after pop + del");
         goto bail;
     }
 
@@ -420,7 +420,7 @@
         dvmGetFromIndirectRefTable(&irt, iref2) != obj2 ||
         dvmGetFromIndirectRefTable(&irt, iref3) != obj3)
     {
-        LOGE("Unable to retrieve all multiseg objects\n");
+        LOGE("Unable to retrieve all multiseg objects");
         goto bail;
     }
 
@@ -433,13 +433,13 @@
 
     dvmRemoveFromIndirectRefTable(&irt, cookie, iref3);
     if (dvmRemoveFromIndirectRefTable(&irt, cookie, iref2)) {
-        LOGE("multiseg del2 worked\n");
+        LOGE("multiseg del2 worked");
         goto bail;
     }
     dvmPopIndirectRefTableSegment(&irt, segmentState[3]);
     cookie = segmentState[2];
     if (!dvmRemoveFromIndirectRefTable(&irt, cookie, iref2)) {
-        LOGE("multiseg del2b failed (cookie=0x%08x ref=%p)\n", cookie, iref2);
+        LOGE("multiseg del2b failed (cookie=0x%08x ref=%p)", cookie, iref2);
         goto bail;
     }
     iref2 = dvmAddToIndirectRefTable(&irt, cookie, obj2);
@@ -449,13 +449,13 @@
     cookie = segmentState[0];
 
     if (dvmIndirectRefTableEntries(&irt) != 2) {
-        LOGE("Unexpected entry count in multiseg\n");
+        LOGE("Unexpected entry count in multiseg");
         goto bail;
     }
     dvmRemoveFromIndirectRefTable(&irt, cookie, iref0);
     dvmRemoveFromIndirectRefTable(&irt, cookie, iref1);
     if (dvmIndirectRefTableEntries(&irt) != 0) {
-        LOGE("Unexpected entry count at multiseg end\n");
+        LOGE("Unexpected entry count at multiseg end");
         goto bail;
     }
 
@@ -474,11 +474,11 @@
 bool dvmTestIndirectRefTable()
 {
     if (!basicTest()) {
-        LOGE("IRT basic test failed\n");
+        LOGE("IRT basic test failed");
         return false;
     }
     if (!segmentTest()) {
-        LOGE("IRT segment test failed\n");
+        LOGE("IRT segment test failed");
         return false;
     }