)]}'
{
  "log": [
    {
      "commit": "a32a6fd4a781262dff4fec102da053d16b7ef6c0",
      "tree": "5c2a35aec522902cfdf508a74898ee091c91f7ab",
      "parents": [
        "d08547a802e6dbb71fde3ed3dac9aa0b03a5b17b"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Mon Feb 06 20:18:44 2012 -0800"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Mon Feb 13 15:41:26 2012 -0800"
      },
      "message": "Runtime access checks on virtual method calls\n\nAt verification time we may not know that an illegal access or method\nnot found exception should be raised and so we defer the decision to\nruntime. When the decision is deferred we perform an appropriate slow\npath method invocation that can check for access violations.\n\nThis change also attempts to reduce code duplication, improve the\ndiagnostic information in exceptions, clean up field slow paths slightly\nand to move the slow path calls lower in the Thread class so that they\ndon\u0027t effect the offsets of data items when calls are added or removed.\n\nChange-Id: I8376b83dcd7e302cbbddf44c1a55a25687b9dcdb\n"
    },
    {
      "commit": "44b412bb795fa6999129b2bc16f5eec1ea97e8f8",
      "tree": "bf2a45463f46c506130f319b1a176b49db4d5252",
      "parents": [
        "959f8ed11ef9493a89b90a1f9a82a811dbc7ae0e"
      ],
      "author": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Sat Feb 04 08:50:53 2012 -0800"
      },
      "committer": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Tue Feb 07 18:19:52 2012 -0800"
      },
      "message": "Codegen support for debugger\n\nAdd the ability to generate code with support for debugging.\nThis involves generating a callout to an equivalent of the\nold \"updateDebugger()\" before each Dalvik opcode, method\nentry and method exit.\n\nThe added code is fairly compact - 8 bytes per Dalvik opcode,\nplus 4 additional bytes per safe point.\n\nI dislike the idea of always making this call, so I\u0027m reusing\nthe dedicated register rSUSPEND to hold the address of the callout.\nrSUSPEND is normally used to reduce the frequency of full suspend\nchecks, but when debugging this isn\u0027t necessary - allowing\nus to resuse this register to hold the address of the callout.\nIf it is non-null we make the callout, otherwise we continue.  I refresh\nthis register from a slot in the Thread structure on method entry\nand also following the return of taken suspend checks.  In this way,\nthe debugger has the ability to control updates on a per-thread basis,\nand the performance penalty is greatly reduced for threads that don\u0027t\nhave any pending debugger requests.  Once the debugger attaches,\nit would suspend all threads, walk through the thread list, set\nthread-\u003epUpdateDebuggerFromCode to art_update_debugger and then\nturn everything loose.\n\nOne thing I\u0027m not doing, though, is debugger updates before and after\ncalls to native methods.  This is something that will have to be done\nby the stubs, because I don\u0027t know which invokes are native.  Oh, and\nthere will also need to be an artUpdateDebugger call on the exception\npath.\n\nI\u0027m passing the DalvikPC to the stub, and am using special\ncodes (-1 and -2) to denote method entry and exit.  The stub\nrecovers the current Method* and Thread* and passes them on to\nartUpdateDebugger().\n\nWhen we\u0027re compiling in this special mode, all optimizations which\nmight result in code motion or suppressed load/store of a Dalvik\nregister are turned off.  No register promotion is done, so everything\nwill be in its home location.\n\nChange-Id: Iaf66f4d0d094a1699269d0a1ad1ed33e7613aef8\n"
    },
    {
      "commit": "1bddec3a6521f16df37499754000a3b1787a52e9",
      "tree": "f605d0f642f2a62012d0f5a1bd0351afbaa8fa5a",
      "parents": [
        "223f20fa939c386c695977263780dea2195093db"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Sat Feb 04 12:27:34 2012 -0800"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Sun Feb 05 03:02:00 2012 -0800"
      },
      "message": "Add access check slow paths to field accesses\n\nThis check makes the verifier, compiler and runtime agree with who\nshould perform access checks and fixes compliance for these\ninstructions.\n\nIntroduce new \"fast\" sget/sput that just get the static storage base\nfrom a method\u0027s declaring class when the static field is within the same\nclass. Saves a load and branch in the common case.\n\nFold gen routines for wide and not wide together.\n\nFix bug where sub-classes could appear intialized in the image but their\nparents were only verified.\n\nExtra debug output for test case 075.\n\nChange-Id: I934da3624ed8fa8e026b2c95d936d04b1af022ef\n"
    },
    {
      "commit": "0eb7d7e2a0c2767b5fd86bd52436c618fd4c3120",
      "tree": "a446a35a4dfc5d258bb2817b92319b2f8ea84b20",
      "parents": [
        "09cc2d39b3073ab0c613a9f660983e781693d958"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Tue Jan 31 21:12:32 2012 -0800"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Tue Jan 31 21:14:59 2012 -0800"
      },
      "message": "Implement array allocation with access checks.\n\nChange-Id: I0b2c0274087f3f7ed5b0b71c441e5d7e5a25f819\n"
    },
    {
      "commit": "2faa5f1271587cda765f26bcf2951065300a01ff",
      "tree": "c59557857c36741cfcd1b6bf5ae039886a8ad6e7",
      "parents": [
        "0850c69c88d49efd4075288511b70d6c032bd0c8"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Jan 30 14:42:07 2012 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Jan 30 16:46:29 2012 -0800"
      },
      "message": "Fix copyright headers.\n\nChange-Id: I5b7bc76a370238d810d78522bd5531600746700f\n"
    },
    {
      "commit": "bbdb1437f55948e5395b4dcb306e25605539a444",
      "tree": "e18937d0d71de22202660f8bd564a1efefa76b55",
      "parents": [
        "faaee2d347efbcb73aa4141aea2a6167e88797f1"
      ],
      "author": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Mon Jan 23 13:19:41 2012 -0800"
      },
      "committer": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Mon Jan 23 13:19:41 2012 -0800"
      },
      "message": "Fix comment describing THREAD_EXCEPTION_OFFSET\n\nChange-Id: Ib3098197b356e7291dbe9627279ac22a4b1e3dd8\n"
    },
    {
      "commit": "b093c6b27f8ea9bbe2d49c03ebe345203a121199",
      "tree": "34e49f46eb30a2aee8590dbf11365c8b5824c16b",
      "parents": [
        "95e4ef7cebf2e33b6e73a3957089f958e41771f5"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Mon Oct 31 16:19:55 2011 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Mon Oct 31 16:19:55 2011 -0700"
      },
      "message": "Support for access check in checkcast and instanceof.\n\nChange-Id: Ie15216618b35cace7d351be2b0a1c466ed6db489\n"
    },
    {
      "commit": "cc4540ece917ef4b5c81ee684e3294e47e49ff5b",
      "tree": "a43560b6c3f70708cad676476e7aca395c10e337",
      "parents": [
        "baba887a4f5d2a454ab3f8f36a26346f8fdd0670"
      ],
      "author": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Thu Oct 27 13:06:03 2011 -0700"
      },
      "committer": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Thu Oct 27 13:10:05 2011 -0700"
      },
      "message": "Add slow path for OP_NEW_INSTANCE\n\nIf the type is unresolved at verification time, we can\u0027t be sure\nit\u0027s a valid new.  The compiler will now check for type resolution\nat compile time.  If unresolved, we\u0027ll call out to the slow path,\nwhere the access check will take place.\n\nThis CL only contains the compiler portion of this change.  For\nnow, the slow path code just calls out to the normal routine.\n\nChange-Id: Ia568a164389baedaa695a44f6845a0fdfe585b56\n"
    },
    {
      "commit": "3147a2347d4fd775d51ec0a558955332beb9d1fe",
      "tree": "475ddcfda38de4162f62c41ae44a31611189b17f",
      "parents": [
        "7178e733005d40cb50cbfea4a9355765ccf05ee7"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Oct 12 15:55:07 2011 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Oct 12 16:08:09 2011 -0700"
      },
      "message": "Work around a bionic bug until I can fix bionic.\n\nAlso remove the Thread::pthread_ field, which isn\u0027t really needed. We also\ndon\u0027t need to update the TLS pointer to our Thread*, because the\naddress will be the same in the child anyway.\n\nChange-Id: I595832a682a03ccdbb510e8e9ce0a32d5c6526b3\n"
    },
    {
      "commit": "4a510d8750d50b77353d0a5a891d1b9b3a48ecd5",
      "tree": "f6df9490fee55d2eae88b2281993e94953c6a805",
      "parents": [
        "4a14bc2e374add8f7df8232b3af3d8881eb4c84b"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Sun Oct 09 14:30:24 2011 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Sun Oct 09 14:30:24 2011 -0700"
      },
      "message": "Ensure R4 is initialized for upcall. Sort suspend naming.\n\nChange-Id: I73eb49e1af2ced971eeaafb7c07f5d964dae1824\n"
    },
    {
      "commit": "ce9eca6de042f26e9eebc41c9bee8b4d14f753aa",
      "tree": "7a141da8787f6653b30595f478ec656fd8dd01d6",
      "parents": [
        "6384f644e8120a15bddb9a72976eac1c158aba16"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Fri Oct 07 17:11:03 2011 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Fri Oct 07 18:24:23 2011 -0700"
      },
      "message": "Move from code field routines to runtime support.\n\nAdd support for exceptions from these routines. Use a macro for pending\nexception delivery. Fix bug in object_test where the signature of a\nFromCode function had changed.\n\nChange-Id: If486eff8659e5f6bb38d95b1139e8981656e4fb0\n"
    },
    {
      "commit": "4f0d07c783afef89703dce32c94440fc8621a29b",
      "tree": "f6f4b68d5afc6551c61d3e86153878d9891ea13a",
      "parents": [
        "3ddac99d4dc6a036fac59d8f0bdc664ef619fb04"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Thu Oct 06 23:38:47 2011 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Fri Oct 07 11:40:56 2011 -0700"
      },
      "message": "Spill possibly reference holding registers for runtime calls.\n\nLive references may be in registers when we crawl a stack for GC during\na runtime call. Whilst an exception won\u0027t occur we need to save the\ncallee save registers into the frame so the stack crawl can find their\nvalues. Create variants of the callee save method to save just the\nregisters that are necessary.\n\nChange-Id: I6fa479bffcbc333fe846f9bd3ef2e626e0209ed9\n"
    },
    {
      "commit": "ad25ac568407ceb14334e8551dd1c4dd0fd6993c",
      "tree": "f1e2edb4b87d0b5ce35f94069db2f6cdb77db210",
      "parents": [
        "8c2f6414e1cff9a024a14369352f7ce112528b9e"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Tue Oct 04 19:13:33 2011 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Wed Oct 05 22:40:00 2011 -0700"
      },
      "message": "Static and direct resolution stub.\n\nEnsure that invoke static and direct go through a stub that causes\nresolution and initialization.\n\nChange-Id: I872900560322817d8f4378b04ac410d9ea0b3b17\n"
    },
    {
      "commit": "99f272349671e14ceada1cc795ce4c66a38ddd3e",
      "tree": "ebd4a5c4c1ac47d837174daaf4684ae7b26c7b60",
      "parents": [
        "3ddc0d1108a00e14b60c60edcdeff3b81f9e35f9"
      ],
      "author": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Wed Oct 05 12:56:36 2011 -0700"
      },
      "committer": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Wed Oct 05 13:11:35 2011 -0700"
      },
      "message": "Special-case Object.\u003cinit\u003e invoke\n\nIdentify direct invokes to Object.\u003cinit\u003e and handle them similar\nto the old-word OP_INVOKE_OBJECT_INIT_xxx.  Also, added missing\nnull check for range-style invoke-direct and invoke-interface.\n\nChange-Id: I5789db4e85609b780063c4788fa40d627a6988c4\n"
    },
    {
      "commit": "ce30293d222c864fa281da98bc896dd1c98a9a16",
      "tree": "b56c3a7f8be3349aa50c78675e6959e51344938d",
      "parents": [
        "20cde9033d51103f31e21436e88f80e1170c78ad"
      ],
      "author": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Tue Oct 04 14:32:18 2011 -0700"
      },
      "committer": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Wed Oct 05 09:22:57 2011 -0700"
      },
      "message": "Compiler cleanup\n\n  o Added slow path for string resolution\n  o Removed dead throw internal and runtime error\n  o Restructured debug and optimization disable flags for make it easier\n    for command-line option support.\n  o Removed/converted #if 1/0 blocks\n\nChange-Id: I65fc561a55437b3f74d0dfff5af87f938008d70e\n"
    },
    {
      "commit": "8e4aac52962d54cb4be2078b9cd95685e067133a",
      "tree": "bb85a52e0326bef05acf9abe5e3d3b396c1d3795",
      "parents": [
        "03f034949fa7b44aa49e6603d8d5e7a55bf07795"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Sep 26 17:03:36 2011 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Sep 26 17:03:36 2011 -0700"
      },
      "message": "Add the \"- waiting on\"/\"- waiting to lock\" lines to the SIGQUIT output.\n\nChange-Id: I0a8ab2e9e54c390e0d499ef464d82c2f2c628cbe\n"
    },
    {
      "commit": "932746a4f22951abcba7b7c4c94c27b1bf164272",
      "tree": "4a841e3990467b22c36c74cca1e7a952754e49e6",
      "parents": [
        "a0841a83323a82e3bed3d0b5f2e6ec3795f496be"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Thu Sep 22 18:57:50 2011 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Thu Sep 22 20:05:44 2011 -0700"
      },
      "message": "Stack overflow error and unit test.\n\nChange-Id: Ie7198569207b1b87c50d986df002c551ad5d7d3a\n"
    },
    {
      "commit": "ff1ed4770bf7ff024a807b9f909b1a26abb78341",
      "tree": "40cda83cda306f4ade883141d3e0a40fb0790100",
      "parents": [
        "49de87b5c118cc536f2bd68c4fd46fce3d3abcfc"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Tue Sep 20 13:46:24 2011 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Thu Sep 22 11:08:56 2011 -0700"
      },
      "message": "Class cast, fill array and interface exception support.\n\nThis change uses the deliver exception mechanism to implement support\nfor a number of runtime exceptions. It also tidies up code in the\ncompiler and allocates a singular callee save method in the image.\n\nAlso adds a fix for JNI internal test where we weren\u0027t passing\nThread::Current() and that this value is now being used in generated code.\n\nChange-Id: I57eefd9afe40e92fa3a7e737f1a2ed7e1094b5c1\n"
    },
    {
      "commit": "c1f45048b90a85018c6b063c31bc088dc3dd993d",
      "tree": "fe2a976af407f8a77828306e9000837009150480",
      "parents": [
        "ae7cbf45460b472dbd159ab565d55b2880703abb"
      ],
      "author": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Wed Sep 21 16:03:19 2011 -0700"
      },
      "committer": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Wed Sep 21 20:03:23 2011 -0700"
      },
      "message": "Suspend check reworking (ready for rewiew)\n\nI hate burning a register, but the cost of suspend checks was just too high\nin our current environment.  There are things that can be done in future\nreleases to avoid the register burn, but for now it\u0027s worthwhile.\n\nThe general strategy is to reserve r4 as a suspend check counter.\nRather than poll the thread suspendPending counter, we instead simply\ndecrement the counter register.  When it rolls to zero, we check.  For\nnow I\u0027m just using the counter scheme on backwards branches - we always\npoll on returns (which is already heavyweight enough that the extra cost\nisn\u0027t especially noticable).\n\nI\u0027ve also added an optimization hint to the MIR in case we have enough\ntime to test and enable the existing loop analysis code that omits the\nsuspend check on smallish counted loops.\n\nChange-Id: I82d8bad5882a4cf2ccff590942e2d1520d58969d\n"
    },
    {
      "commit": "9651f425f7413772a7b5352da2b04eb7de7d416f",
      "tree": "bd72ec24dc9901a03c19cd93c72e80bbd3af0b89",
      "parents": [
        "845490bda68f7d025ea7f45775c847d2932e00dc"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Mon Sep 19 20:26:07 2011 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Mon Sep 19 20:58:22 2011 -0700"
      },
      "message": "Implement NPE, div by 0 and AIOBE.\n\nImplement runtime support for throwing NPE, divide by 0 and\nArrayIndexOutOfBounds excptions. Add simple unit tests.\n\nChange-Id: I69453c10b6692aa79512bcab1f68c5ab16c8c256\n"
    }
  ]
}
