)]}'
{
  "log": [
    {
      "commit": "86b35f97ce1848608e70eb1f0ea9f73d25b80d09",
      "tree": "a3e620c8fe65761db65736fc33a517217cc226ba",
      "parents": [
        "7e7e69a0421e30f5e6ffa498db25dfd0c13d500e",
        "1baabf0726eb285284e0c908ccba9f209b399fae"
      ],
      "author": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Tue Jun 16 23:20:08 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Jun 16 23:20:09 2015 +0000"
      },
      "message": "Merge \"Revert \"Revert \"Use dlopen to load oat files.\"\"\""
    },
    {
      "commit": "1baabf0726eb285284e0c908ccba9f209b399fae",
      "tree": "0dc531c157f72a1413079f765e7437280673f93b",
      "parents": [
        "7a46b7e235a7c35191cd9ddbab6ca4db0e535da5"
      ],
      "author": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Tue Jun 16 17:12:34 2015 +0000"
      },
      "committer": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Tue Jun 16 17:12:34 2015 +0000"
      },
      "message": "Revert \"Revert \"Use dlopen to load oat files.\"\"\n\nThis reverts commit 7a46b7e235a7c35191cd9ddbab6ca4db0e535da5.\n\nChange-Id: I33439d0e3d7a7e63591a8c7b356e716dcb62bca1\n"
    },
    {
      "commit": "f6c77d7632bdfe564c2ba61690fecc65f10ea9f6",
      "tree": "af87ccb86c7e0622912bf088a464716166ea450a",
      "parents": [
        "6ebf70ec61eff097e1bdddb1b887316389e34dde",
        "7a46b7e235a7c35191cd9ddbab6ca4db0e535da5"
      ],
      "author": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Mon Jun 15 23:44:58 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Jun 15 23:44:59 2015 +0000"
      },
      "message": "Merge \"Revert \"Use dlopen to load oat files.\"\""
    },
    {
      "commit": "7a46b7e235a7c35191cd9ddbab6ca4db0e535da5",
      "tree": "e69c91d2c7903fb99083b047d2c468da2cc51f80",
      "parents": [
        "49e1fabc85480f01077f3cc10e8ba6ada6e4befa"
      ],
      "author": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Mon Jun 15 23:44:08 2015 +0000"
      },
      "committer": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Mon Jun 15 23:44:08 2015 +0000"
      },
      "message": "Revert \"Use dlopen to load oat files.\"\n\nThis reverts commit 49e1fabc85480f01077f3cc10e8ba6ada6e4befa.\n\nChange-Id: If49e8b60c458a992519b7fdabe02e7d53830edab\n"
    },
    {
      "commit": "01d4b5072c064d927260486c891a09fe689289c0",
      "tree": "f494fc108b4b65d5a43809845a3d8de4ada27d7b",
      "parents": [
        "4366369f1151cd703073f805036793e2f7255571"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri Jun 12 17:32:31 2015 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri Jun 12 17:32:31 2015 -0700"
      },
      "message": "Pass reuse flag to MemMap constructor\n\nBug: 21806978\nChange-Id: Iec92220d8f42e1d702ee39b27a8de570ea1ab588\n"
    },
    {
      "commit": "49e1fabc85480f01077f3cc10e8ba6ada6e4befa",
      "tree": "0dc531c157f72a1413079f765e7437280673f93b",
      "parents": [
        "79b08e69b71a53beb3f053b304c34ea88bfb9a47"
      ],
      "author": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Thu Jun 11 17:38:44 2015 +0100"
      },
      "committer": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Fri Jun 12 23:42:19 2015 +0100"
      },
      "message": "Use dlopen to load oat files.\n\nThis is required to support in-process unwinding in libunwind.\nlibunwind obtains the list of loaded libraries from the linker,\ntherefore we need to use dlopen, otherwise it will not find them.\n\nChange-Id: I5fd89cce6b909385cb89b8a48c0d817677acf299\n"
    },
    {
      "commit": "38c8221b8f8bd0411006c44d3126f78eb6a8e9ab",
      "tree": "090dfc7d5b12fe21050b1d29a4ed2d7bff7294f0",
      "parents": [
        "a56b2e09cc311d3b8eb9384decc76a13ed5da6e9"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Thu Jun 04 16:22:41 2015 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Mon Jun 08 11:32:47 2015 -0700"
      },
      "message": "More LOW_4G optimizations\n\nEagerly try to map at an address when it doesn\u0027t overlap with\nthe ART known maps.\n\nReduces time spent creating the heap on N9 from ~100ms to ~10ms.\n\n(cherry picked from commit 3ae250c16bae3462e040b844dbc2e2fc732d67ba)\n\nBug: 20727525\nChange-Id: Ie8982ca9d1f3158104b2b53b992c3a28841fc443\n"
    },
    {
      "commit": "7889a77e464b820745c9507ccd484f68e7b1c650",
      "tree": "eb6ffe8edece5a47c7aaa7363a32e6b89f75cec9",
      "parents": [
        "6a1c92f1e4a455d802ab0d0ac47504cdd7c12f0f"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Thu Jun 04 13:42:14 2015 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Thu Jun 04 15:20:03 2015 -0700"
      },
      "message": "Add optimization for LOW_4G allocator\n\nThe optimization uses the maps_ field to skip over regions which we\nknow wont be large enough for the request.\n\nReduces time to create heap from 500-700ms to 100ms on N9.\n\n(cherry picked from commit 1c8bef4a71612f10b89b102434f70de5a127cc74)\n\nBug: 20727525\n\nChange-Id: I4fa92d58c2e135ba31a03ababff46669089bb542\n"
    },
    {
      "commit": "1d8199d8215a6ee7b1904edc47372d83fcdee5a3",
      "tree": "db860e447157f5b005fad2c71bedc63ad5d79050",
      "parents": [
        "637be5cefe1462b8d0bd5e065bd64a10f01647ac"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Tue Jun 02 11:01:10 2015 -0700"
      },
      "committer": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Tue Jun 02 11:01:16 2015 -0700"
      },
      "message": "Tidy up spelling\n\nChange-Id: I65fba9d8310ff3759322cec3345235e6472f4cfb\n"
    },
    {
      "commit": "17a924abde2b0f1f37f6008b451a0a75190c71ff",
      "tree": "7a081b8d31aaae4ee40ffe2d4c43eb79d8fe576f",
      "parents": [
        "2e8da8ecb94134081c3ea18a217294db367888a3"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri May 08 15:17:32 2015 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri May 08 22:17:47 2015 +0100"
      },
      "message": "ART: Merge entries with same name and protect in MemMap dump.\n\nThis should make the MemMap dump less chatty and allow the\nlogger to keep more relevant output.\n\nBug: 20873174\nChange-Id: I09058798faa8f79d154cee5008017b03700df8db\n"
    },
    {
      "commit": "b5505823ad3d0bab8fc9c15c266a3d8cd96ee59e",
      "tree": "87924829284955cfd3fa71cf28b34ecfc7f34c18",
      "parents": [
        "659f4c14e8e044f8efe5405ba0da50aa894dd25f"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri May 08 11:10:16 2015 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri May 08 11:12:22 2015 +0100"
      },
      "message": "ART: Fix debug output for bad reused MemMap.\n\nLog the error_msg instead of a pointer to it.\nRaise the log level to ERROR for the process maps.\n\nChange-Id: I95f82f013d1c6360f40e6315652d1a2dda0f39e2\n"
    },
    {
      "commit": "2cebb24bfc3247d3e9be138a3350106737455918",
      "tree": "d04d27d21b3c7733d784e303f01f873bb99e7770",
      "parents": [
        "1f02f1a7b3073b8fef07770a67fbf94afad317f0"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue Apr 21 16:50:40 2015 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed Apr 22 12:44:27 2015 -0700"
      },
      "message": "Replace NULL with nullptr\n\nAlso fixed some lines that were too long, and a few other minor\ndetails.\n\nChange-Id: I6efba5fb6e03eb5d0a300fddb2a75bf8e2f175cb\n"
    },
    {
      "commit": "c785344b87221f5e4e6473e5b762e4e61fe65dcf",
      "tree": "cd32ad2c2604596a18926f04d4c313dab255ecfd",
      "parents": [
        "a29d93b380c9aeb8270e281aefbdd0c77a430d43"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri Mar 27 14:35:38 2015 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri Apr 10 12:57:27 2015 -0700"
      },
      "message": "Move ArtField to native\n\nAdd linear alloc. Moved ArtField to be native object. Changed image\nwriter to put ArtFields after the mirror section.\n\nSavings:\n2MB on low ram devices\n4MB on normal devices\n\nTotal PSS measurements before (normal N5, 95s after shell start):\nImage size: 7729152 bytes\n23112 kB: .NonMoving\n23212 kB: .NonMoving\n22868 kB: .NonMoving\n23072 kB: .NonMoving\n22836 kB: .NonMoving\n19618 kB: .Zygote\n19850 kB: .Zygote\n19623 kB: .Zygote\n19924 kB: .Zygote\n19612 kB: .Zygote\nAvg: 42745.4 kB\n\nAfter:\nImage size: 7462912 bytes\n17440 kB: .NonMoving\n16776 kB: .NonMoving\n16804 kB: .NonMoving\n17812 kB: .NonMoving\n16820 kB: .NonMoving\n18788 kB: .Zygote\n18856 kB: .Zygote\n19064 kB: .Zygote\n18841 kB: .Zygote\n18629 kB: .Zygote\n3499 kB: .LinearAlloc\n3408 kB: .LinearAlloc\n3424 kB: .LinearAlloc\n3600 kB: .LinearAlloc\n3436 kB: .LinearAlloc\nAvg: 39439.4 kB\n\nNo reflection performance changes.\n\nBug: 19264997\nBug: 17643507\n\nChange-Id: I10c73a37913332080aeb978c7c94713bdfe4fe1c\n"
    },
    {
      "commit": "5c42c29b89286e5efa4a4613132b09051ce5945b",
      "tree": "5db25a4f62c5583f2f6fc42b9a2ff47362eeed5c",
      "parents": [
        "242026e246a8b9efe098a0cce008fd525e011e5b"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Feb 25 12:02:49 2015 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Mar 02 18:07:03 2015 +0000"
      },
      "message": "Add support for .bss section in oat files.\n\nChange-Id: I779b80b8139d9afdc28373f8c68edff5df7726ce\n"
    },
    {
      "commit": "a6dfdae1cffc78f9791348b2e1dc8f4c6c3f7128",
      "tree": "2b07c1cc94212963ec38a2c0a784a26fe1522194",
      "parents": [
        "96ac49a260223dc00291116daa63d7489c52bb0f"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Tue Feb 24 15:50:19 2015 -0800"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Tue Feb 24 22:30:47 2015 -0800"
      },
      "message": "ART: Print maps directly to log\n\nDo not read proc maps into a string before printing them later back\nto the log. In low-memory situations this can cause a bad_alloc.\n\nExternal bug: http://b.android.com/153990\nBug: 19494774\n\nChange-Id: Ie63d8788afe8c9da65b30b2f89c50d3dbb820755\n"
    },
    {
      "commit": "379d09fe3c3feb7c2a2fb5a3623689b5ace7e79b",
      "tree": "680b4173130057a1f70ad321eaf4cfbeba0e291c",
      "parents": [
        "ca7d89d09294254f16db170a53b0f8dfbf0213ac"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Thu Jan 08 11:28:13 2015 -0800"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Thu Jan 08 16:02:00 2015 -0800"
      },
      "message": "Add clamp growth limit\n\nClamp growth limit shrinks the space memmaps to the current growth\nlimit. This reduces virtual memory usage for apps with small heaps.\n\nBug: 18387825\nBug: 17131630\n\nChange-Id: I4a8fdc335d2c40492e991708adabcc46299efb7d\n"
    },
    {
      "commit": "277ccbd200ea43590dfc06a93ae184a765327ad0",
      "tree": "d89712e93da5fb2748989353c9ee071102cf3f33",
      "parents": [
        "ad17d41841ba1fb177fb0bf175ec0e9f5e1412b3"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Nov 03 21:36:10 2014 -0800"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Tue Nov 04 18:40:08 2014 -0800"
      },
      "message": "ART: More warnings\n\nEnable -Wno-conversion-null, -Wredundant-decls and -Wshadow in general,\nand -Wunused-but-set-parameter for GCC builds.\n\nChange-Id: I81bbdd762213444673c65d85edae594a523836e5\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": "c7dd295a4e0cc1d15c0c96088e55a85389bade74",
      "tree": "0c08a2236bc9ba5d9a4dc75d4dd0ed2d76f8f1c6",
      "parents": [
        "94e5af8602150efa95bde35cc9be9891ddf30135"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Tue Oct 21 23:31:19 2014 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Wed Oct 22 12:06:23 2014 -0700"
      },
      "message": "Tidy up logging.\n\nMove gVerboseMethods to CompilerOptions. Now \"--verbose-methods\u003d\" option to\ndex2oat rather than runtime argument \"-verbose-methods:\".\nMove ToStr and Dumpable out of logging.h, move LogMessageData into logging.cc\nexcept for a forward declaration.\nRemove ConstDumpable as Dump methods are all const (and make this so if not\ncurrently true).\nMake LogSeverity an enum and improve compile time assertions and type checking.\nRemove log_severity.h that\u0027s only used in logging.h.\nWith system headers gone from logging.h, go add to .cc files missing system\nheader includes.\nAlso, make operator new in ValueObject private for compile time instantiation\nchecking.\n\nChange-Id: I3228f614500ccc9b14b49c72b9821c8b0db3d641\n"
    },
    {
      "commit": "6e88ef6b604a7a945a466784580c42e6554c1289",
      "tree": "1e296564787b51514cf2eca5b732647c1a82912e",
      "parents": [
        "58e51f38e2304a08aa9ec380383e0b3614f96a96"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue Oct 14 15:01:24 2014 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue Oct 14 15:43:21 2014 -0700"
      },
      "message": "Change MemMap::maps_ to not be global variable\n\nRuntime.exit() was causing globals to get destructed at the same time\nthat another thread was using it for allocating a new mem map.\n\nBug: 17962201\nChange-Id: I400cb7b8141d858f3c08a6fe59a02838c04c6962\n"
    },
    {
      "commit": "13735955f39b3b304c37d2b2840663c131262c18",
      "tree": "0a731ac42b8230f9929172fa3e3d8051874e2b18",
      "parents": [
        "25b18bbdaa36ff936eb44f228f0518d4223e9d52"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Wed Oct 08 12:43:28 2014 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Thu Oct 09 16:05:58 2014 -0700"
      },
      "message": "stdint types all the way!\n\nChange-Id: I4e4ef3a2002fc59ebd9097087f150eaf3f2a7e08\n"
    },
    {
      "commit": "c8ccf68b805c92674545f63e0341ba47e8d9701c",
      "tree": "fb360323538cb242ebf7c5c0aca27d3a0bce0abb",
      "parents": [
        "fcabfbe577c0fd40910b565beb681bd4b66f6c5d"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Sep 29 20:07:43 2014 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Sep 29 20:13:48 2014 -0700"
      },
      "message": "ART: Fix some -Wpedantic errors\n\nRemove extra semicolons.\n\nDollar signs in C++ identifiers are an extension.\n\nNamed variadic macros are an extension.\n\nBinary literals are a C++14 feature.\n\nEnum re-declarations are not allowed.\n\nOverflow.\n\nChange-Id: I7d16b2217b2ef2959ca69de84eaecc754517714a\n"
    },
    {
      "commit": "bad0267eaab9d6a522d05469ff90501deefdb88b",
      "tree": "1ce689b75184cb322b9edde34d7af938c658a6ae",
      "parents": [
        "0772a9d99c8774463c9076824340eaa4eb66f47f"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Mon Aug 25 13:08:22 2014 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri Aug 29 18:57:35 2014 -0700"
      },
      "message": "Add native memory accounting through custom allocator.\n\nAdded a custom allocator that lets you pass in a special tag which\nspecifices where the allocation came from. This is used when\ndumping. The performance overhead is low since each allocation only\ndoes a atomic add/sub for each allocation/free.\n\nThe measurements are dumped to traces.txt during SIGQUIT.\n\nExample output:\nI/art     (27274): AllocatorTagHeap active\u003d120 max\u003d120 total\u003d168\nI/art     (27274): AllocatorTagMonitorList active\u003d1572 max\u003d6240 total\u003d11724\nI/art     (27274): AllocatorTagClassTable active\u003d185208 max\u003d185208 total\u003d268608\nI/art     (27274): AllocatorTagInternTable active\u003d430368 max\u003d430368 total\u003d436080\nI/art     (27274): AllocatorTagMaps active\u003d5616 max\u003d6168 total\u003d34392\nI/art     (27274): AllocatorTagLOS active\u003d1024 max\u003d1536 total\u003d2044\nI/art     (27274): AllocatorTagSafeMap active\u003d0 max\u003d51936 total\u003d533688\nI/art     (27274): AllocatorTagLOSMaps active\u003d144 max\u003d1248 total\u003d5760\nI/art     (27274): AllocatorTagReferenceTable active\u003d10944 max\u003d11840 total\u003d19136\nI/art     (27274): AllocatorTagHeapBitmap active\u003d32 max\u003d40 total\u003d56\nI/art     (27274): AllocatorTagHeapBitmapLOS active\u003d8 max\u003d8 total\u003d8\nI/art     (27274): AllocatorTagVerifier active\u003d0 max\u003d18844 total\u003d1073156\nI/art     (27274): AllocatorTagModUnionCardSet active\u003d5300 max\u003d5920 total\u003d56020\nI/art     (27274): AllocatorTagModUnionReferenceArray active\u003d24864 max\u003d24864 total\u003d24864\nI/art     (27274): AllocatorTagJNILibrarires active\u003d320 max\u003d320 total\u003d320\nI/art     (27274): AllocatorTagOatFile active\u003d1400 max\u003d1400 total\u003d5852\n\nChange-Id: Ibb470ef2e9c9a24563bb46422d46a55799704d82\n\n(cherry picked from commit 5369c40f75fdcb1be7a7c06db212ce965c83a164)\n"
    },
    {
      "commit": "b89c3da592de1a2741a08cc3c8ed2908e8bdd15a",
      "tree": "3a55d3f92f7dfd476706bff2c53955ef8ebd217f",
      "parents": [
        "ca0ceb06d1b82714b834727a33f82fe6512effa9"
      ],
      "author": {
        "name": "Narayan Kamath",
        "email": "narayan@google.com",
        "time": "Thu Aug 21 17:38:09 2014 +0100"
      },
      "committer": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Thu Aug 21 14:29:14 2014 -0700"
      },
      "message": "Make a couple of map checks debug only.\n\nThis cost us close to 80ms in app startup times.\n\nThe checks that a reused region was within an already\nexistent map has been demoted to a debug check.\n\nA couple of other negative checks have been removed\noutright because one of them was superflous and the other\nwasn\u0027t guaranteed to be correct.\n\nbug: 16828525\n\n(cherry picked from commit bddaea2b88b0a19d9cc7a4dea772af8e829323b3)\n\nChange-Id: Ia6f3e69692bb9cb5b4ff6f47946ea38a56d4cdb6\n"
    },
    {
      "commit": "836572a07142627ff291d686a4e9e03a0988344b",
      "tree": "0211a2440ab0d43d633c665c6fe053ece67b54bf",
      "parents": [
        "6175442a246cded6a9caae4658a0a1dc7cf49071"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Tue Aug 05 15:43:13 2014 -0700"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Wed Aug 06 11:59:06 2014 -0700"
      },
      "message": "Check for a NULL pointer, do not call Build.\n\nWhen calling BacktraceMap::Create(), a NULL pointer is returned if Build\nfails. Building twice can cause problems and might leak memory.\n\nChange-Id: I38a4100e534ef15a19883703aa504e795a14b6de\n"
    },
    {
      "commit": "a62a588a9202f69e53fbeb3045ea8ea5ec2587f8",
      "tree": "afbbcca1eaa59d40fa94db6babeb2ea909777357",
      "parents": [
        "b5c5646b5ffd3d451af5e8d52b50743bf61d4c40"
      ],
      "author": {
        "name": "Jim_Guo",
        "email": "jim_guo@htc.com",
        "time": "Mon Apr 28 11:11:57 2014 +0800"
      },
      "committer": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Mon Aug 04 22:27:52 2014 -0700"
      },
      "message": "ART: Fix memory unmapped twice issue in ElfFile::Load(bool)\n\nRoot Cause:\n  The overlapped memory region will be unmapped by\n  (1) ~MemMap() of reservation MemMap (reserve) and\n  (2) ~MemMap() of \"reuse\" MemMap (segment).\n  Someone takes the memory region after (1) and it will be unmapped in (2).\n  So, SIGSEGV occurs when using the unmapped memory region.\n\nSolution:\n  Fixes this issue by skip unmap \"reuse\" MemMap in destructor.\n  And always create reservation MemMap before \"reuse\" MemMap. (It also solved\n  the fixupELF case which does not reserve the whole needed memory region).\n\nBug: 16486685\nChange-Id: I8f2538861d5c3fa7b9a04d2c3f516319cc060291\n"
    },
    {
      "commit": "422f4733ce76eda8f4ebb5a3dce5c0a5a2264886",
      "tree": "32340767bc568f75b7148b5ba40aa1d1e57a7636",
      "parents": [
        "c52361cfaae8be2fbaa25b175d4f6c37d4110764"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Mon Aug 04 17:15:21 2014 -0700"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Mon Aug 04 19:22:40 2014 -0700"
      },
      "message": "Use the uncached form of BacktraceMap::Create.\n\nThe code assumes that calling BacktraceMap::Create creates a map based\non the current state of the maps. This is not true by default, so\ncall the Create function indicating we want an uncached BacktraceMap object.\n\n(cherry picked from 27a10f618357cf85cc0677a04f0a5a3a8a437aed)\n\nChange-Id: Ic7a2dedaea9950174b24ede4dcda30ffe036fe93\n"
    },
    {
      "commit": "c3ccc1039e0bbc0744f958cb8719cf96bce5b853",
      "tree": "46be84eae8aba7f1698415752262bc16da72aab6",
      "parents": [
        "3153895d020038cd89311ed6ee241ce9b9f18a59"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Wed Jun 25 11:52:14 2014 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Wed Jun 25 11:55:07 2014 -0700"
      },
      "message": "Fix the Mac build on x86-64.\n\nChange-Id: I4ed3783a96d844de0b0a295df26d0a48c02a3726\n"
    },
    {
      "commit": "d6b6865cf787be8e4548e018762e72c7d1a40e52",
      "tree": "eb47470092a7a7ecefbf23dd008103a1e74945cc",
      "parents": [
        "be781e55b86ddd2dacf12b80a26fa9a5612948c3"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Mon Jun 23 14:07:03 2014 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Mon Jun 23 14:07:03 2014 -0700"
      },
      "message": "Mac doesn\u0027t define MAP_ANONYMOUS\n\nFix mac build.\n\nChange-Id: I607e8fff227259fbf27e468193a705c8c3fc1b59\n"
    },
    {
      "commit": "997f0f9e69ce7aee73cebd64be8dc40af9164257",
      "tree": "0d323cec5ae6359fb4dd775a5b539848c930507b",
      "parents": [
        "87523b6c4df4dd33d4c1e383403e14d6fe06362f"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Sat Jun 21 22:58:05 2014 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Sun Jun 22 01:30:40 2014 -0700"
      },
      "message": "Limit the size of files created by run-test to 2MB.\n\nIn MemMap::MapAnonymous on the host, avoid creating ashmem regions that are\nbacked by files, when the size of the file will be greater than the ulimit.\n\nChange-Id: I7cbf2ac59bf5869ed85850bea8d71898f3b7e1c7\n"
    },
    {
      "commit": "c5f17732d8144491c642776b6b48c85dfadf4b52",
      "tree": "811daa488ae5ee5dfd9b3b73bd210bc1506e5ca1",
      "parents": [
        "08654d40cdd256f6a6c8619bf06d04d4c819714a"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Thu Jun 05 20:48:42 2014 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Tue Jun 10 23:19:29 2014 -0700"
      },
      "message": "Remove deprecated WITH_HOST_DALVIK.\n\nBug: 13751317\nFix the Mac build:\n - disable x86 selector removal that causes OS/X 10.9 kernel panics,\n - madvise don\u0027t need does zero memory on the Mac, factor into MemMap\n   routine,\n - switch to the elf.h in elfutils to avoid Linux kernel dependencies,\n - we can\u0027t rely on exclusive_owner_ being available from other pthread\n   libraries so maintain our own when futexes aren\u0027t available (we\n   can\u0027t rely on the OS/X 10.8 hack any more),\n - fix symbol naming in assembly code,\n - work around C library differences,\n - disable backtrace in DumpNativeStack to avoid a broken libbacktrace\n   dependency,\n - disable main thread signal handling logic,\n - align the stack in stub_test,\n - use $(HOST_SHLIB_SUFFIX) rather than .so in host make file variables.\n\nNot all host tests are passing on the Mac with this change. dex2oat\nworks as does running HelloWorld.\nChange-Id: I5a232aedfb2028524d49daa6397a8e60f3ee40d3\n"
    },
    {
      "commit": "7ce610516242b1ffd47a42bfc31c2d562f443ca6",
      "tree": "500f4d03a882aebbefa33e3b29be0a2b0518ad48",
      "parents": [
        "d5e2b00cbc1e6b6608a5dbcfb05b7c4976614636",
        "3eed93dd5be03e5539827bebf0f414251a12e15e"
      ],
      "author": {
        "name": "Hiroshi Yamauchi",
        "email": "yamauchi@google.com",
        "time": "Thu Jun 05 18:48:54 2014 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Jun 05 18:48:54 2014 +0000"
      },
      "message": "Merge \"Verify there\u0027s no mem map gap for immune region not to break.\""
    },
    {
      "commit": "3eed93dd5be03e5539827bebf0f414251a12e15e",
      "tree": "186fa74420e2595c9b6fba9ea8de94756af9cef5",
      "parents": [
        "bbdc5bc5fd5141711879a6c85d80ac45b7aad5d0"
      ],
      "author": {
        "name": "Hiroshi Yamauchi",
        "email": "yamauchi@google.com",
        "time": "Wed Jun 04 11:43:59 2014 -0700"
      },
      "committer": {
        "name": "Hiroshi Yamauchi",
        "email": "yamauchi@google.com",
        "time": "Wed Jun 04 15:50:46 2014 -0700"
      },
      "message": "Verify there\u0027s no mem map gap for immune region not to break.\n\nThis adds code that verifies that there\u0027s no memory map gap between\nthe image space and the main space so that the immune region\nfunctionality won\u0027t silently break. For example, if there\u0027s a gap and\na large object is allocated in that gap, the large object is\nincorrectly part of the immune region and the marking breaks.\n\nBug: 14059466\nChange-Id: Ie6ed82988d74b6d0562ebbbaac96ee43c15b14a6\n"
    },
    {
      "commit": "c355a2a78d6ebdfdb645221275affb9136b4c667",
      "tree": "33e6ceb178ae6d82c630c5b34e216bc468276295",
      "parents": [
        "b7f02280f7f56ae94fe7f01e161be0b725b6e4a9"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri May 30 13:02:46 2014 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri May 30 13:19:19 2014 -0700"
      },
      "message": "Fix race condition in MemMap::MapAnonymous.\n\nPreviously we were using MAP_FIXED which introduced a serious race\ncondition if MAP_32BIT was set since it would possibly overwrite\nan existing map at the address which we determined was free with\nmsync. There was a window of time after we had msynced a page where\nanother thread could map something at that page. The new method\navoids using MAP_FIXED and unmaps allocations which succeed but\naren\u0027t in the low 4GB when MAP_32BIT is set.\n\nBug: 15338094\nBug: 14974497\nChange-Id: I57f00baf4143e9fa17fb1d4c2be04b30705a2bfd\n"
    },
    {
      "commit": "d8f26dbebe72c1cbdfa85bdeeb003283c7435db3",
      "tree": "d752729ef80ed46877681874ac69b3e846f34078",
      "parents": [
        "fd1264475562006c93b651d33e0a6266e8093ebe"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon May 19 17:01:13 2014 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Tue May 20 11:18:01 2014 -0700"
      },
      "message": "ART: Randomize mem_map start address for linear scan search\n\nWhen using linear scan for mem_map, randomize the start of the\nsearch with getauxval(AT_RANDOM).\n\nChange-Id: Id1e4c86b928147d74b9b0b73ff704de5d87b4500\n"
    },
    {
      "commit": "700a402244a1a423da4f3ba8032459f4b65fa18f",
      "tree": "4c22fcda04d271bd55a37aff30650214af17a90c",
      "parents": [
        "047c11adcbcbc0bcf210defdfcbada763961ffee"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Mon May 19 16:49:03 2014 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Mon May 19 22:27:39 2014 -0700"
      },
      "message": "Now we have a proper C++ library, use std::unique_ptr.\n\nAlso remove the Android.libcxx.mk and other bits of stlport compatibility\nmechanics.\n\nChange-Id: Icdf7188ba3c79cdf5617672c1cfd0a68ae596a61\n"
    },
    {
      "commit": "6bd621aa31aa94ed42a2a35256d219630bf0b687",
      "tree": "1c0991988a0891817c60969ec197bf55fa75ce83",
      "parents": [
        "de1129a26e0474ea8bb9112938ebb867163969fd"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Fri May 16 17:28:58 2014 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Fri May 16 17:43:23 2014 -0700"
      },
      "message": "ART: Move start of linear mmap_scan out of reserved space\n\nThe first 64KB are protected by SELinux, and we will never be\nable to acquire them.\n\nBug: 15024270\nChange-Id: I186a0d5262d396a089d4028a8527a9c56f96dc49\n"
    },
    {
      "commit": "507dfdd147c97bfbadebfd63584d094b6a4e7b47",
      "tree": "cce43931b6dcd088cb2932c2491f86116353a27f",
      "parents": [
        "922ddb30982d2597eab634d8b8598bec0eb7d3b7"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Thu May 15 16:42:40 2014 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Thu May 15 16:50:51 2014 -0700"
      },
      "message": "Compatibility layer to transition from UniquePtr to std::unique_ptr.\n\nUse ART_WITH_STLPORT (enabled for the target) to cause the use of UniquePtr,\nfor the host switch to std::unique_ptr. For now the type remains called\nUniquePtr.\nMake dalvik compile with clang on the host, move its build to C++11.\n\nChange-Id: I5ba8d2757904bc089ed62047ea03de3c0853fb12\n"
    },
    {
      "commit": "84d49ccd79088eb9a9f423c0a96e3905468cfe7d",
      "tree": "30502e3c3f73000b2e49124cbd2da86d429036d8",
      "parents": [
        "23d2b95b1d1c92898336a4ebf5c0281f79fb7581"
      ],
      "author": {
        "name": "Qiming Shi",
        "email": "qiming.shi@intel.com",
        "time": "Thu Apr 24 15:38:41 2014 +0800"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Wed May 14 19:38:09 2014 -0700"
      },
      "message": "ART: Resolve MAP_32BIT limitation in x86_64\n\nAdd checks that ensure when low4gb is set and an expected pointer\nis given the requested memory fits into 4GB.\n\nOn x86_64, only use MAP_32BIT when there is no expected pointer.\nThis avoids a limitation in mmap (only 2GB visible).\n\nAdd tests to check behavior.\n\nOriginal Author: Qiming Shi \u003cqiming.shi@intel.com\u003e\nChange-Id: Ia2e3e0a46764ef70126b0c264f1fae681622d3cb\n"
    },
    {
      "commit": "4d3e8b019c86abfdb761a14e442fc058882a4d91",
      "tree": "cfc692649b042a5471ed45a300cc17824d1ac16a",
      "parents": [
        "d11fcd3d2882c90efe7a92875072bd4eec4aad0c",
        "9de65ff3a9c49b91d80be292020f012f3d0a24ef"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Mar 24 18:53:17 2014 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Mar 24 18:53:17 2014 +0000"
      },
      "message": "Merge \"Fixes to mem_map wraparound and ARM64 quick_invoke assembly\""
    },
    {
      "commit": "aa94cf3e77035bf204a21d0341d8f8513a19885c",
      "tree": "56c35c05e73a874e283701207d3b5afa1c781509",
      "parents": [
        "6a3fe330227f2192f6ce97915d62f46247f89378"
      ],
      "author": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Sun Mar 23 23:47:25 2014 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Mar 24 11:02:32 2014 -0700"
      },
      "message": "Avoid strerror until we are sure there is an error\n\nChange-Id: I8f0c5a9cb1b07bfffd5ce9f9ca33f53c8834e9f5\n"
    },
    {
      "commit": "9de65ff3a9c49b91d80be292020f012f3d0a24ef",
      "tree": "bf19a3f908d438e81bd549b895ba84f5d3dd4536",
      "parents": [
        "6a3fe330227f2192f6ce97915d62f46247f89378"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Fri Mar 21 17:25:57 2014 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Fri Mar 21 17:25:57 2014 -0700"
      },
      "message": "Fixes to mem_map wraparound and ARM64 quick_invoke assembly\n\nThere are only 6 free GPRs for passing in a non-static invoke. This\ncorrupted one register for long-signature methods.\n\nThe wrap-around did not actually wrap around correctly.\n\nChange-Id: I62658dadeb83bb22960b9455e211d26ffaa20f6f\n"
    },
    {
      "commit": "7104cbf9c594563c6daae592b8f38f49a423d12e",
      "tree": "71cd3aa726d7ad946f314e41e465b39cb6b8b8c0",
      "parents": [
        "faa93b3ab455492dad1a9d3fb630e3936d389c85"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Fri Mar 21 11:44:43 2014 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Fri Mar 21 11:47:17 2014 -0700"
      },
      "message": "Fix sign problem, implement low-mem mmap wraparound\n\nA signed value comparison meant that on 64b systems comparisons\nwere false when pointers \u003e 2GB were in use (as happens in long-running\ntests). Fix this to be uint.\n\nImplement a simple wrap-around in the MAP_32BIT emulation code.\n\nChange-Id: I09870b4755f2dca676e42e701fbb6f6eb4bb95d0\n"
    },
    {
      "commit": "71a3ebabb2a6b4921071d115aa176d8222aeb803",
      "tree": "ffc2f1125fd81bdd8afe063843a95db84b69c04d",
      "parents": [
        "4eccb97426f5f4233335504256246744c76556aa"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Mar 17 12:57:08 2014 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Mar 17 12:57:08 2014 -0700"
      },
      "message": "Quick typo fix in the 4GB lowmem code\n\nChange-Id: I3371776b0468cd8690e3811c7a1e57f5444e9d8f\n"
    },
    {
      "commit": "8dba5aaaffc0bc2b2580bf02f0d9095c00d26a17",
      "tree": "29b849a3fdffb802f8720f755a9ed0324b8e5b3f",
      "parents": [
        "01d6f6a4adea984b95af38611bc1b50268f77d03"
      ],
      "author": {
        "name": "Stuart Monteith",
        "email": "stuart.monteith@arm.com",
        "time": "Wed Mar 12 12:44:01 2014 +0000"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Mar 17 11:32:37 2014 -0700"
      },
      "message": "AArch64: Add memory allocation in low 4GB\n\nMAP_32BIT is implemented for only x86_64. Other 64bit platforms\ndon\u0027t have an equivalent.\n\nThis is a unsophisticated implemention of a scheme using msync and\nMAP_FIXED to reproduce the functionality of MAP_32BIT.\n\nAdds MAP_FIXED to RemapAtEnd, as the address used for the new mmap\ndoesn\u0027t get located correctly without it on aarch64.\n\nAdd MemMap::next_mem_pos_ to store last position. Add a safety assert.\n\nChange-Id: I61871ff7fc327554c43e1d7f448c3d376490f1ea\n"
    },
    {
      "commit": "4fb5df8453367aa3f160ac230c03a7a98a28e562",
      "tree": "069df39819c0f7e8f6f0d4af8569d8a06dafdaf9",
      "parents": [
        "b6825e67ea7b85a910258713910a443cfec747e4"
      ],
      "author": {
        "name": "Hiroshi Yamauchi",
        "email": "yamauchi@google.com",
        "time": "Thu Mar 13 15:10:27 2014 -0700"
      },
      "committer": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Fri Mar 14 15:17:32 2014 -0700"
      },
      "message": "Make MemMap::MapAnonymous() fail if the requested address is not available.\n\nChange MapAnonymous() so that a requested address vs. actual map\naddress mismatch will cause a failure. The existing MapAnonymous()\ncall sites do not check this. This should prevent potential rare case\nbugs where mmap does not happen to map a region at an specified\naddress.\n\nThere\u0027s a potential bug that if MapAnonymous() does not guarantee the\nrequested address (and there\u0027s a gap between the image/oat files and\nthe zygote/malloc space), then GC could in theory allocate a large\nobject space in the gap. This would break the GC notion of the immune\nspace. This change will prevent this by causing all non-moving spaces\nto be (really) adjacent, with no gaps in between, which CL 87711\nmissed.\n\nChange-Id: Id4adb0e30adbad497334d7e00def4c0c66b15719\n"
    },
    {
      "commit": "c7cb1901b776129044a4ad3886fd6450e83df681",
      "tree": "611c648c250ac7e84ac7079fe000b7ce76d50685",
      "parents": [
        "c8554361e89970ab92a94d1f719553a30d45b86c"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed Mar 05 14:41:03 2014 -0800"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed Mar 05 15:02:18 2014 -0800"
      },
      "message": "Print error message if ImageSpace::Init fails.\n\nAlso changed some of the args in mem_map.cc to print as hex.\n\nBug: 13323732\n\nChange-Id: I02cd81300793515d143e94473f48fc701e401b38\n"
    },
    {
      "commit": "ef7d42fca18c16fbaf103822ad16f23246e2905d",
      "tree": "c67eea52a349c2ea7f2c3bdda8e73933c05531a8",
      "parents": [
        "822115a225185d2896607eb08d70ce5c7099adef"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Mon Jan 06 12:55:46 2014 -0800"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Thu Feb 06 23:20:27 2014 -0800"
      },
      "message": "Object model changes to support 64bit.\n\nModify mirror objects so that references between them use an ObjectReference\nvalue type rather than an Object* so that functionality to compress larger\nreferences can be captured in the ObjectRefererence implementation.\nObjectReferences are 32bit and all other aspects of object layout remain as\nthey are currently.\n\nExpand fields in objects holding pointers so they can hold 64bit pointers. Its\nexpected the size of these will come down by improving where we hold compiler\nmeta-data.\nStub out x86_64 architecture specific runtime implementation.\nModify OutputStream so that reads and writes are of unsigned quantities.\nMake the use of portable or quick code more explicit.\nTemplatize AtomicInteger to support more than just int32_t as a type.\nAdd missing, and fix issues relating to, missing annotalysis information on the\nmutator lock.\nRefactor and share implementations for array copy between System and uses\nelsewhere in the runtime.\nFix numerous 64bit build issues.\n\nChange-Id: I1a5694c251a42c9eff71084dfdd4b51fff716822\n"
    },
    {
      "commit": "0d6adac2550113da33d42e88f0d87a57b25c5a60",
      "tree": "0a912efc0b1147a1a2ac908d89b05aad4b819a8a",
      "parents": [
        "1dcff62155e8477eb114c8a86eb1beb0797ffc11"
      ],
      "author": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Wed Feb 05 17:39:16 2014 -0800"
      },
      "committer": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Thu Feb 06 09:49:26 2014 -0800"
      },
      "message": "Fix apps with more than one dex file with the same name\n\nReverts most of 60836d5a9bcf8b30984aae4279a4f6233b0bf622 which I\nbelieve was an incorrect attempt to address issue introduced in\n8d31bbd3d6536de12bc20e3d29cfe03fe848f9da, which is also reverted here.\n\nAlso adds some debugging aids include operator\u003c\u003c for DexFile and\nMemMap and checksum information to OatFile logging.\n\nBug: 12802375\nChange-Id: Idd6f7dd487f6e01e9479cd15cd4b61580160e8a3\n"
    },
    {
      "commit": "caf22aca3482e2fcc8bf443f911718a5021da1c9",
      "tree": "c4954179726eee89fa5504c1ee51dcb37a39ba8c",
      "parents": [
        "7ea5dafc81b2bba7cabad26130bb75dc8f709803"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Mon Jan 27 18:32:14 2014 -0800"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Mon Jan 27 18:32:14 2014 -0800"
      },
      "message": "Modify to use new BacktraceMap creation function.\n\nChange-Id: I703ef4a26917678236b931d81b7e4c758754742b\n"
    },
    {
      "commit": "3cab422021b121cad7a4592114f1b28f636b599d",
      "tree": "1f3b452fe5324a6695feea882f67ad2cc4d34a95",
      "parents": [
        "c666ee8c75118d072bfd2a2b81b80915f6040593"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Thu Jan 23 18:15:19 2014 -0800"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Thu Jan 23 18:15:19 2014 -0800"
      },
      "message": "Move __STDC_FORMAT_MACROS to a cflag.\n\nCurrent inttypes.h don\u0027t define stdint printf formatting characters for C++ but\nin the future this will change. Rather than #define __STDC_FORMAT_MACROS at the\npoint of inclusion (conventional) pass it as a cflag so there is a single place\nto remove the #define when conventions change.\n\nChange-Id: Ice2fb07e19d8fc06ebc534c903a2d02497c31b3d\n"
    },
    {
      "commit": "debeb3aaaa4257684029f15733dc30af5dcb8aab",
      "tree": "496b989f3d71a2506647ba0172def9db30c2c71f",
      "parents": [
        "2f7130b2db84a730d32e5b7b99a161ff3cf6326b"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Thu Jan 23 16:54:52 2014 -0800"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Thu Jan 23 16:55:20 2014 -0800"
      },
      "message": "64bit friendly printf modifiers in mem map errors.\n\nChange-Id: I197c6cf08053b9c833e50156a92965b3b66698eb\n"
    },
    {
      "commit": "943af7dab1454517c5bd11a31ab99f260afb22d1",
      "tree": "0c8101f7d24eee3ff02ed324e34333a83853194f",
      "parents": [
        "00e7f2e935d98f0eb14f5ef1d376604d0054bf5e"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Thu Jan 16 12:41:46 2014 -0800"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Thu Jan 16 17:42:55 2014 -0800"
      },
      "message": "Change to support new BacktraceMap.\n\nChange-Id: I291313583dca2c8e1e946504c442f5810f0fb477\n"
    },
    {
      "commit": "3b6f0fae76fddf81930a263a075dc87b6039b7fc",
      "tree": "aafa3fa3bfa31a2d5f1f3b407e59b704a4180a77",
      "parents": [
        "34e82934546bd470283346907bd7b74990797c56"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed Nov 13 13:26:07 2013 -0800"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed Nov 13 13:32:42 2013 -0800"
      },
      "message": "Add more logging when mmap fails.\n\nWe now print the reason that the mmap failed.\n\nChange-Id: Ie515e4bba117c9ea1f4297abb826d32172bea962\n"
    },
    {
      "commit": "6b98c91275d4361d1b74effad36995cc2d687a55",
      "tree": "b96cc0d6d15cc60adf0939252b93bb47cb210448",
      "parents": [
        "610e49f5adc8b5e4a37696aa20fc029dab6b1e40",
        "7b5f0cf08f74ff36760a813888779d28a175982d"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Tue Nov 05 07:04:12 2013 -0800"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Tue Nov 05 07:04:12 2013 -0800"
      },
      "message": "am 7b5f0cf0: Use libbacktrace instead of libcorkscrew.\n\n* commit \u00277b5f0cf08f74ff36760a813888779d28a175982d\u0027:\n  Use libbacktrace instead of libcorkscrew.\n"
    },
    {
      "commit": "7b5f0cf08f74ff36760a813888779d28a175982d",
      "tree": "45d77050651a3423deabe7de7c51d8169f6cfd38",
      "parents": [
        "e2946917852af9d2ec643c7c987d2bb66cf2f086"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Fri Nov 01 15:18:45 2013 -0700"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Mon Nov 04 13:46:11 2013 -0800"
      },
      "message": "Use libbacktrace instead of libcorkscrew.\n\nAlso, removed the ignore frames of 2, this was causing threads to chop\nthe lower two frames. The original code assumed that the calls to decode\nthe frame were in the unwind trace, but that\u0027s not the case.\n\nChange-Id: Ifc0da0227f9114a5b462ef88e038439d58f951e9\n"
    },
    {
      "commit": "fd7e7f1253927c8d7f17e7cbc259daaf51868bd3",
      "tree": "2bc3e24751d34e561ae94b6763215e6e209e4dbb",
      "parents": [
        "8584a68279efc0f9a409a3555ae5ebf3ec2cc4ac"
      ],
      "author": {
        "name": "Hiroshi Yamauchi",
        "email": "yamauchi@google.com",
        "time": "Tue Oct 22 14:17:48 2013 -0700"
      },
      "committer": {
        "name": "Hiroshi Yamauchi",
        "email": "yamauchi@google.com",
        "time": "Fri Oct 25 11:39:50 2013 -0700"
      },
      "message": "Fix a double unmap issue in MemMap::UnMapAtEnd().\n\nMemMap::UnMapAtEnd() unmaps the unused tail of the alloc space during\na zygote fork. But it can cause the same tail region of the memory to\nbe unmapped twice (once in UnMapAtEnd() and once more in ~MemMap()\nduring a shutdown.)\n\nI encountered a crash because of this issue in SpaceTest.ZygoteTest\n(which happens to happen only on a device in a branch with the\nrosalloc change probably due to some randomness in mmap address\nchoice, etc.)\n\nHere\u0027s what happens:\n\n1) CreateZygoteSpace() will call UnMapAtEnd() and unmap the unused\ntail of the alloc space.\n\n2) In the same function, after UnMapAtEnd(), several libc new/malloc\nallocations, including a new DlMallocSpace object, happen. This\nhappens to cause libc to map a new memory region that overlaps with\nthe memory region that has just been unmapped in 1) and use it to\nallocate those allocations (that is, the new DlMallocSpace object is\nallocated in that memory region.) This is a second DlMallocSpace that\nbecomes the new alloc space after zygote fork. The first DlMallocSpace\nbecomes the zygote space. Note that that libc maps that memory region\nbefore the underlying memory of the second DlMallocSpace is mapped.\n\n3) During a Runtime shutdown (which happens once for a normal VM\nshutdown or at the end of each test run) all the spaces get destructed\nincluding the the two DlMallocSpaces one by one. When the first\nDlMallocSpace gets destructed (note the space list is sorted by\naddress,) its super destructor ~MemMap() unmaps the original memory\nregion that\u0027s already partially unmapped in 2). Now this memory region\nincludes the libc memory region that includes the second DlMallocSpace\nobject.\n\n4) When the second DlMallocSpace object gets attempted to be\ndestructed, the memory in which the object resides is already unmapped\nin 3) and causes a SIGSEGV.\n\nThis change replaces UnMapAtEnd() with a new function RemapAtEnd()\nwhich combines the unmapping of the tail region and remapping of it to\nachieve the following two things:\n\n1) Fixes this double unmap issue by updating the base_size_ member\nvariable to exclude the already-unmapped tail region so that ~MemMap()\nwill not unmap the tail region again.\n\n2) Improves on the non-atomicity issue in the unmap/map sequence in\nCreateZygoteSpace(). That is, once the unused tail portion of the\nmemory region of the origina alloc space is unmapped, something like\nlibc could come along and take that memory region, before the memory\nregion is mapped again for the new alloc space. This, as a result,\nwould make a hole between the old alloc (new zygote) space and the new\nalloc space and cause the two spaces to be\nnon-contiguous. RemapAtEnd() eliminates new/malloc allocations between\nthe unmap and the map calls. But note this still isn\u0027t perfect as\nother threads could in theory take the memory region between the\nmunmap and the mmap calls.\n\nAdded tests.\n\nChange-Id: I43bc3a33a2cbfc7a092890312e34aa5285384589\n"
    },
    {
      "commit": "8d31bbd3d6536de12bc20e3d29cfe03fe848f9da",
      "tree": "2373ae08ddddaf1034623df85d647ecf9ac6c831",
      "parents": [
        "57e6d8a99058e5c74d5244b68a5f4d53526fa108"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Sun Oct 13 10:44:14 2013 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Mon Oct 21 17:01:11 2013 -0700"
      },
      "message": "Throw IOException at source of failing to open a dex file.\n\nBefore is:\njava.lang.ClassNotFoundException: Didn\u0027t find class \"GCBench\" on path: DexPathList[[zip file \"/disk2/dalvik-dev/out/host/linux-x86/framework/GCBench.jar\"],nativeLibraryDirectories\u003d[/disk2/dalvik-dev/out/host/linux-x86/lib]]\n        at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)\n        at java.lang.ClassLoader.loadClass(ClassLoader.java:511)\n        at java.lang.ClassLoader.loadClass(ClassLoader.java:469)\n        Suppressed: java.lang.ClassNotFoundException: GCBench\n                at java.lang.Class.classForName(Native Method)\n                at java.lang.BootClassLoader.findClass(ClassLoader.java:781)\n                at java.lang.BootClassLoader.loadClass(ClassLoader.java:841)\n                at java.lang.ClassLoader.loadClass(ClassLoader.java:504)\n                ... 1 more\n        Caused by: java.lang.NoClassDefFoundError: Class \"LGCBench;\" not found\n                ... 5 more\nAnd after is:\njava.lang.ClassNotFoundException: Didn\u0027t find class \"GCBench\" on path: DexPathList[[zip file \"/disk2/dalvik-dev/out/host/linux-x86/framework/GCBench.jar\"],nativeLibraryDirectories\u003d[/disk2/dalvik-dev/out/host/linux-x86/lib]]\n        at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)\n        at java.lang.ClassLoader.loadClass(ClassLoader.java:511)\n        at java.lang.ClassLoader.loadClass(ClassLoader.java:469)\n        Suppressed: java.io.IOException: Zip archive \u0027/disk2/dalvik-dev/out/host/linux-x86/framework/GCBench.jar\u0027 doesn\u0027t contain classes.dex\n                at dalvik.system.DexFile.openDexFile(Native Method)\n                at dalvik.system.DexFile.\u003cinit\u003e(DexFile.java:80)\n                at dalvik.system.DexFile.\u003cinit\u003e(DexFile.java:59)\n                at dalvik.system.DexPathList.loadDexFile(DexPathList.java:268)\n                at dalvik.system.DexPathList.makeDexElements(DexPathList.java:235)\n                at dalvik.system.DexPathList.\u003cinit\u003e(DexPathList.java:113)\n                at dalvik.system.BaseDexClassLoader.\u003cinit\u003e(BaseDexClassLoader.java:48)\n                at dalvik.system.PathClassLoader.\u003cinit\u003e(PathClassLoader.java:38)\n                at java.lang.ClassLoader.createSystemClassLoader(ClassLoader.java:128)\n                at java.lang.ClassLoader.access$000(ClassLoader.java:65)\n                at java.lang.ClassLoader$SystemClassLoader.\u003cclinit\u003e(ClassLoader.java:81)\n                at java.lang.ClassLoader.getSystemClassLoader(ClassLoader.java:137)\n        Suppressed: java.lang.ClassNotFoundException: GCBench\n                at java.lang.Class.classForName(Native Method)\n                at java.lang.BootClassLoader.findClass(ClassLoader.java:781)\n                at java.lang.BootClassLoader.loadClass(ClassLoader.java:841)\n                at java.lang.ClassLoader.loadClass(ClassLoader.java:504)\n                ... 1 more\n        Caused by: java.lang.NoClassDefFoundError: Class \"LGCBench;\" not found\n                ... 5 more\n\nAlso, move dex file verifier messages out of logs.\nIn the process the ClassLinker::dex_lock_ needed tidying to cover a smaller\nscope. Bug 11301553.\n\nChange-Id: I80058652e11e7ea63457cc01a0cb48afe1c15543\n"
    },
    {
      "commit": "e0948e13d5a4552e6a2728087573c07961e4a4f9",
      "tree": "6162dd8b5e4f05c00f5414e10d1b1ab6fba61a0d",
      "parents": [
        "a7d56cf5e0fe6da41969f6dd841aef0d73f09d93"
      ],
      "author": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Thu Aug 29 09:36:15 2013 -0700"
      },
      "committer": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Thu Aug 29 09:45:43 2013 -0700"
      },
      "message": "Make DexFiles opened from files readonly by default, but writable during dex2oat\n\nBug: 9618388\nChange-Id: I83f2e16ee8446a79a94a84971146d807bb0c9ee0\n"
    },
    {
      "commit": "9004cb6591781d1e6c5ec6d7bc6dc99d9ecee124",
      "tree": "000dd4df72a86f516774945a58b754327c758d24",
      "parents": [
        "9dcd45c60c691524bd8ef7d6f65075d9ee3e5554"
      ],
      "author": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Fri Jul 26 15:48:31 2013 -0700"
      },
      "committer": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Mon Jul 29 18:15:36 2013 -0700"
      },
      "message": "Allow MemMap to support empty map requests\n\nDiscovered trying to use ZipEntry::ExtractToMemMap on an empty preloaded-classes.\n\nBug: 8659045\nChange-Id: Icfbbe6b313e2d1ee708b44a8d8d354d6203fd669\n"
    },
    {
      "commit": "7934ac288acfb2552bb0b06ec1f61e5820d924a4",
      "tree": "43f3acd8af7fd34d4ae7b64f6e06bb8429d74bb8",
      "parents": [
        "fb331d7ca004f39608fcfdae49d38df90c702ea9"
      ],
      "author": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Fri Jul 26 10:54:15 2013 -0700"
      },
      "committer": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Fri Jul 26 11:55:10 2013 -0700"
      },
      "message": "Fix cpplint whitespace/comments issues\n\nChange-Id: Iae286862c85fb8fd8901eae1204cd6d271d69496\n"
    },
    {
      "commit": "2d88862f0752a7a0e65145b088f49dabd49d4284",
      "tree": "3fac6bbd9a0ff3836f361e46579151c8a93420b6",
      "parents": [
        "751d4ed43e8118f145edf18db4d987daf7dabbae"
      ],
      "author": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Thu Jul 18 17:02:00 2013 -0700"
      },
      "committer": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Thu Jul 18 17:02:52 2013 -0700"
      },
      "message": "Fixing cpplint readability/casting issues\n\nChange-Id: I6821da0e23737995a9b884a04e9b63fac640cd05\n"
    },
    {
      "commit": "7940e44f4517de5e2634a7e07d58d0fb26160513",
      "tree": "ac90242d96229a6942f6e24ab137bc1f8f2e0025",
      "parents": [
        "5cd9e3b122f276f610980cbaf0d2ad6ed4cd9088"
      ],
      "author": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Fri Jul 12 13:46:57 2013 -0700"
      },
      "committer": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Fri Jul 12 17:49:01 2013 -0700"
      },
      "message": "Create separate Android.mk for main build targets\n\nThe runtime, compiler, dex2oat, and oatdump now are in seperate trees\nto prevent dependency creep.  They can now be individually built\nwithout rebuilding the rest of the art projects. dalvikvm and jdwpspy\nwere already this way. Builds in the art directory should behave as\nbefore, building everything including tests.\n\nChange-Id: Ic6b1151e5ed0f823c3dd301afd2b13eb2d8feb81\n"
    },
    {
      "commit": "2d6ba5158d7fd459db2870df47300b517dc4d08c",
      "tree": "51e306969d4d707aee7a6bc36481390721e0f81f",
      "parents": [
        "1e2ee7de9dff66f7ca2bdf83a7262e21d75b37d1"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Fri May 17 11:31:37 2013 +0200"
      },
      "committer": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Mon Jun 24 15:29:06 2013 +0200"
      },
      "message": "Quickening support.\n\nThis CL adds quickening support for methods which are interpreted at runtime.\n\nThis CL introduces a DEX-to-DEX compiler. A method is now compiled in one of\nthe two following modes:\n- Native compilation: the method is compiled by the Quick or Portable backends.\nAt runtime, the generated native target-dependent code is executed.\n- DEX-to-DEX compilation: the method is executed by the interpreter at runtime.\nIts DEX code is compiled so some instructions can be replaced by special\ninstructions only valid at runtime. No native code is generated.\n\nThe quickening adds special instructions to improve runtime performance. They\nare \"-quick\" versions of the following instructions:\n- iget/iput\n- iget-wide/iput-wide\n- iget-object/iput-object\n- invoke-virtual/range.\n\nThese special instructions cannot be treated by the verifier since they lose\nthe field/method index referencing the field/method being accessed/invoked.\nTo prevent this, the DEX-to-DEX compiler is run only on methods of preverified\nclasses (without verification error at compilation time).\n\nThe DEX-to-DEX compiler implements quickening support using the CompilerDriver\ninterface like the native compiler does (Quick or Portable backends).\nTo replace instructions, the DEX-to-DEX compiler must be able to modify the\nmmapped DEX file. Since it can be read-only protected, the DEX-to-DEX compiler\nmust be able to temporarily change its protection to read-write mmapped file.\nTo achieve this, this CL adds support for changing DEX file protection with\nDexFile::EnableWrite and DexFile::DisableWrite methods. Besides, it also adds\na dedicated lock (DexFile::modification_lock) to ensure thread-safety and avoid\nconcurrent DEX file protection change (from a parallel DEX-to-DEX compiler on\nthe same DEX file).\n\nChange-Id: Iaafd103b9766810d7fc94a2c424a8fafba66e26a\n"
    },
    {
      "commit": "f8adc60455b90c95a6a3c8f87830e4e88b2644e1",
      "tree": "da454c5488560a4abca669598ed2f29a22930e57",
      "parents": [
        "dbbc99d2a197592aee8fdaf01253e426c9dff1d8"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Thu Apr 18 17:06:19 2013 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Thu Apr 18 17:27:31 2013 -0700"
      },
      "message": "Mem map bug fix and documentation.\n\nAddresses issue where valgrind treats a non-null \u0027addr\u0027 as meaning MAP_FIXED.\n\nChange-Id: Ibfd2360cd5bd226f9699022e07b918db612c2f7c\n"
    },
    {
      "commit": "a40307e8562c20d9b9ce46e773864d07d95512a1",
      "tree": "ed4e85f5a7cd52458326a8dcb6ad4f89efa9131b",
      "parents": [
        "5fe2c162a422426687ba3570df1dc68864386764"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Fri Feb 22 11:32:44 2013 -0800"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Fri Feb 22 23:26:22 2013 -0800"
      },
      "message": "Ensure VM\u0027s heap is accounted correctly.\n\nThe meminfo dumping assumes that dalvik heap is created using ashmem and has a\nprefix of \"dalvik-\". Ensure ART\u0027s anonymous mmaps fit this pattern. Tidy up\nanonymous mmaps so naming is more consistent.\n\nChange-Id: I9c62a9d1da21da6a048effb0399a1f85865cb12d\n"
    },
    {
      "commit": "700c8d31733534a3d978b75a03f6f7e177dc7e81",
      "tree": "6b9d8d93a70e31dba3b0a880f886ce408776314c",
      "parents": [
        "9adbff5b85fcae2b3e2443344415f6c17ea3ba0a"
      ],
      "author": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Mon Nov 05 10:42:02 2012 -0800"
      },
      "committer": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Fri Jan 25 14:28:43 2013 -0800"
      },
      "message": "Move .oat files to ELF format\n\nGenerates .oat in ELF file format using MCLinker\n- Uses MCLinker IRBuilder to create a synthetic .o from OatWriter output.\n- Uses new ElfFile for prelinking to support art image optimizations.\n\nAdapted OatFile to load using dlopen, ElfFile, or memory, removing raw MemMap mechanism.\n\nChanged image code to not assume oat data will be immediately after\nimage to allow space for ELF headers.\n\nPasses test-art and works with installd.\n\nChange-Id: Idc026eddb5de93f4b97490c405f3ed7b39589749\n"
    },
    {
      "commit": "10c5b78436bf9e603d817b40d1b98961919362b1",
      "tree": "bd683a021c799046d6a470298df6f3d79a39822b",
      "parents": [
        "9e0c175a0cea5c8c88a6927e6375554118f74a82"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Thu Jan 10 10:40:53 2013 -0800"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Thu Jan 10 12:02:02 2013 -0800"
      },
      "message": "Fixes for gtests on gPrecise.\n\nAlso make a similar reservation in heap.cc use PROT_NONE rather than\nPROT_READ which should be more efficient.\n\nChange-Id: I648ef5b1bf2906094e92253b30d0a5a7554d1af6\n"
    },
    {
      "commit": "e222ee0b794f941af4fb1b32fb8224e32942ea7b",
      "tree": "0b9f5fe6398663c9d871881cf7de28eca8bdfc6f",
      "parents": [
        "1aa246dec5abe212f699de1413a0c4a191ca364a"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Dec 13 14:41:43 2012 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Dec 13 15:24:45 2012 -0800"
      },
      "message": "Move stringpiece.h and stringprintf.h to base/.\n\nChange-Id: I7f71b4a12f99c5f81771146c66629ae5a947b229\n"
    },
    {
      "commit": "8161c0336b97e11e02c000af357f8f40de2e23e4",
      "tree": "cc5dafd36fefd9ec71ced5b2af36955053b450f3",
      "parents": [
        "72891f319f83eca0680a9aeb1445dddd40dec99b"
      ],
      "author": {
        "name": "jeffhao",
        "email": "jeffhao@google.com",
        "time": "Wed Oct 31 15:50:00 2012 -0700"
      },
      "committer": {
        "name": "jeffhao",
        "email": "jeffhao@google.com",
        "time": "Wed Oct 31 16:24:36 2012 -0700"
      },
      "message": "More MIPS fixes. The vm-tests and oat tests all work on the emulator.\n\n- Changed the base address of the art image for MIPS to allow enough\n  space for CTS to run on the target.\n- Fixed exception delivery to jump without linking, and to preserve the\n  value of $gp.\n- Added dumping of /proc/self/maps whenever mmap fails, and cleaned up\n  other debugging output (not MIPS related).\n\nChange-Id: I4e92e992ee6a6167e901db8ad90a6062bbc5168a\n"
    },
    {
      "commit": "1c23e1edb7361bbaec6e57fca86d8d3797960ad2",
      "tree": "af8aa791777271fc5105f19a70aa972768493856",
      "parents": [
        "ed6d5ed3494648780b9e91422c90d6bc22c16b79"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri Oct 12 14:14:11 2012 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri Oct 12 17:34:08 2012 -0700"
      },
      "message": "More space refactoring.\n\nAdd common interface, AllocSpace.\n\nRenamed the old AllocSpace to DLMallocSpace.\n\nAdded an new option enforce_target_size_, which when enabled, doesn\u0027t let\nthe heap grow past ideal heap size calculated during last Gc.\n\nRemoved redundant AllocationSize calls.\n\nMoved large object space to its own file instead of being in space.h/cc.\n\nChange-Id: I15e60531114bf213800599737cbd66ef44b46b15\n"
    },
    {
      "commit": "cc236d74772dda5a4161d9bc5f497fd3d956eb87",
      "tree": "2cd44e980357edc5b1a477fb261adb590d34c7c7",
      "parents": [
        "f1ea6b072b8b473eabf91d1d582fb5966ffea4ba"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri Jul 20 10:29:05 2012 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri Jul 27 14:30:51 2012 -0700"
      },
      "message": "Zygote space / partial collection support.\n\nThe zygote space is now created right before zygote fork. This space has new allocations into it disabled, this reduces memory usage since we have more shared pages.\n\nPartial collection works by marking all the zygote space -\u003e alloc space references by using a mod-union table and then recursively marking only over the alloc space.\n\nApproximate improvements;\n\nDeltablue time goes down ~0.5 seconds.\n\nCaffeinemark score goes up ~300.\n\nSystem memory usage goes down ~7MB.\n\nChange-Id: I198389371d23deacd9b4534f39727eb641786b34\n"
    },
    {
      "commit": "1c849e5badc85b6753dee0c0487729b2c0529f51",
      "tree": "5f5c602d60404f66d363fe1b4f619d89087fef33",
      "parents": [
        "78a5e15629e6591090582cd83b1ec1380a50a840"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Thu Jun 28 14:00:33 2012 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Thu Jun 28 14:00:33 2012 -0700"
      },
      "message": "Clean up kAccWritable in the verifier.\n\nkAccVerifier was deprecated, instead memory permissions were used in its\nstead.\n\nMove dead code scanning in the verifier to be enabled when the results\nwill be logged.\n\nChange-Id: Id20e62eefe958bd577b86bd7396a439d7a01c1b3\n"
    },
    {
      "commit": "a168c83a1d247094e9efb1244b0f73a5f1e1ed97",
      "tree": "d0fb5a91a00227eda6b430fd64f2a1bff5271723",
      "parents": [
        "289be85116aaf7c48413858b5d0448868b4e61f3"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Jun 12 15:34:20 2012 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Jun 12 15:34:20 2012 -0700"
      },
      "message": "Convince tsan that the card table isn\u0027t a problem.\n\nAlso move the #include \u003csys/mman.h\u003e into \"mem_map.h\", since it\u0027s\ncurrently not possible to make any use of the latter without the\nformer. If we care about the pollution, we should offer our own\nconstants as part of our API.\n\nChange-Id: I01ec451d23c1d8afb8cb8a6660af8d9723faf5f5\n"
    },
    {
      "commit": "7bda15835732b2ce874a093c136ca406d4f20e00",
      "tree": "a29f7656d44ed72b2304147801219a6fcaaef563",
      "parents": [
        "ecd3a6fc6e29d7dc4cb825c5282a8054ac52b8cf"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Jun 07 11:00:54 2012 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Jun 07 11:00:54 2012 -0700"
      },
      "message": "Fix the Mac build.\n\nChange-Id: Id46f542ddf6198dc5268bc1109b253308fab5244\n"
    },
    {
      "commit": "ecd3a6fc6e29d7dc4cb825c5282a8054ac52b8cf",
      "tree": "f684b381860df24cfea1414d01bff9a37c054023",
      "parents": [
        "a060ed959efb8d57419edc3c5c1fa48372cc6588"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Jun 06 18:16:37 2012 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Jun 07 10:07:12 2012 -0700"
      },
      "message": "Use libcorkscrew to detect map collisions.\n\nI taught libcorkscrew about Mac OS map info, so we don\u0027t need another\ncopy of the multi-platform map-parsing code.\n\nChange-Id: Iebb4559804d9d8210d00311987171079a7ee0919\n"
    },
    {
      "commit": "a060ed959efb8d57419edc3c5c1fa48372cc6588",
      "tree": "5d40e49f8f9f7cbcf2a1a5be1d800b8ab03d8f21",
      "parents": [
        "b65c9244ff8999fd62aecd86494886c61a50a60c"
      ],
      "author": {
        "name": "Shih-wei Liao",
        "email": "sliao@google.com",
        "time": "Thu Jun 07 09:25:28 2012 -0700"
      },
      "committer": {
        "name": "Shih-wei Liao",
        "email": "sliao@google.com",
        "time": "Thu Jun 07 09:32:37 2012 -0700"
      },
      "message": "Fix error meessages in DexFile::ChangePermissions() and mem_map.cc.\n\nChange-Id: I9be999b61b0fca1ab9cad7521346681d2370f1c4\n"
    },
    {
      "commit": "d88fa26892ad5ddebb7ab3407cdc574c54ed8258",
      "tree": "0c99e8b69ed93347908505d4c56b6bf48e4b3e28",
      "parents": [
        "07a062cc9770d0fa8c73f116db4cb15bfba8b7b3"
      ],
      "author": {
        "name": "Logan Chien",
        "email": "loganchien@google.com",
        "time": "Wed Jun 06 15:23:32 2012 +0800"
      },
      "committer": {
        "name": "Shih-wei Liao",
        "email": "sliao@google.com",
        "time": "Wed Jun 06 21:01:17 2012 -0700"
      },
      "message": "Add mprotect helper function to MemMap class.\n\nChange-Id: I3967b76301d339de987fb8e094adbde4ef18573d\n"
    },
    {
      "commit": "5ea8d4b0912a5bc139be21fc901f982a6b023675",
      "tree": "4f13619e78557bc77e941630ef8a67430e489e03",
      "parents": [
        "b5c4922f3c0f56eec5064536c4bb780c4f58f3fb"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed May 30 15:21:36 2012 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed May 30 15:21:36 2012 -0700"
      },
      "message": "Better diagnostics when an anonymous mmap fails.\n\nChange-Id: I0657950077c58c28b4f63990e42df6396215c07c\n"
    },
    {
      "commit": "8d524a1bd3cbbe701572b232cf2e690835c95346",
      "tree": "9c3a9c53b9ebb56485a9a7c4d648020dc56dd719",
      "parents": [
        "cf7d3a3b813b8bf08e127abeab67a425c9752f63"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Mar 30 17:20:10 2012 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Mar 30 17:20:10 2012 -0700"
      },
      "message": "Keep trying to guess the 10.5 vmmap(1) syntax...\n\nChange-Id: I960e33e0b97e9f7f52b815af3fbed4e2557a5225\n"
    },
    {
      "commit": "273cf36d199cf73de3cf61a559ad27c9d23f9825",
      "tree": "351cced4f439a1151a2d07dcc197960abcd9fb23",
      "parents": [
        "ba7a3ecc0c7342a19951f076474c41d43168f68e"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Mar 30 14:31:04 2012 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Mar 30 14:31:04 2012 -0700"
      },
      "message": "Keep fighting Mac OS 10.5 because the build servers are obsolete.\n\nChange-Id: I01b51a7dba147327e839c801109ffcc636ae8a4f\n"
    },
    {
      "commit": "ba7a3ecc0c7342a19951f076474c41d43168f68e",
      "tree": "e62902f63d5dee9224d354f69491c060c2100cde",
      "parents": [
        "0a6d59a83a84dbd78b55a7a1a754b2873a1e7a6e"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Mar 30 12:23:49 2012 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Mar 30 12:23:49 2012 -0700"
      },
      "message": "Try to support obsolete Mac OS 10.5.\n\nvmmap(1)\u0027s -v option was new in 10.6.\n\nChange-Id: I92465e5f0b9d74f9435cc5600881b4f4bce19989\n"
    },
    {
      "commit": "448e93c728b352729afde3c8e95e902c08b1d929",
      "tree": "62f1748c09bf8b3e97cf941a3c2cc9afeeceb71b",
      "parents": [
        "f1498437b0d6beb9f4f91980b98cbeb0b5c773ce"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Mar 28 22:30:06 2012 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Mar 28 22:30:06 2012 -0700"
      },
      "message": "Fix dex2oat on the Mac.\n\nWhat did we do before valgrind? _NSGetExecutablePath was responsible for the\nheap corruption. The vmmap(1) parsing was slightly off too.\n\nChange-Id: Id458d99c0f75e70a5c59cfbd785ea2efebfbdfce\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": "96970cdab3e28511322ce37fa578f6eff8931d72",
      "tree": "ed684d4eef1274ec3ce89a43896ddec9a0380c80",
      "parents": [
        "0512f02dd6623c0870c11fbf3274d7462f732136"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Mar 13 15:46:31 2012 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Mar 16 12:12:02 2012 -0700"
      },
      "message": "Implement CheckMapRequest for Mac OS.\n\n(cherry picked from commit d594adbd5126249950d42d3986ca86d066c3d912)\n\nChange-Id: I1e99aa15d8fd9bde47042469fc31a3032b69bdf0\n"
    },
    {
      "commit": "30fab40ee5a07af6b8c3b6b0e9438071695a57f4",
      "tree": "86514e3535c8b23cf52249a202076b59ac532021",
      "parents": [
        "f3778f66879fa038a7c9ebe46d5bc4167ddef7d8"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Mon Jan 23 15:43:46 2012 -0800"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Thu Jan 26 17:32:10 2012 -0800"
      },
      "message": "Upgrade to latest dlmalloc. Refactor Heap and related APIs to use STL like naming.\n\nWe fail assertions in the existing heap code, as does Dalvik. This refactoring\nis to clean the heap and space APIs and to reduce duplication of data\nand thereby solve a failing assertion in the card table.\n\nThis change also wires up clearing of soft references including before\nout-of-memory errors are reported.\n\nIn doing this change it was made clear that mspaces are buggy (and\nviolating invariants with the garbage collector). This\nchange upgrades to an un-Android molested version of dlmalloc-2.8.5 and\nimplements a version of the mspace morecore routine under ART control.\n\nrun-test 061-out-of-memory is updated for current heap sizes.\n\nChange-Id: I377e83ab2a8c78afb9b1881f03356929e2c9dc64\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": "89521898b56f2ebc3fb68acfb6bc6dde9b6f5c38",
      "tree": "6811878efd4490f78ae099ec7e14c1a1ffe4d868",
      "parents": [
        "c74a6971fb9a65dbee337d51e7981a37be208a00"
      ],
      "author": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Wed Dec 07 22:05:07 2011 -0800"
      },
      "committer": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Wed Jan 04 00:23:07 2012 -0800"
      },
      "message": "Merge art-cache dex files into oat files\n\nChange-Id: I5a327a4e0b678bd9dabb12de4e21ef05e3fefd0b\n"
    },
    {
      "commit": "955724179c6c739524f610023287f56b24dc31de",
      "tree": "64f751693e72173ae0d044d8c54989b01f1195af",
      "parents": [
        "b87f73ea7524f6eb9da6da1af931a3d3fbb833ff"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Dec 13 18:14:20 2011 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Dec 13 18:14:20 2011 -0800"
      },
      "message": "Don\u0027t default-construct std::strings and then assign them.\n\nChange-Id: I8c994d1e6a8d2ebe52eaa4f0132e0deb2ecfa5f3\n"
    },
    {
      "commit": "6c9c06dbb0b16714079afaedbebd3d548aa832b2",
      "tree": "9b0ae57d2eb1e977a07f2837ac81397e8b227571",
      "parents": [
        "fb85604748667491610e309c868f80de2b7865c1"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Nov 07 16:43:47 2011 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Nov 07 17:02:46 2011 -0800"
      },
      "message": "Use ashmem to name our various anonymous regions.\n\nChange-Id: If64576b831a2fdcb83ffce40e6ec8ece8d902672\n"
    },
    {
      "commit": "cc607471d301e468ac0d84deacd1f60667331f67",
      "tree": "f2a8818b996e2cfca2f27863da797ad57ae98bd8",
      "parents": [
        "29405cfc691196c21325e80d9a9f3795026eff4e"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Oct 17 15:34:11 2011 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Oct 17 15:34:11 2011 -0700"
      },
      "message": "Use CHECK_OP instead of CHECK where possible.\n\nChange-Id: I2f12650e42bab057d0fd3b2978250306a6b264ab\n"
    },
    {
      "commit": "e24fa61603a60ade3797e4a0c8b3fccb346cb048",
      "tree": "9ec5ed942eb9ece6d4d261ffd21956c94f9968fe",
      "parents": [
        "06cbeb990e94f9c4576601e27145fe132e34a686"
      ],
      "author": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Thu Sep 29 00:53:55 2011 -0700"
      },
      "committer": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Mon Oct 03 10:28:05 2011 -0700"
      },
      "message": "Separate oat from image\n\nChange-Id: If2abdb99826ead14e3465d90ba2acffd89709389\n"
    },
    {
      "commit": "27ec961a1da540ba7f16c07a682585ab167317ad",
      "tree": "0aa6cb8345e394fe0ebe608bc26aa2acbdac1393",
      "parents": [
        "03fa263ba90e9f6b11231576c6b9cc434e67141d"
      ],
      "author": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Mon Sep 19 20:20:38 2011 -0700"
      },
      "committer": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Wed Sep 21 10:36:24 2011 -0700"
      },
      "message": "Adding oat_process\n\n- Added oat_process, a version of app_process use to launch frameworks apps\n- Added liboat_runtime, a version of libandroid_runtime that uses art instead of dvm\n  This is just a special makefile, frameworks/base/core/jni code is used for source\n- Added support for build a boot.oat with the full BOOTCLASSPATH\n  The older smaller boat.oat is now core.oat\n- Added mem_map code for making sure a requested memory region is available\n  Moved mem_map code to cc file to make easier to debug with smaller rebuild\n- Moved oat base address to 0x6000000 as a work around to host addres conflict\n- Added -Xms and -Xmx options to dex2oat to allow build specific memory options\n- Fixed miranda method initialization problem found compiling full bootclasspath\n- Made compiler.cc tolerant of verification errors found compiling full bootclasspath\n- Bumped arena block alloc warning to avoid noise when compiling full bootclasspath\n- Marked implicit GC unimplemented to fail fast\n- Added --output argument to oatdump\n- Made many object asserts tolerate access in IsErroneous state\n  now that verifier is failing validation of some classes during compilation\n- Made runtime tolerate unknown access as short term solution for oat_process\n- Workaround SSA issue to restore full bootclasspath compilation\n- Added test-art-target-processs to excercise oat_process with \"am\"\n  \"am\" found bug where class_linker was using Method::GetClass and not ::GetDeclaringClass\n\nChange-Id: I1a645a142b163e06bab9e72eb094ae1f1dbfbd97\n"
    }
  ]
}
