)]}'
{
  "log": [
    {
      "commit": "f795869da0a1fa006fdcdacd8afb6149a63fc1a7",
      "tree": "b4cd23012e62b80788870f2c85c30fc6032299fa",
      "parents": [
        "430afefe1cced35cf5eb12ce7a6dcbfc5007c97e"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Tue Jun 09 14:09:14 2015 +0200"
      },
      "committer": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Tue Jun 09 17:17:09 2015 +0200"
      },
      "message": "Follow up on CL 151605\n\n- Fixes return type of StackedShadowFrameRecord::GetType\n- Makes StackedShadowFrameType an enum class (scoped enum)\n- Moves DeoptimizationReturnValueRecord and StackedShadowFrameRecord\n  to thread.cc file and use forward declaration in thread.h header\n- Fixes tools/generate-operator-out.py for scoped enum classes.\n\nBug: 20845490\nChange-Id: I6b67e288b1db563699161e58ec2e2330d42dd8f5\n"
    },
    {
      "commit": "1f2d3ba6af52cf6f566deb38b7e07735c9a08fb6",
      "tree": "af6ae612d43c50703292d39a8a0b37dda3f919a6",
      "parents": [
        "ccd6337f31d13706c602f3d9436e9b4025075b63"
      ],
      "author": {
        "name": "Mingyao Yang",
        "email": "mingyao@google.com",
        "time": "Mon May 18 12:12:50 2015 -0700"
      },
      "committer": {
        "name": "Mingyao Yang",
        "email": "mingyao@google.com",
        "time": "Mon Jun 08 00:53:55 2015 -0700"
      },
      "message": "Fix nested deoptimization.\n\nHandle nested deoptimization cases. Create a stacked shadow frame\nrecords to keep track of deoptimization shadow frames. Shadow frames\nunder construction can be tracked in the same stack.\n\nBug: 20845490\nChange-Id: I768285792c29e7c3cfcd21e7a2600802506024d8\n"
    },
    {
      "commit": "e401d146407d61eeb99f8d6176b2ac13c4df1e33",
      "tree": "17927f9bfe7d2041b5942c89832d55f9dedb24c5",
      "parents": [
        "2006b7b9b8e32722bd0d640c62549d8a0ac624b6"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed Apr 22 13:56:20 2015 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri May 29 18:45:49 2015 -0700"
      },
      "message": "Move mirror::ArtMethod to native\n\nOptimizing + quick tests are passing, devices boot.\n\nTODO: Test and fix bugs in mips64.\n\nSaves 16 bytes per most ArtMethod, 7.5MB reduction in system PSS.\nSome of the savings are from removal of virtual methods and direct\nmethods object arrays.\n\nBug: 19264997\nChange-Id: I622469a0cfa0e7082a2119f3d6a9491eb61e3f3d\n"
    },
    {
      "commit": "8e5bd18fc665d7ec5461ea068e98740a65da754c",
      "tree": "83441cdfdab06709b573aad2ab731cc65c10b9f1",
      "parents": [
        "cdeb0b5fede4c06488f43a212591e661d946bc78"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed May 06 11:34:34 2015 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon May 11 15:23:25 2015 +0100"
      },
      "message": "Add a flag to StackVisitor for inlining.\n\nThe flag tells whether the stack walk needs to include inlined\nJava frames.\n\nThis does not do anything just yet, as we\u0027re not inlining anyways.\n\nChange-Id: I716e25094fe56fa335ca1f9a398c1bcdba478e73\n"
    },
    {
      "commit": "50030ef998be09789da4a9a56738362852068f12",
      "tree": "02df1bd0954f9b970434d1363466b0cfe182bc12",
      "parents": [
        "6727a48193db2a0cf01af971cccffe1a6518c247"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri May 08 14:19:26 2015 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri May 08 15:09:17 2015 -0700"
      },
      "message": "Check IsReferenceVReg during deopt\n\nRequired since the quick GC maps may not agree with the verifier\nones. Without this check we may copy stale object references into\nthe shadow frame.\n\n(cherry picked from commit f00baf56ef647684888a407dbb6adadd704a2039)\n\nBug: 20736048\nChange-Id: I7783c8a8ee45cf601b08b4c38f1dec7f7d11380c\n"
    },
    {
      "commit": "241a9588c6d7d0fcb4c92da40c7141863930083a",
      "tree": "4a6868893dc742f6322775d198a2305f645f2f3f",
      "parents": [
        "a93b104b47da67eaa50f8a6b7280cc6c438ef37b"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Mon Apr 27 15:19:41 2015 -0700"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Mon May 04 12:10:07 2015 -0700"
      },
      "message": "Fix mismatched new[]/delete.\n\nAnother two cases where a new[] is used but only a delete occurs.\n\nBug: 18202869\nChange-Id: If68264807150f3a9783e44ef8823cc366bff8df2\n"
    },
    {
      "commit": "15b9d5274399736ac09705f0507df24fac4f00c1",
      "tree": "04564a9265f5dccefdd32ea7bdd25adc0267f80b",
      "parents": [
        "8bc616d09f93523f4bc982cc60c377b00161522a"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Mar 12 15:05:13 2015 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri Mar 13 10:26:47 2015 +0000"
      },
      "message": "API change in StackVisitor::GetVReg*.\n\n- Remove GetVReg() and SetVReg() that were expecting to always succeed.\n- Change Quick-only methods to take a FromQuickCode suffix.\n- Change deopt to use dead values when GetVReg does not succeed:\n  the optimizing compiler will not have a location for uninitialized\n  Dex registers and potentially dead registers.\n\nChange-Id: Ida05773a97aff8aa69e0caf42ea961f80f854b77\n"
    },
    {
      "commit": "14691c5e786e8c2c5734f687e4c96217340771be",
      "tree": "7c2156671b323c70ffdd1d48d5e2f1d1de79c5fc",
      "parents": [
        "3d7d2af4c6502b771b032ee9bf3ab30e78f9c60d"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Mar 05 10:40:17 2015 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Mar 09 10:09:33 2015 +0000"
      },
      "message": "Compute the right catch location for the debugger.\n\nAlso remove tls ThrowLocation, it is not needed anymore.\n\nChange-Id: I78fddf09ce968ca475e39c17fa76d699c589c8d9\n"
    },
    {
      "commit": "7642cfc90fc9c3ebfd8e3b5041915705c93b5cf0",
      "tree": "807b3c797483310ac23954c5eddb7441b91749c5",
      "parents": [
        "dc47e986941b1a3754447fabea272485f3f0f382"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Feb 26 10:56:09 2015 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Mar 03 17:50:49 2015 +0000"
      },
      "message": "Change how we report exceptions to the debugger.\n\nThis is only a refactoring/cleanup. Bug fixes with respect\nto catch location, and more cleanups will follow.\n\nChange-Id: I30d3c6260b0c8f8115a811621397225b88f2063a\n"
    },
    {
      "commit": "794ad76e8d5b5b9132819d5b08a0570e27615644",
      "tree": "74b420e4337ecf9e5df689cc376fa965d765a908",
      "parents": [
        "d98ff78976696fdde1e7868d4687719a0439544b"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Feb 23 08:12:24 2015 -0800"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Feb 23 10:23:06 2015 -0800"
      },
      "message": "ART: Introduce NO_RETURN, Mark DoLongJump noreturn\n\nAdd NO_RETURN macro that adds C++11 noreturn attribute. Mark\nDoLongJump methods as noreturn.\n\nChange-Id: Ifde4318e370493237050d4c1349285a0382df23f\n"
    },
    {
      "commit": "2e04bb2d514434f2bedb14268996842010948e6c",
      "tree": "ef44da212347e17a5de29b138560fca1a173a935",
      "parents": [
        "e032d5d40b361066088f3855b1e76bc9a740a826"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Tue Feb 10 15:37:27 2015 -0800"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Fri Feb 13 12:58:33 2015 -0800"
      },
      "message": "ART: Allow class-loading during deopt\n\nWhen deoptimizing, we might touch code that uses unloaded classes.\n\nBug: 19290147\n\n(cherry picked from commit 44fb719e5f0f5ee7dcf4b1eae703593f1043a169)\n\nChange-Id: I5776f08ba366e9742336caba0d6af85f00629afc\n"
    },
    {
      "commit": "270a0e16c3b8e5b95cbfdbd8996ac137c7c6322b",
      "tree": "2800649d19ffcdc891118a458f6b0169022d93e0",
      "parents": [
        "951d70b42400453f9d1746d155b8337c07c86acc"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Fri Jan 16 19:49:09 2015 +0100"
      },
      "committer": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Fri Jan 23 17:26:45 2015 +0100"
      },
      "message": "Fix exception handling during deoptimization\n\nWhen interpreting a deoptimized shadow frame, we may start with a\npending exception thrown by a previous deoptimized shadow frame (from\na previous invoke). Therefore, we need to handle it before executing\nany instruction, otherwise we execute incorrect code.\n\nBecause we need the DEX pc of the throwing instruction to find a\nmatching catch handler, we initialize deoptimized shadow frames with\nthe current DEX pc at the time the stack is deoptimized.\nWhen we are about to interpret a deoptimized shadow frame, we need to\nupdate the shadow frame with the DEX pc of the next instruction to\ninterpret. There are three cases:\n- if there is no pending exception, this is the instruction following\nthe current one.\n- if there is a pending exception and we found a matching catch\nhandler, this is the first instruction of this handler.\n- if there is a pending exception but there is no matching catch\nhandler, we do not execute the deoptimized shadow frame and continue\nto its caller.\n\nThe verifier now fails when a method starts with a move-exception\ninstruction. Indeed we cannot start executing a method with a pending\nexception.\n\nBug: 19057915\nBug: 19041195\nBug: 18607595\nChange-Id: I355ac81e6ac098edc7e3cc8c13dbfa24a2969ab2\n"
    },
    {
      "commit": "4306ef8a7ec8e3887e51f64e80d940d974cc3ac3",
      "tree": "5afff3c97de1458886154aa5e84e1c0ae0edf11f",
      "parents": [
        "d30feca670d0af02783bbdfd4a29c5078c18bdc5"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri Dec 19 18:41:47 2014 -0800"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue Jan 06 14:12:18 2015 -0800"
      },
      "message": "Don\u0027t allow suspension from FindLocksAtDexPc\n\nTransitioning to suspended from runnable sometimes runs dump\ncheckpoints in ThreadStress which can cause deadlocks. This happens\nsince FindLocksAtDexPC runs the verifier which calls\nAllowThreadSuspension. This results in a blocked thread which holds\nthe monitor lock, and if another thread tries to do a monitor enter,\nit deadlocks while holding the mutator lock (assuming the GC is\nsuspending all).\n\nThe fix for avoiding this deadlock is not calling\nAllowThreadSuspension from FindLocksAtDexPc.\n\nBug: 18576985\nChange-Id: I7e5faaf3bbbd5b5f680de95d53c33b5106705b0c\n"
    },
    {
      "commit": "6a3c1fcb4ba42ad4d5d142c17a3712a6ddd3866f",
      "tree": "9df58b57af13240a93a6da4eefcf03f70cce9ad9",
      "parents": [
        "c6e0955737e15f7c0c3575d4e13789b3411f4993"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Fri Oct 31 00:33:20 2014 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Mon Nov 03 20:01:04 2014 -0800"
      },
      "message": "Remove -Wno-unused-parameter and -Wno-sign-promo from base cflags.\n\nFix associated errors about unused paramenters and implict sign conversions.\nFor sign conversion this was largely in the area of enums, so add ostream\noperators for the effected enums and fix tools/generate-operator-out.py.\nTidy arena allocation code and arena allocated data types, rather than fixing\nnew and delete operators.\nRemove dead code.\n\nChange-Id: I5b433e722d2f75baacfacae4d32aef4a828bfe1b\n"
    },
    {
      "commit": "cf7f19135f0e273f7b0136315633c2abfc715343",
      "tree": "ffa4d9efd9c45f4b6789acc1f534bb9327052b7e",
      "parents": [
        "aea6888b056be21adf762e066c7f33b8939b8a06"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Wed Oct 22 22:06:39 2014 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Wed Oct 22 22:21:57 2014 -0700"
      },
      "message": "C++11 related clean-up of DISALLOW_..\n\nMove DISALLOW_COPY_AND_ASSIGN to delete functions. By no having declarations\nwith no definitions this prompts better warning messages so deal with these\nby correcting the code.\nAdd a DISALLOW_ALLOCATION and use for ValueObject and mirror::Object.\nMake X86 assembly operand types ValueObjects to fix compilation errors.\nTidy the use of iostream and ostream.\nAvoid making cutils a dependency via mutex-inl.h for tests that link against\nlibart. Push tracing dependencies into appropriate files and mutex.cc.\nx86 32-bit host symbols size is increased for libarttest, avoid copying this\nin run-test 115 by using symlinks and remove this test\u0027s higher than normal\nulimit.\nFix the RunningOnValgrind test in RosAllocSpace to not use GetHeap as it\nreturns NULL when the heap is under construction by Runtime.\n\nChange-Id: Ia246f7ac0c11f73072b30d70566a196e9b78472b\n"
    },
    {
      "commit": "6f3dbbadf4ce66982eb3d400e0a74cb73eb034f3",
      "tree": "f7a20779e4d665f948c5fbcd26dac0071dafb8d4",
      "parents": [
        "2df6840f68dd18d7dd8dbf53f8b6181bbfdc4fc4"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Tue Oct 14 17:41:57 2014 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Thu Oct 16 19:27:28 2014 -0700"
      },
      "message": "Make ART compile with GCC -O0 again.\n\nTidy up InstructionSetFeatures so that it has a type hierarchy dependent on\narchitecture.\nAdd to instruction_set_test to warn when InstructionSetFeatures don\u0027t agree\nwith ones from system properties, AT_HWCAP and /proc/cpuinfo.\nClean-up class linker entry point logic to not return entry points but to\ntest whether the passed code is the particular entrypoint. This works around\nimage trampolines that replicate entrypoints.\nBug: 17993736\n\nChange-Id: I5f4b49e88c3b02a79f9bee04f83395146ed7be23\n"
    },
    {
      "commit": "07140838a3ee44a6056cacdc78f2930e019107da",
      "tree": "4f344df6ec2612d8ddbf0a00e2b49a39a7501249",
      "parents": [
        "f9098ea6d7326b4d8de2860d18adf74046b80855"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Tue Sep 30 15:43:59 2014 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Tue Sep 30 15:43:59 2014 -0700"
      },
      "message": "Enable -Wunreachable-code\n\nCaught bugs in DeoptimizeStackVisitor and assemble_x86 SIB encoding.\nAdd UNREACHABLE macro to document code expected to be unreachable.\nBug: 17731047\n\nChange-Id: I2e363fe5b38a1246354d98be18c902a6031c0b9e\n"
    },
    {
      "commit": "7b078e8c04f3e1451dbdd18543c8b9692b5b067e",
      "tree": "414229c6b87eb20ea24c40780752da5a3999a49a",
      "parents": [
        "f79ba17defbd9342e44ab9f3de0807054673d3c9"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Wed Sep 10 14:44:24 2014 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Fri Sep 12 14:57:53 2014 -0700"
      },
      "message": "Compile time performance improvements focusing on interpret-only.\n\nReduce virtual method dispatch in the method verifier and make more code\ninline-able.\nAdd a StringPiece with const char* equality operator to avoid redundant\nStringPieces and strlens.\nRemove back link from register line to verifier and pass as argument to reduce\nsize of RegisterLine.\nRemove instruction length from instruction flags and compute from the\ninstruction, again to reduce size.\nAdd suspend checks to resolve and verify to allow for more easy monitor\ninflation and reduce contention on Locks::thread_list_suspend_thread_lock_.\nChange ThrowEarlierClassFailure to throw pre-allocated exception.\nAvoid calls to Thread::Current() by passing self.\nTemplate specialize IsValidClassName.\nMake ANR reporting with SIGQUIT run using checkpoints rather than suspending\nall threads. This makes the stack/lock analysis less lock error prone.\nExtra Barrier assertions and condition variable time out is now returned as a\nboolean both from Barrier and ConditionVariable::Wait.\n\n2 threaded host x86-64 interpret-only numbers from 341 samples:\nBefore change: Avg 176.137ms 99% CI 3.468ms to 1060.770ms\nAfter change: Avg 139.163% 99% CI 3.027ms to 838.257ms\nReduction in average compile time after change is 20.9%.\nSlow-down without change is 26.5%.\n\nBug: 17471626 - Fix bug where RegTypeCache::JavaLangObject/String/Class/Throwable\ncould return unresolved type when class loading is disabled.\nBug: 17398101\n\nChange-Id: Id59ce3cc520701c6ecf612f7152498107bc40684\n"
    },
    {
      "commit": "bf99f77dda749e2b653e8c45259b1fb56e7bb012",
      "tree": "98addbb3533c745781bc26e4a55cbbdd6d6e97e7",
      "parents": [
        "762f0a5bdd238458bbb463a9565388f2047a98d4"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Sat Aug 23 16:37:27 2014 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Sat Aug 23 16:54:24 2014 -0700"
      },
      "message": "Clean up Handle usage.\n\nPrefer using ConstHandle instead of Handle as function arguments\nsince you can\u0027t assign new references to ConstHandle which helps\nprevent bugs.\n\nChanged NullHandle to be a ConstHandle so that you can never modify\nit to be a non null reference.\n\nChange-Id: I81cb979f6f8d5b49e5614966a2caf28c3701dd4f\n"
    },
    {
      "commit": "dc3761719fb5e2d1ced5708e3c73b965f9ef0c73",
      "tree": "84d499b1be46896793bdfebe6f83bf8ca275d50b",
      "parents": [
        "a37ad7a6caad2e0a83c72c1103015202cbcaf1a4"
      ],
      "author": {
        "name": "Hiroshi Yamauchi",
        "email": "yamauchi@google.com",
        "time": "Fri Aug 22 11:13:12 2014 -0700"
      },
      "committer": {
        "name": "Hiroshi Yamauchi",
        "email": "yamauchi@google.com",
        "time": "Fri Aug 22 11:13:12 2014 -0700"
      },
      "message": "Handlerize MethodVerifier::mirror_method_.\n\nThe method (mirror_method_) wasn\u0027t handlerized across some\nallocation/GC points such as the ResolveType() call in\nScanTryCatchBlocks() and the GetReturnType() calls in\nCodeFlowVerifyInstruction().\n\nBug: 12687968\nChange-Id: I95323de14459eb5a7c4abfcf44f882f86d59be64\n"
    },
    {
      "commit": "649278cec7119cdd1bea3d0b710dbb2aa7c650b6",
      "tree": "6b5e08abee97e8af1ee5635488e6476d3fb3dc15",
      "parents": [
        "99c251bbd225dd97d0deece29559a430b12a0b66"
      ],
      "author": {
        "name": "Hiroshi Yamauchi",
        "email": "yamauchi@google.com",
        "time": "Wed Aug 13 11:12:22 2014 -0700"
      },
      "committer": {
        "name": "Hiroshi Yamauchi",
        "email": "yamauchi@google.com",
        "time": "Wed Aug 13 20:46:10 2014 -0700"
      },
      "message": "More efficient stack walk in exception throwing.\n\nIn the exception handling code, we currently walk down the stack\ntwice, once to get the stack height which we use to compute frame IDs\n(the bottom frame is zero), and once more to find the catch block to\njump to.\n\nFor a deep stack, this could result in very slow exception\nhandling. That is, if have a lot of finally or catch blocks that we\nend up jumping to in a deep stack, we need to do a lot of\ncatch/rethrow chains. Since we\u0027d need to walk down to the bottom each\ntime to compute frames IDs in each catch/rethrow, we\u0027d need to walk\ndown O(N^2) frames at the worst case.\n\nInstead of frames IDs ((the bottom frame is zero), we will use the\nframe depth (the top frame is zero) and no longer need to walk down\nthe stack just to get the stack height. We walk down O(N) frames.\n\nThis was what was happening with\ncode.google.gson.functional.CircularReferenceTest. With this change,\nthe test run time went from ~120s down to ~3s on N5 and it no longer\ncrashes due to the thread suspension timeout.\n\nBug: 16800209\nChange-Id: Ie815df1e3e8fb9d82e40685d4cc2b8838fd8aa07\n"
    },
    {
      "commit": "c901dd7bdc80b953d04100ef2f54b8d1ca5f466b",
      "tree": "de52f83ac4dab4ca5b48cbc5a4701abdc762f2d1",
      "parents": [
        "81457a3cd8fca14396b5785a4e4c8070c259b07a"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Wed Jul 16 11:56:07 2014 +0200"
      },
      "committer": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Thu Jul 17 20:43:37 2014 +0200"
      },
      "message": "Fix access to long/double stack values from debugger\n\nLong and double values live in a pair of DEX registers. When we compile DEX\ncode with the Quick compiler, a DEX register either lives in the stack or is\npromoted to a physical register. In the case of a pair of DEX registers, the\nQuick compiler assumes both registers live in the same \"area\": both live in\nthe stack or both are promoted to physical registers.\n\nFrom the debugger, we used to access these values by reading/writing each DEX\nregister separately. However, this does not work when only one DEX register of\na pair is promoted and the other lives in the stack. In this case, the compiled\ncode reads from/writes to the stack only.\n\nTo fix that, the debugger must follow the same rule than the Quick compiler: if\nboth DEX registers are promoted, read/write them from/to physical registers,\notherwise read/write them from/to the stack. We add StackVisitor:GetVRegPair and\nStackVisitor:SetVRegPair for this purpose.\n\nWe also follow the same rule when deoptimizing. However we need to do that only\nwhen we know two consecutive DEX registers are part of a pair (long or double).\nWe know that thanks to the verifier.\n\nBug: 15527793\nChange-Id: I04812285ff26ef0129f39792a1cf776f3591ca2d\n"
    },
    {
      "commit": "e63db27db913f1a88e2095a1ee8239b2bb9124e8",
      "tree": "893dee6783bca6717259321a6e4ba029c9c123e2",
      "parents": [
        "07b8441303ea82fca3cb85d71ecf8752d73cedd7"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Tue Jul 15 15:36:11 2014 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Tue Jul 15 17:07:49 2014 -0700"
      },
      "message": "Break apart header files.\n\nCreate libart-gtest for common runtime and compiler gtest routines.\nRename CompilerCallbacksImpl that is quick compiler specific.\nRename trace clock source constants to not use the overloaded profiler term.\n\nChange-Id: I4aac4bdc7e7850c68335f81e59a390133b54e933\n"
    },
    {
      "commit": "98d1cc8033251c93786e2fa8c59a2e555a9493be",
      "tree": "f0a76b8fff060ee484af09028da65a8339d57057",
      "parents": [
        "aebf3cda094f34cf846d19a7724bdc8005267c95"
      ],
      "author": {
        "name": "Mingyao Yang",
        "email": "mingyao@google.com",
        "time": "Thu May 15 17:02:16 2014 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Fri Jul 11 17:17:10 2014 -0700"
      },
      "message": "Improve performance of invokevirtual/invokeinterface with embedded imt/vtable\n\nAdd an embedded version of imt/vtable into class object. Both tables start at\nfixed offset within class object so method/entry point can be loaded directly\nfrom class object for invokeinterface/invokevirtual.\n\nBug: 8142917\nChange-Id: I4240d58cfbe9250107c95c0708c036854c455968\n"
    },
    {
      "commit": "9f1020305292a21fd14a402b189c765a125226ab",
      "tree": "6b730cbe56ded370d1b4293629826ad2c7b06f7f",
      "parents": [
        "bc72903b909f5147b8cb207f3e5d02a8ef85e4e7"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Fri May 23 08:59:42 2014 +0200"
      },
      "committer": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Wed Jun 11 14:29:00 2014 +0200"
      },
      "message": "Fix exception reporting from interpreter\n\nTo comply with JDWP exception report rules, we must report an exception at the\nlocation of the throw (or the first instruction encountered after a native\ncall). To do this, we use the CatchLocationFinder visitor to look for a catch\nhandler until we reach a native frame or the top frame.\n\nBecause interpreter handles pending exception on a method-by-method basis, we\nneed a flag to remember we already reported the exception and avoid reporting\nit multiple times when unwinding methods. The drawback is we need to maintain\nthe state of this flag. We clear it when the exception is cleared. In the case\nwe temporarily clear the exception (when finding a catch handler for instance),\nwe restore the flag to its previous value at the same time we restore the\npending exception.\n\nBump oat version to force recompilation because we modify Thread offsets.\n\nBug: 14402770\nChange-Id: Ic059c58f80b2023b118038301f8f0a24f1e18241\n"
    },
    {
      "commit": "bfd9a4378eacaf2dc2bbe05ad48c5164fc93c9fe",
      "tree": "3d3f667c8232a9c1bb6fe9daea0d364f9ae01d8c",
      "parents": [
        "2e1ca953c7fb165da36cc26ea74d3045d7e272c8"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed May 21 17:43:44 2014 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Mon Jun 09 12:46:32 2014 -0700"
      },
      "message": "Change MethodHelper to use a Handle.\n\nAdded ConstHandle to help prevent errors where you modify the value\nstored in the handle of the caller. Also fixed compaction bugs\nrelated to not knowing MethodHelper::GetReturnType can resolve types.\nThis bug was present in interpreter RETURN_OBJECT.\n\nBug: 13077697\n\nChange-Id: I71f964d4d810ab4debda1a09bc968af8f3c874a3\n"
    },
    {
      "commit": "5cf98196d488437acd1e989c08a554ef697fded1",
      "tree": "dd44bc0120562169b701e80dbec413a179862beb",
      "parents": [
        "b7f02280f7f56ae94fe7f01e161be0b725b6e4a9"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Thu May 29 21:31:50 2014 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Fri May 30 12:46:10 2014 -0700"
      },
      "message": "Don\u0027t report down-calls as unhandled exceptions.\n\nBug: 15310540\nAlso, narrow scope of catch/deoptimize stack visitors that are specific to\nquick exception delivery.\n\nChange-Id: Ib13a006ce1347acb93a36b0186550d4c3ec2034b\n"
    },
    {
      "commit": "cf4035a4c41ccfcc3e89a0cee25f5218a11b0705",
      "tree": "323d9e98e6129c67e464a3e6857ee02593a2f2c2",
      "parents": [
        "29b53d3d715b1ec19349e8cbf7c5e4ff529bd5fe"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Wed May 28 22:43:01 2014 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Thu May 29 20:50:49 2014 -0700"
      },
      "message": "ART: Use StackReference in Quick Stack Frame\n\nThe method reference at the bottom of a quick frame is a stack\nreference and not a native pointer. This is important for 64b\narchitectures, where the notions do not coincide.\n\nChange key methods to have StackReference\u003cmirror::ArtMethod\u003e*\nparameter instead of mirror::ArtMethod**. Make changes to\ninvoke stubs for 64b archs, change the frame setup for JNI code\n(both generic JNI and compilers), tie up loose ends.\n\nTested on x86 and x86-64 with host tests. On x86-64, tests succeed\nwith jni compiler activated. x86-64 QCG was not tested.\n\nTested on ARM32 with device tests.\n\nFix ARM64 not saving x19 (used for wSUSPEND) on upcalls.\n\nTested on ARM64 in interpreter-only + generic-jni mode.\n\nFix ARM64 JNI Compiler to work with the CL.\n\nTested on ARM64 in interpreter-only + jni compiler.\n\nChange-Id: I77931a0cbadd04d163b3eb8d6f6a6f8740578f13\n"
    },
    {
      "commit": "eb8167a4f4d27fce0530f6724ab8032610cd146b",
      "tree": "bcfeaf13ad78f2dd68466bbd0e20c71944f7e854",
      "parents": [
        "6fb66a2bc4e1c0b7931101153e58714991237af7"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed May 07 15:43:14 2014 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue May 13 14:45:54 2014 -0700"
      },
      "message": "Add Handle/HandleScope and delete SirtRef.\n\nDelete SirtRef and replaced it with Handle. Handles are value types\nwhich wrap around StackReference*.\n\nRenamed StackIndirectReferenceTable to HandleScope.\n\nAdded a scoped handle wrapper which wraps around an Object** and\nrestores it in its destructor.\n\nRenamed Handle::get -\u003e Get.\n\nBug: 8473721\n\nChange-Id: Idbfebd4f35af629f0f43931b7c5184b334822c7a\n"
    },
    {
      "commit": "ff093b31d75658c3404f9b51ee45760f346f06d9",
      "tree": "16a11ff5a78862defcc169b0af2901360a57ab6a",
      "parents": [
        "b3016551e5f264264dbb633a1ddf03ac97f9c66c"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Wed Apr 30 19:04:27 2014 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Thu May 01 08:31:01 2014 -0700"
      },
      "message": "Fix a few 64-bit compilation of 32-bit code issues.\n\nBug: 13423943\n\nChange-Id: I939389413af0a68c0d95b23cd598b7c42afa4383\n"
    },
    {
      "commit": "714f175bd66d03225927a84f3d5dbc923c5a3e7e",
      "tree": "093c8564827484af598bd116c7560b1893910e3d",
      "parents": [
        "d55e9b1a9f45c19cd7b376a8839ce37f86c66a64"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Mon Apr 28 15:03:08 2014 +0200"
      },
      "committer": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Tue Apr 29 09:04:18 2014 +0200"
      },
      "message": "Visit deoptimized shadow frames as roots\n\nDuring deoptimization, we create shadow frames but do not attach them to the\nstack until we transition to interpreter mode. If a GC happens before that,\nthese shadow frames are not visited by GC so they may contain stale references.\n\nThis CL addresses this issue by visiting the shadow frames \"under contruction\"\nin Thread::VisitRoots so we correctly update all references they hold.\n\nTo make them visible, we now save the top shadow frame (the first one created)\nin the field Thread::tls_ptr_sized_values::deoptimization_shadow_frame. This\nfield will then be cleared when transitioning to interpreter mode.\n\nBug: 14324885\nChange-Id: Ib213ddc80f19cfcdfcec6f20acaa7f1a0e9ce2c1\n"
    },
    {
      "commit": "fd3077e4b9ebadd281777310d26e64443858f653",
      "tree": "c63911af29580ab8c0fc8dd29171e626871449aa",
      "parents": [
        "a08ec9b372d4f5e918b3d68499fbd1731180cd98"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Wed Apr 23 10:32:43 2014 +0200"
      },
      "committer": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Fri Apr 25 10:36:05 2014 +0200"
      },
      "message": "Refactor exception handling for deoptimization\n\nThis CL refactors the exception handling (on the quick side) by isolating the\nsearch of catch handler and the preparation of deoptimization.\n\nWe rename the CatchFinder class to QuickExceptionHandler so it\u0027s less specific\nto catch handler search.\n\nFinding catch handler happens in QuickExceptionHandler::FindCatch. Since the\nCatchBlockStackVisitor resolves exception types, it may cause thread suspension\nand breaks the assertion current thread can\u0027t be suspended. Therefore, we place\nthe exception in a SirtRef (while it is detached from the current thread) and\nremove the thread suspension assertion.\n\nDeoptimization now happens in QuickExceptionHandler::DeoptimizeStack. It uses\nthe new DeoptimizeStackVisitor class to create shadow frames.\n\nWe also add the Thread::GetDeoptimizationException method to get the definition\nof the fake exception in only one place.\n\nChange-Id: I01b19fa72af64329b5c3b6c7f0c3339d2d724978\n"
    },
    {
      "commit": "d45a1f5d1dd5bc9badfab3a8aee90c934d9f2227",
      "tree": "c4e92844452b5eabfbd936b8d83c54f58397475d",
      "parents": [
        "0adc680c388913a63666797e907f87c4c6b0b4ea"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Thu Jan 09 14:56:54 2014 +0100"
      },
      "committer": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Fri Jan 10 09:42:09 2014 +0100"
      },
      "message": "Avoid instrumentation stack corruption.\n\nWhile debugging a throwing exception, we may end up updating instrumentation\nstack frame after having already walked the native stack. This leads to not pop\ninstrumentation frames prior to catch handler (or upcall if exception is not\ncaught) and get it desynchronized with the native stack.\n\nTo solve this issue, we need to walk the stack again after having reporting the\nexception to the instrumentation listener (for example: the debugger) which\nmay push new instrumentation stack frames. However we do it only when we know\ninstrumentation is enabled to not slow down exception delivery when executing\ncode without instrumentation.\n\nHere are the main changes:\n- Creates InstrumentationStackVisitor to compute the number of instrumentation\nframes to pop (previously done in CatchBlockStackVisitor). We only count frames\nprior to catch handler (or upcall). Popping instrumentation frames is done\nafter having reported the exception to the instrumentation listener.\n- Updates the CatchBlockStackVisitor to remove instrumentation frame handling\nand focus only on finding the catch handler and prepare deoptimization.\n- Creates CatchFinder class to control both visitors and do the long jump.\n\nChange-Id: I29b3871403f297bfb8c087e27f1330b002f5d56d\n"
    }
  ]
}
