)]}'
{
  "log": [
    {
      "commit": "4909ba443f71f62404eb17ce299396655f70dc08",
      "tree": "91d6ee9fe583bdf5d7879e3e9eb4e28af5b522d2",
      "parents": [
        "a6399035ee2af012e2ac898ee7a753a2f83b35ab"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Jun 14 13:33:49 2012 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Jun 14 13:46:04 2012 -0700"
      },
      "message": "Run the verifier single-threaded.\n\nAlso improve crash dumps so the frame numbers are the same as when you\u0027re\nin gdb, and add a more memorably-named environment variable for waiting\nfor gdb.\n\n(cherry picked from commit 5db7ea037e9acad434efe8ab4ce798c513fdb49a)\n\nChange-Id: I428569d84dc5728bcd090919456395be44bdc97b\n"
    },
    {
      "commit": "289be85116aaf7c48413858b5d0448868b4e61f3",
      "tree": "b9302aa89850df080b43d0ca0ddb3636463fb22c",
      "parents": [
        "08fcb2591b4e60eee41d0aab92f3bcc36784fa5a"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Jun 12 13:57:20 2012 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Jun 12 13:57:20 2012 -0700"
      },
      "message": "Include the crashing thread\u0027s name in crash dumps.\n\nChange-Id: I7fd821e3f390fde3a7280689292373d413218893\n"
    },
    {
      "commit": "98eedd82dea1deca32574f16544f5f4439427141",
      "tree": "72ad7bba08b738dafec645c424deafc23fbf1385",
      "parents": [
        "036eab43bcf86e6ae5d3558f277b7d6797ff2685"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Jun 11 17:52:56 2012 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Jun 11 17:52:56 2012 -0700"
      },
      "message": "Don\u0027t SEGV in the signal handler in a unit test.\n\nChange-Id: Id441b096a145c630915c71e06338f33b447b008d\n"
    },
    {
      "commit": "6fc5e482151e28d0ad46f64ce62c87de654dec6a",
      "tree": "beb4e48b4db8f82c4eec7a7f32068cadeebd2c94",
      "parents": [
        "225f5a1df25241babd16cdba54056b9e2cd166a2"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Jun 11 12:58:28 2012 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Jun 11 12:58:28 2012 -0700"
      },
      "message": "Help gdb(1) find its way to the right thread.\n\nIt\u0027s more useful to attach to the crashing thread than the main thread.\n\nChange-Id: Ibd8b67579e9e73101d9c56fc11dcead29ce7e7f5\n"
    },
    {
      "commit": "0d39c12238499ca9ccc34d1532c443335e7c1044",
      "tree": "78a6befc07c5f24691234759eb2a8ddb488d0ef1",
      "parents": [
        "ebe2e0f2e5145ef8433c1459b9cd60ecd853ee76"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Jun 06 16:41:17 2012 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Jun 06 17:31:26 2012 -0700"
      },
      "message": "\"InitGoogle\"-style argv stashing.\n\nThis lets us give the command line in crash dumps when dex2oat dies in the\ncontinuous build on the Mac. I\u0027ve also taken the opportunity to use the\nbasename of argv[0] as the default log tag, so dex2oat will now show up in\nlogcat as \"dex2oat\" instead of \"art\" (and we can probably stop manually\nprefixing dex2oat log output).\n\nAlso stash pthread_self() so we can _correctly_ report \"handle\u003d\" in the\nSIGQUIT output.\n\nChange-Id: Ia8249cd19bab5b816cb94a531a65becdfacaa98b\n"
    },
    {
      "commit": "058a6de784e5337c550e8b45bfa1f54e6d16fbf2",
      "tree": "767387657aa125eff1d92f6264348f064a95c277",
      "parents": [
        "46e251bf7200cc06f5a9a82ee2030e650f5e1443"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu May 24 19:13:02 2012 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Jun 01 11:23:21 2012 -0700"
      },
      "message": "Switch completely over to libcorkscrew for Mac OS.\n\n(This patch requires my Darwin libcorkscrew changes.)\n\n(cherry picked from commit 51e916f5b7baf0b0391f55a314a97b12279fe0d5)\n\nConflicts:\n\n\tsrc/runtime_linux.cc\n\nChange-Id: Ife7789597402989e6b8282cc0c0cc1d1832b044a\n"
    },
    {
      "commit": "46e251bf7200cc06f5a9a82ee2030e650f5e1443",
      "tree": "9cfe6a0184fd07cd77819702cd63394e3475383b",
      "parents": [
        "6f3d0518f06dc0eb0fb40e03b4b35e840c81e95f"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue May 22 15:10:45 2012 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Jun 01 10:42:55 2012 -0700"
      },
      "message": "Switch to libcorkscrew for native stack traces.\n\nThis is both for the current thread (which backtrace(3) could do) and other\nthreads, which is functionality we didn\u0027t have on x86 before.\nWe jump through the appropriate hoops to get static symbols as well as dynamic\nones.\n\nAlso unify the existing native stack dumpers so they can share the best code.\n\nExample x86 check failure:\n\n  *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***\n  Fatal signal 11 (SIGSEGV), code 1 (SEGV_MAPERR) fault addr 0xdeadd00d\n  Registers:\n      eax: 0x00000000    ebx: 0x55a966f0    ecx: 0x55d523c0    edx: 0x09225a50\n      edi: 0x559d9b84    esi: 0xfffd8bcc    ebp: 0x55a9aba0    esp: 0xfffd8b90\n      eip: 0x558e2e98                    eflags: 0x00010246 [ PF ZF IF ]\n       cs: 0x00000023     ds: 0x0000002b     es: 0x0000002b     fs: 0x00000007\n       gs: 0x00000063     ss: 0x0000002b\n  Backtrace:\n  \t#00 unwind_backtrace_thread+536 [0x55d76bb8] (libcorkscrew.so)\n  \t#01 art::DumpNativeStack(std::ostream\u0026, int, char const*, bool)+79 [0x55924fcf] (libartd.so)\n  \t#02 art::HandleUnexpectedSignal(int, siginfo*, void*)+1431814659 [0x5597cc23] (libartd.so)\n  \t#03 __kernel_rt_sigreturn [0x55573410] ([vdso])\n  \t#04 art::Runtime::Abort()+600 [0x558e2e98] (libartd.so)\n  \t#05 art::LogMessage::~LogMessage()+1052 [0x5580c16c] (libartd.so)\n  \t#06 art::EnsureResolved(art::Class*)+336 [0x5570dad0] (libartd.so)\n  \t#07 art::ClassLinker::FindClass(char const*, art::ClassLoader const*)+144 [0x5571bc90] (libartd.so)\n  \t#08 art::ClassLinker::FindSystemClass(char const*)+43 [0x5572287b] (libartd.so)\n  \t#09 art::ClassLinker::FinishInit()+82 [0x557228d2] (libartd.so)\n  \t#10 art::ClassLinker::InitFromImage()+1469 [0x5572451d] (libartd.so)\n  \t#11 art::ClassLinker::CreateFromImage(art::InternTable*)+60 [0x5572583c] (libartd.so)\n  \t#12 art::Runtime::Init(std::vector\u003cstd::pair\u003cstd::string, void const*\u003e, std::allocator\u003cstd::pair\u003cstd::string, void const*\u003e \u003e \u003e const\u0026, bool)+943 [0x558e882f] (libartd.so)\n  \t#13 art::Runtime::Create(std::vector\u003cstd::pair\u003cstd::string, void const*\u003e, std::allocator\u003cstd::pair\u003cstd::string, void const*\u003e \u003e \u003e const\u0026, bool)+119 [0x558e9057] (libartd.so)\n  \t#14 art::Dex2Oat::CreateRuntime(std::vector\u003cstd::pair\u003cstd::string, void const*\u003e, std::allocator\u003cstd::pair\u003cstd::string, void const*\u003e \u003e \u003e\u0026, art::InstructionSet)+42 [0x80ac68a] (dex2oatd)\n  \t#15 art::Dex2Oat::Create(std::vector\u003cstd::pair\u003cstd::string, void const*\u003e, std::allocator\u003cstd::pair\u003cstd::string, void const*\u003e \u003e \u003e\u0026, art::InstructionSet, unsigned int, bool)+60 [0x80ac87c] (dex2oatd)\n  \t#16 art::dex2oat(int, char**)+3167 [0x80894cf] (dex2oatd)\n  \t#17 main+17 [0x8086a01] (dex2oatd)\n  \t#18 __libc_start_main+230 [0x55c12bd6] (libc-2.11.1.so)\n\nExample x86 SIGQUIT dump (note the three stacks, and note the absence of all\nthe crap that makes dalvik\u0027s attempt so unreadable):\n\n  \"Thread-10\" prio\u003d5 tid\u003d11 VmWait\n    | group\u003d\"main\" sCount\u003d1 dsCount\u003d0 obj\u003d0x612d6620 self\u003d0x884f8f0\n    | sysTid\u003d30512 nice\u003d0 sched\u003d0/0 cgrp\u003ddefault handle\u003d1458686832\n    | schedstat\u003d( 1249502 8995 26 ) utm\u003d0 stm\u003d0 core\u003d14 HZ\u003d100\n    | stackSize\u003d1044KB stack\u003d0x57905000-0x57906000\n    kernel: futex_wait_queue_me+0xcd/0x110\n    kernel: futex_wait+0x1e5/0x310\n    kernel: do_futex+0x101/0xb00\n    kernel: compat_sys_futex+0x75/0x160\n    kernel: sysenter_dispatch+0x7/0x2e\n    native: __kernel_vsyscall+14 [0x5557342e] ([vdso])\n    native: pthread_mutex_lock+54 [0x55cd8bf6] (libc-2.11.1.so)\n    native: art::Mutex::Lock()+86 [0x55823a86] (libartd.so)\n    at java.lang.AbstractStringBuilder.\u003cinit\u003e(AbstractStringBuilder.java:75)\n    at java.lang.StringBuilder.\u003cinit\u003e(StringBuilder.java:54)\n    at java.lang.Thread.create(Thread.java:427)\n    at java.lang.Thread.\u003cinit\u003e(Thread.java:223)\n    at ThreadStress$1.run(ThreadStress.java:134)\n\n(cherry picked from commit 00e446e5d912100b831fdcdbc276e7c31447f0c4)\n\nConflicts:\n\n\tsrc/thread.cc\n\nChange-Id: I4712f8235992eafe6d8d6f915aa96f684bceaff2\n"
    },
    {
      "commit": "d06a6c7c40180c2c906d6981dd461ede2187bd99",
      "tree": "e05a9fc25d9cc15c41d109af7a92b610b15fac7d",
      "parents": [
        "55d5ea6b59c15d9da9f7552a557628f2c84b7c92"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed May 30 17:59:06 2012 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu May 31 11:33:00 2012 -0700"
      },
      "message": "[DO NOT MERGE] Improve signal catching and native stack dumps.\n\nThis works around the problem with abort(3) (and friends) on glibc,\nand improves our ability to catch SIGSEGVs from the main thread, and\nslightly improves our behavior if multiple threads are dying at once.\nI think any remaining flakiness is only in this last case, and I\u0027m\nnot sure whether we can actually improve that any further.\n\n(cherry picked from commit dcaaea9d30f39622d0b1d9bbb68911173621e54b)\n\nConflicts:\n\n\tsrc/runtime_linux.cc\n\nChange-Id: I9922f3ee4609799993635e1ed98a21363505a6ab\n"
    },
    {
      "commit": "833770b2d871967ea2fdd7448d4c8ab99b8ca610",
      "tree": "034bf89abc07dbddb7bb4948f8219199aff6f67e",
      "parents": [
        "8a31b50daf530a28c8ce2be8d758c737cb32897b"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue May 01 15:41:03 2012 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue May 01 15:41:03 2012 -0700"
      },
      "message": "Fix a SIGSTKFLT typo.\n\nStupid Unix guys. A few extra letters here and there wouldn\u0027t have killed them,\nand it would have made a lot of things a lot more readable.\n\nChange-Id: I0cb5f7eeef0ecaf7d1bd819f1b72af6393708edd\n"
    },
    {
      "commit": "6c1c69eea21cce39dd043d89368a684d250c9abe",
      "tree": "10313ed9973021fa2c408493cfe9ff877b07beab",
      "parents": [
        "d2abaf455c31fc5a9c9807c74002fd92f838977a"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Apr 23 16:12:51 2012 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Apr 23 16:17:09 2012 -0700"
      },
      "message": "Various crash diagnostic improvements.\n\nRegister dumps, restore backtraces on Mac OS where possible, Mac demangling,\nmore comments, logging when using an abort hook, and more selective use of\nabort hooks.\n\nLinux:\n\n *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***\n Fatal signal 11 (SIGSEGV), code 1 (SEGV_MAPERR) fault addr 0xdeadd00d\n Registers:\n     eax: 0x00000000    ebx: 0x5598eff4    ecx: 0x56300000    edx: 0x55992de0\n     edi: 0x5597e478    esi: 0xfff1f3c8    ebp: 0xfff1f3e8    esp: 0xfff1f390\n     eip: 0x558a82ff eflags: 0x00010246\n      cs: 0x00000023     ds: 0x0000002b     es: 0x0000002b     fs: 0x00000007\n      gs: 0x00000063     ss: 0x0000002b\n Backtrace:\n \t#00 art::Backtrace::Dump(std::ostream\u0026)+0x4c [0x559357ac] (libartd.so)\n \t#01 ??+0x3b73b0 [0x559343b0] (libartd.so)\n \t#02 [0x55573410] (???)\n \t#03 art::LogMessage::~LogMessage()+0x3bd [0x557e2e6d] (libartd.so)\n \t#04 ?? [0x8088941] (dex2oatd)\n \t#05 ?? [0x80898f7] (dex2oatd)\n \t#06 __libc_start_main+0xe6 [0x55b06bd6] (libc.so.6)\n \t#07 ?? [0x8085b31] (dex2oatd)\n\nMac OS:\n\n *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***\n Fatal signal 6 (SIGABRT), code 0 (?)\n Registers:\n     eax: 0x00000000    ebx: 0xc008bce0    ecx: 0xc008bc5c    edx: 0x906559c6\n     edi: 0xac0f52c0    esi: 0x00000006    ebp: 0xc008bc78    esp: 0xc008bc5c\n     eip: 0x906559c6 eflags: 0x00000246\n      cs: 0x0000000b     ds: 0x00000023     es: 0x00000023     fs: 0x0000001f\n      gs: 0x0000000f     ss: 0x00000023\n Backtrace:\n \t#00 art::Backtrace::Dump(std::ostream\u0026) + 40 [0x001ce25a] (libartd.dylib)\n \t#01 _ZN3artL22HandleUnexpectedSignalEiP9__siginfoPv + 1051 [0x001cdacb] (libartd.dylib)\n \t#02 _sigtramp + 43 [0x90a4559b] (libsystem_c.dylib)\n \t#03 0x0 + 4294967295 [0xffffffff] (???)\n \t#04 abort + 167 [0x909e0bdd] (libsystem_c.dylib)\n \t#05 art::Runtime::Abort() + 322 [0x00192312] (libartd.dylib)\n \t#06 art::LogMessage::~LogMessage() + 413 [0x00135a6d] (libartd.dylib)\n \t#07 art::dex2oat(int, char**) + 6183 [0x00091927] (dex2oatd)\n \t#08 start + 53 [0x0008fb75] (dex2oatd)\n\nChange-Id: I68d215f09723f236889242cfe8aa8819afea4a60\n"
    },
    {
      "commit": "8593fdbacf97261f790ca53ea0ec416f57c987a7",
      "tree": "a9c97a2bc41a31c3a7f8f72d5f1c27bb34b8a627",
      "parents": [
        "e2f0911dfc7cec7c48ad0dea50f2028ae0f1fd0f"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Sat Apr 21 20:53:44 2012 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Sat Apr 21 20:53:44 2012 -0700"
      },
      "message": "Clean up host aborts (and simplify the code).\n\nChange-Id: I6efaf065304459df0e030f242f8d1d2fc6fdec4a\n"
    },
    {
      "commit": "2554cb916a1764218a1f11cc9741203b468310d0",
      "tree": "02e7a36510ebbd7d406f549dce76ad42e2f87492",
      "parents": [
        "4c5231d2cd83536584f7f1063d0afffa124fcec4"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Apr 18 17:19:26 2012 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Apr 18 17:19:26 2012 -0700"
      },
      "message": "Only wait for gdb to attach if debug_db_uid is in the environment.\n\nStupid name, to match the Android debuggerd \"debug.db.uid\" system property.\n\nChange-Id: I1dfc4d6bc423acee9f3effb24e6f143fb9660ec3\n"
    },
    {
      "commit": "d8af1592a97f7447ecf93f85098cb36340ab0fe2",
      "tree": "3dd133bce3d71626a9662e6e44bafe80167b06fe",
      "parents": [
        "99250ba6a2cc72b8894dffa77c1fca5570087e3c"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Apr 16 20:40:15 2012 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Apr 17 13:11:30 2012 -0700"
      },
      "message": "Use an alternate signal stack for the unexpected signals on the host.\n\nThis lets us report native stack overflow somewhat sensibly.\n\nChange-Id: I841c285b2481aecc6edb0800f385ccc5665067ff\n"
    },
    {
      "commit": "ac8097ffabccd87e3baba7a78cc4d6d96d03dce5",
      "tree": "bd9ea4ae5130aaa739f7afc1712d6c46c819c8ba",
      "parents": [
        "457005c557b8762475db3220ce5a747d629f975b"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Apr 16 14:59:44 2012 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Apr 16 14:59:44 2012 -0700"
      },
      "message": "Fix Mac build.\n\nComically, the _linux.cc files are built for Mac OS too. At the moment they\u0027re\nreally _host.cc instead; longer term it\u0027s not clear whether we want to rename\nthem thus or split them.\n\nChange-Id: If602a814ab3bed26101153c85b892cbc5a0a02b7\n"
    },
    {
      "commit": "457005c557b8762475db3220ce5a747d629f975b",
      "tree": "e267d67cf62e64f8d479d4af2df631fed3ef8d26",
      "parents": [
        "1144f950daafb99b4b48196c17391f54f7abb4d3"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Apr 16 13:54:25 2012 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Apr 16 13:54:25 2012 -0700"
      },
      "message": "Add signal handlers for host builds to imitate debuggerd.\n\nThis isn\u0027t going to be as reliable as debuggerd because we\u0027re running inside\nthe crashed process. We could always build debuggerd for the host, and have\nsomething to call out to that. But for now, this gives us most of the\ninformation most of the time...\n\nChange-Id: I992ffb3bdb2903e4b83bd5666108ebe12a813338\n"
    },
    {
      "commit": "1bac54ffa933fbe9b92b62437577f2f4583eff1a",
      "tree": "a27134343ed3cd45a286c3a68b9a4469e70f13e7",
      "parents": [
        "96970cdab3e28511322ce37fa578f6eff8931d72"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Mar 16 12:48:31 2012 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Mar 16 12:48:31 2012 -0700"
      },
      "message": "Fix all our unused parameter warnings so we let GCC report them.\n\nThere were a couple of genuine bugs here (fixed), plus there\u0027s a missing\nfeature in trace.cc that I\u0027ve just added a TODO for.\n\nAlso note that I haven\u0027t touched the compilers; this warning is still\nexplicitly disabled for that code. I\u0027ll do that when there\u0027s less going\non in those directories.\n\nChange-Id: Ic3570bf82411a07c7530bfaf1995ac995b9fc00f\n"
    },
    {
      "commit": "9ee5f9ccba015beb3ae376ed08b3363bd9df6422",
      "tree": "f79f3f4439048ba90d1947abfc3ac09e133a1908",
      "parents": [
        "5523ee070b005576c6f889415205d49ea77cf243"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Feb 03 18:33:16 2012 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Feb 03 18:33:16 2012 -0800"
      },
      "message": "Make all FATAL-related output appear as \u0027F\u0027 log output.\n\nPreviously most of the spew belonging to a FATAL would be \u0027E\u0027 because\nRuntime::Abort() used LOG(ERROR) to avoid recursion.\n\nChange-Id: If8f62586c302c239e827c5235ed58ee8fe6e8f5e\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": "ad6c9c3dbf7541340f22ccbb333f08556ad7e000",
      "tree": "dc11a1165c0f145cf3e6b5edc16bea8b57ba62fe",
      "parents": [
        "d1029981c8ec2341f76376c8d8e15d72dda4c45f"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Jan 19 17:39:12 2012 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Jan 20 14:04:02 2012 -0800"
      },
      "message": "Mac build fixes.\n\nThis gets us pretty close. There are a few problems with libraries we depend\non (system/core/liblog and external/icu4c) that I have workarounds for, and\na problem with gtest that I haven\u0027t yet worked around that prevents us from\nlinking any of the tests. But this at least gives us a Mac dex2oat binary.\n\nChange-Id: Iac39a6c2963c3d37ab2165d7d1a70e303ba22c45\n"
    },
    {
      "commit": "362f9bc807169bcfc8761dde067bbfb79b5ad0fd",
      "tree": "100689aa13a39913b43cb12780ba472897cd665a",
      "parents": [
        "fc86162ce2a3467acb690e18cc8bd9b3daafc606"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Oct 17 18:56:41 2011 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Oct 17 20:26:54 2011 -0700"
      },
      "message": "Fix cpplint\u0027s whitespace warnings.\n\nChange-Id: I16b69d773e59b49e8e30227b5aa5cb1959a8930f\n"
    },
    {
      "commit": "a09576416788b916095739e43a16917e7948f3a4",
      "tree": "63c4c7b9726817a51a9dc514dc68fb16287748cd",
      "parents": [
        "410c0c876f326e14c176a39ba21fc4dd3f7db8ab"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Sep 02 14:27:33 2011 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Sep 02 14:27:33 2011 -0700"
      },
      "message": "Add back the dalvik-style JNI logging and tracing.\n\nChange-Id: I3f8f50c9f9f2cb36f1668150c5e19f6225d15bbb\n"
    },
    {
      "commit": "34023801bd544e613d6e85c9a5b2e743f3710e8f",
      "tree": "cf42aadf76cd6c1104e75f20b223716ed44dbb16",
      "parents": [
        "881dd56c9b6ea2c922956650b763d36d2eeb799b"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Aug 30 12:06:17 2011 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Aug 30 12:06:17 2011 -0700"
      },
      "message": "Remove uses of scoped_ptr_malloc.\n\nChange-Id: I355fcfc93e8d689bea8b9388423ca12cb3e6566f\n"
    },
    {
      "commit": "82870720a9a2709fcde4a03d96be383cee4b25d3",
      "tree": "36aa7572ea4e4459577ebe50976fb504dc987238",
      "parents": [
        "ff0f9bea6355fe0c420815f9b894e6bb634fe764"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Aug 29 19:04:51 2011 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Aug 29 19:04:51 2011 -0700"
      },
      "message": "Demangle C++ names in backtraces.\n\nChange-Id: Id4ccefc1e0cbed357b09b84ef6f51b287493e6fd\n"
    },
    {
      "commit": "ad107abee00fb523b9fda575a40395e9d6d9510d",
      "tree": "9db5ff4af4613224ed136bedce10b88538933bff",
      "parents": [
        "650a07d237f219ee6f23cfe939118e6f9c48f4d3"
      ],
      "author": {
        "name": "Carl Shapiro",
        "email": "cshapiro@google.com",
        "time": "Sun Aug 14 15:54:24 2011 -0700"
      },
      "committer": {
        "name": "Carl Shapiro",
        "email": "cshapiro@google.com",
        "time": "Sun Aug 14 15:54:24 2011 -0700"
      },
      "message": "Remove author attributions.\n\nChange-Id: I58d2983ce41f6b3f3a4e1bbd1d075e794b8257e3\n"
    },
    {
      "commit": "2ed144c2b49ae1da6c464d7a1be0062870530802",
      "tree": "2cd7472e610494129bcfd0b65744b81030dd4f2f",
      "parents": [
        "27012039a909f8769e4a90200921db8f0fd0396e"
      ],
      "author": {
        "name": "Carl Shapiro",
        "email": "cshapiro@google.com",
        "time": "Tue Jul 26 16:52:08 2011 -0700"
      },
      "committer": {
        "name": "Carl Shapiro",
        "email": "cshapiro@google.com",
        "time": "Tue Jul 26 16:52:08 2011 -0700"
      },
      "message": "Preliminary implementation of the JNI invocation interface.\n\nChange-Id: Ib144cb887864cd232a8cb8167b20d1540829a6a5\n"
    },
    {
      "commit": "578bbdc684db8ed68e9fedbc678669d27fa68b6e",
      "tree": "d752941d81ad6d7e248c349ce21371a8ae369693",
      "parents": [
        "45a76cb99104a222d6a9bd768a084893dcb7cf30"
      ],
      "author": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Thu Jul 21 14:07:47 2011 -0700"
      },
      "committer": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Fri Jul 22 15:23:33 2011 -0700"
      },
      "message": "Move DexFiles to be allocated on the heap\n\nRemoved pointer from DexFile to RawDexfile to allow heap allocation of\nDexFile. DexFile is now an ObjectArray of ObjectArrays. Removing the\npointer from DexFile to RawDexfile meant adding arguments to pass the\nRawDexfile along to ClassLinker::LoadClass, LoadInterfaces, LoadField,\nLoadMethod, LinkClass, LinkInterfaces, ResolveClass to avoid the need\nto look a RawDexfile up from a DexFile. ClassLinker::CreateArrayClass\nnow takes the raw_dex_file to assist in looking up the component class\nfrom the proper source. Moved Method::HasSame* methods to ClassLinker\nsince for access to the RawDexfile (and tests of HasSame from\nObjectTest to ClassLinkerTest.\n\n\tsrc/dex_file.cc\n\tsrc/dex_file.h\n\tsrc/class_linker.cc\n\tsrc/class_linker.h\n\tsrc/object.h\n\nRunTime::Create/RunTime::Init/ClassLinker::Create/ClassLinker::Init\nnow take the boot class path. A boot class path with\nLjava/lang/Object; must be provided to initalize [Ljava/lang/Object;\nduring startup in order to heap allocate DexFiles.\n\n\tsrc/class_linker.cc\n\tsrc/class_linker.h\n\tsrc/runtime.cc\n\tsrc/runtime.h\n\nRestored FindClass to load from a specific dex file. This is for use\nby class loaders, otherwise it is assumed the caller wants to use the\nboot classpath. We now distinguish and track the boot classpath as\nseparate from other dex files known to the class linker. Renamed\nAppendToClassPath to AppendToBootClassPath and FindInClassPath to\nFindInBootClassPath to clarify.\n\n\tsrc/class_linker.cc\n\tsrc/class_linker.h\n\nCleaned up AllocCharArray to generic AllocArray and added\nAllocObjectArray. Added a functional ObjectArray implementation and a\nObjectTest to cover it.\n\n\tsrc/heap.h\n\tsrc/object.h\n\tsrc/object_test.cc\n\nSwitched more Object* downcasting to down_cast\n\n\tsrc/class_linker.cc\n\nSwitched order of arguments for DexFile::SetResolved to follow more\nconventional collection ordering ( \"(index, value)\" vs \"(value, index)\" )\n\n\tsrc/dex_file.h\n\tsrc/class_linker.cc\n\tsrc/class_linker.h\n\nAdded class_linker_ and java_lang_raw_dex_file_ to RuntimeTest as\nconvenience to test subclasses. ClassLinkerTest now can use these to\nsimplify its ::Assert* methods. JniCompilerTest now uses it for\nsetting up its boot class path. Removed now unneeded\nOpenDexFileBase64.\n\n\tsrc/common_test.h\n\tsrc/class_linker_test.cc\n\tsrc/jni_compiler_test.cc\n\nAdd external/gtest/include to non-test include path so FRIEND_TEST can be used.\nAdd src to include path to remove the need of using in in art/src files.\n\n\tbuild/Android.libart.host.mk\n\tbuild/Android.libart.mk\n\tsrc/assembler.cc\n\tsrc/assembler.h\n\tsrc/assembler_arm.cc\n\tsrc/assembler_arm.h\n\tsrc/assembler_x86.cc\n\tsrc/assembler_x86.h\n\tsrc/assembler_x86_test.cc\n\tsrc/base64.cc\n\tsrc/base64.h\n\tsrc/calling_convention.cc\n\tsrc/calling_convention.h\n\tsrc/calling_convention_arm.cc\n\tsrc/calling_convention_x86.cc\n\tsrc/casts.h\n\tsrc/class_linker.h\n\tsrc/class_linker_test.cc\n\tsrc/common_test.h\n\tsrc/constants.h\n\tsrc/constants_arm.h\n\tsrc/constants_x86.h\n\tsrc/dex_file.cc\n\tsrc/dex_file.h\n\tsrc/dex_file_test.cc\n\tsrc/dex_instruction.cc\n\tsrc/dex_instruction.h\n\tsrc/dex_instruction_visitor.h\n\tsrc/dex_instruction_visitor_test.cc\n\tsrc/dex_verifier.cc\n\tsrc/dex_verifier.h\n\tsrc/heap.cc\n\tsrc/heap.h\n\tsrc/jni_compiler.cc\n\tsrc/jni_compiler_test.cc\n\tsrc/jni_internal.cc\n\tsrc/jni_internal.h\n\tsrc/leb128.h\n\tsrc/managed_register.h\n\tsrc/managed_register_arm.cc\n\tsrc/managed_register_arm.h\n\tsrc/managed_register_arm_test.cc\n\tsrc/managed_register_x86.cc\n\tsrc/managed_register_x86.h\n\tsrc/managed_register_x86_test.cc\n\tsrc/mark_stack.cc\n\tsrc/mark_stack.h\n\tsrc/mark_sweep.cc\n\tsrc/mark_sweep.h\n\tsrc/memory_region.cc\n\tsrc/memory_region.h\n\tsrc/monitor.h\n\tsrc/object.cc\n\tsrc/object.h\n\tsrc/object_bitmap.cc\n\tsrc/object_bitmap.h\n\tsrc/object_test.cc\n\tsrc/offsets.cc\n\tsrc/offsets.h\n\tsrc/raw_dex_file.cc\n\tsrc/raw_dex_file.h\n\tsrc/raw_dex_file_test.cc\n\tsrc/runtime.cc\n\tsrc/runtime.h\n\tsrc/scoped_ptr.h\n\tsrc/space.cc\n\tsrc/space.h\n\tsrc/space_test.cc\n\tsrc/stringpiece.cc\n\tsrc/thread.cc\n\tsrc/thread.h\n\tsrc/thread_arm.cc\n\tsrc/thread_x86.cc\n\tsrc/utils.h\n\nChange-Id: Ib633cea878c36921e9037b0464cb903aec318c3e\n"
    },
    {
      "commit": "ffe6736397d17457188727510f0a2953f69a383a",
      "tree": "0d03bee69cf0cfecf76253fe3cb5f6898ae64faa",
      "parents": [
        "a5780dad67556297c8ca5f2608c53b193e6c4514"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Sun Jul 17 12:09:27 2011 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Sun Jul 17 12:22:59 2011 -0700"
      },
      "message": "Implement Runtime::Abort and switch LOG(FATAL) over to it.\n\nRuntime::Abort takes arguments so it can provide less misleading log output,\nbut this shouldn\u0027t matter to callers because they should be using LOG(FATAL)\nanyway.\n\nThis patch also fixes an errno/errno_ mixup in the logging code.\n\nChange-Id: If24b66b7bbf0bf7c0ecb93dd806d82b1d21ee239\n"
    }
  ]
}
