)]}'
{
  "log": [
    {
      "commit": "08cf9498553b88b0e41d3e4b233c04ac54e89c7a",
      "tree": "d19ee35ff1f5ccb3e32dac4f6ebb99314526706e",
      "parents": [
        "fbee3177afbcc7c5724584e4a8a7814ebaafa613"
      ],
      "author": {
        "name": "Eric Miao",
        "email": "ericymiao@google.com",
        "time": "Thu Nov 18 18:48:47 2021 +0000"
      },
      "committer": {
        "name": "Ryan Prichard",
        "email": "rprichard@google.com",
        "time": "Thu Feb 03 16:55:37 2022 -0800"
      },
      "message": "Change default block size alignment to be 4 for memory saving on 32-bit arch\n\nFor a 32-bit userspace, `struct LinkedListEntry` takes 8 bytes for\nstoring the two pointers, a default block allocator size alignment of\n16-bytes would waste 50% of memory. By changing the alignment to size\nof a pointer, it saves \u003e1MB memory postboot on wembley device.\n\nBug: http://b/206889551\nTest: bionic-unit-tests\nChange-Id: Ie92399c9bb3971f631396ee09bbbfd7eb17dc1a7\n"
    },
    {
      "commit": "3205cddff06f0b59c1de05f594992d96f7194da3",
      "tree": "5bf325b5b1a0c0a69bcb2734ea55103e77d42b98",
      "parents": [
        "79686ca145b5e54e3de4e409a82d72bdc7f22e88"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Jun 10 14:48:06 2020 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Jun 10 14:49:28 2020 -0700"
      },
      "message": "linker: CHECK() or async_safe_fatal() rather than abort().\n\nIn particular, add the strerror() output if mprotect() fails.\n\nFix the CHECK macro so that you can make assertions involving operator%\nwithout that being confused for a printf format specifier.\n\nBug: https://issuetracker.google.com/158645318\nTest: treehugger\nChange-Id: I6817f8ca5f094c52dc2c9067bfac90385a8743f5\n"
    },
    {
      "commit": "92b3e1b37b4391318424898bca8d6e9e961f046a",
      "tree": "415d99dda50e82f2bba111c1b0aa80e1537e5ddc",
      "parents": [
        "b0e2dd090bc74f36e3f2cafe85f542b785d760df"
      ],
      "author": {
        "name": "Ryan Prichard",
        "email": "rprichard@google.com",
        "time": "Mon Mar 11 17:27:52 2019 -0700"
      },
      "committer": {
        "name": "Ryan Prichard",
        "email": "rprichard@google.com",
        "time": "Tue Mar 12 01:11:24 2019 +0000"
      },
      "message": "Cosmetic changes to linker allocator and config\n\nMake the num_free_blocks calculation clearer. There are\nsizeof(page-\u003ebytes) bytes available for blocks, which is equal to\n(kAllocateSize - 16). The previous calculation overestimates the amount\nof space by 8 or 12 bytes, but that doesn\u0027t change the result because\nboth kAllocateSize and block_size_ are multiples of 16.\n\nBug: none\nTest: boot device, bionic unit tests\nChange-Id: Ia880cd5abc2a7bb4e9e6a8c0441d985f4df8fdc4\n"
    },
    {
      "commit": "bb7e1236f3676baffd5953061154e9a3552317d7",
      "tree": "a1ddb820db657e34a56e66dd81a0b04a46922673",
      "parents": [
        "58dd1cbd7f2a0b8a779f2f43c45447cdccc09c3e"
      ],
      "author": {
        "name": "Vic Yang",
        "email": "victoryang@google.com",
        "time": "Tue Jan 29 20:23:16 2019 -0800"
      },
      "committer": {
        "name": "Vic Yang",
        "email": "victoryang@google.com",
        "time": "Wed Jan 30 22:13:13 2019 -0800"
      },
      "message": "Purge linker block allocators before leaving linker\n\nThis is the second attempt to purge linker block allocators.  Unlike the\npreviously reverted change which purge allocators whenever all objects\nare freed, we only purge right before control leaves the linker.  This\nlimits the performance impact to one munmap() call per dlopen(), in\nmost cases.\n\nBug: 112073665\nTest: Boot and check memory usage with \u0027showmap\u0027.\nTest: Run camear cold start performance test.\nChange-Id: I02c7c44935f768e065fbe7ff0389a84bd44713f0\n"
    },
    {
      "commit": "7bb60fcbcd29f4e18865aa657cb3929ecb872b77",
      "tree": "2d6fd1790134178a652369c8cc05124e414df164",
      "parents": [
        "d7873cf94ee3c7a7b0fa24e1e932694c78416cd4"
      ],
      "author": {
        "name": "Vic Yang",
        "email": "victoryang@google.com",
        "time": "Mon Jan 28 23:04:40 2019 +0000"
      },
      "committer": {
        "name": "Vic Yang",
        "email": "victoryang@google.com",
        "time": "Tue Jan 29 20:21:41 2019 -0800"
      },
      "message": "Revert \"linker: Purge block allocator memory when possible\"\n\nThis reverts commit fb78a4ac1b93218f59aa44089ae5f4dbfababf0d.\n\nReason for revert: Performance regression.\n\nChange-Id: Ib12335fc7478dad933da00b8bc525366c9330a17\n"
    },
    {
      "commit": "dac328ad5118417a4622952ed8c62b3943612d09",
      "tree": "5cbede9caf341492d9d69c8e8eabc2d7dd52ad9e",
      "parents": [
        "fb78a4ac1b93218f59aa44089ae5f4dbfababf0d"
      ],
      "author": {
        "name": "Vic Yang",
        "email": "victoryang@google.com",
        "time": "Wed Jan 23 14:21:58 2019 -0800"
      },
      "committer": {
        "name": "Vic Yang",
        "email": "victoryang@google.com",
        "time": "Wed Jan 23 14:33:02 2019 -0800"
      },
      "message": "linker: Reduce number of mmap()/prctl() calls in block allocator\n\nGiven that the block allocator does not free allocated memory unless\nall objects are freed, we can allocate a large chunk of memory at a\ntime.  This gives us:\n  1. Higher space efficiency, especially when the objects being\n     allocated has a large size.\n  2. Much less mmap()/prctl() calls.\n  3. Much less vm_area_struct objects.\nWhile this increases the size of virtual memory allocated, the number\nof dirty pages would be unchanged or less.\n\nTest result on a Go device:\n  - Zygote starts 24ms faster on average.\n  - Kernel vm_area_struct usage 138KB less, across the entire system.\n\nBug: 112073665\nTest: Boot and check the result from \u0027showmap\u0027.\nChange-Id: Iece631a5081151dd1e5bf25dbddac9b264bcdcff\n"
    },
    {
      "commit": "fb78a4ac1b93218f59aa44089ae5f4dbfababf0d",
      "tree": "976bf1fa16427ea8a3bce0cbc6cb29cd94390449",
      "parents": [
        "176d2fbcaefe4691b8fd7844f6cec8e7a1a22c76"
      ],
      "author": {
        "name": "Vic Yang",
        "email": "victoryang@google.com",
        "time": "Wed Jan 23 12:19:41 2019 -0800"
      },
      "committer": {
        "name": "Vic Yang",
        "email": "victoryang@google.com",
        "time": "Wed Jan 23 12:24:46 2019 -0800"
      },
      "message": "linker: Purge block allocator memory when possible\n\nIf all allocated memory from a block allocator is freed, it is a good\nopportunity to purge all the pages allocated to reduce lingering dirty\npages.\n\nMemory saving varies with the platform and what processes are running.\nMeasuring right after boot, this saves ~1.8MB on cuttelfish and ~1.3MB\non a 32-bit ARM device.\n\nBug: 112073665\nTest: Boot and check memory usage with \u0027showmap\u0027.\nChange-Id: I53769e0ec9699f0b3645cdf281a2c0bbffb98676\n"
    },
    {
      "commit": "99d54656bda40edb817e6bc6de9a85d88ef4e6b5",
      "tree": "1a176f12c89582f0d06a3376ef66c6281d8af01c",
      "parents": [
        "8f2298e73f4d930b58a8466fd7264e9a88c96d99"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Aug 22 10:36:23 2018 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Aug 22 10:36:23 2018 -0700"
      },
      "message": "Add PR_SET_VMA and PR_SET_VMA_ANON_NAME to \u003csys/prctl.h\u003e.\n\nWe\u0027ve copied \u0026 pasted these to too many places. And if we\u0027re going to\nhave another go at upstreaming these, that\u0027s probably yet another reason\nto have the *values* in just one place. (Even if upstream wants different\nnames, we\u0027ll likely keep the legacy names around for a while for source\ncompatibility.)\n\nBug: http://b/111903542\nTest: ran tests\nChange-Id: I8ccc557453d69530e5b74f865cbe0b458c84e3ba\n"
    },
    {
      "commit": "7b0af7ad82fcf88e800d1a553d81fda29dc064bd",
      "tree": "4cf982c55c48b49864bcb4f986c7400d640930e0",
      "parents": [
        "3b64f8ecb3db49574cc5b7c6030be98c159be4d4"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Sep 15 16:09:22 2017 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Sep 15 16:18:49 2017 -0700"
      },
      "message": "Always log errno when aborting.\n\n(Where errno is relevant.)\n\nAlso consistently use -1 as the fd for anonymous mmaps. (It doesn\u0027t matter,\nbut it\u0027s more common, and potentially more intention-revealing.)\n\nBug: http://b/65608572\nTest: ran tests\nChange-Id: Ie9a207632d8242f42086ba3ca862519014c3c102\n"
    },
    {
      "commit": "bcc4da9b752f0def46d63ed7b31f3f49cc2435ad",
      "tree": "b4e59da798a4f613507a79072eabbaaa995fa447",
      "parents": [
        "606ba2762e6d1062a2cbf4599b7bdb60ce5cc404"
      ],
      "author": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Wed Feb 15 15:31:13 2017 -0800"
      },
      "committer": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Wed Feb 15 15:35:33 2017 -0800"
      },
      "message": "Unify linker files under one license (BSD)\n\nHistorically we had part of the linker licensed under BSD and\nanother part under Apache 2 license. This commit makes all the\nlinker code licensed under BSD license.\n\nTest: m\nChange-Id: I11b8163ae75966b5768d3fe992679de376106515\n"
    },
    {
      "commit": "8cbe97de7fcd4a1e7ac5957da49cefcf188fdd47",
      "tree": "b2719800cc25e8fdb2c1c75964eb525915366467",
      "parents": [
        "2bfb8c9180603bac97dca2d8e359f71bb11f7126"
      ],
      "author": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Thu Feb 09 15:53:54 2017 -0800"
      },
      "committer": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Thu Feb 09 15:53:54 2017 -0800"
      },
      "message": "Remove unnecessary memsets in linker allocators\n\nTest: linker-unit-tests\nTest: bionic-unit-tests --gtest_filter\u003ddl*:Dl*\nChange-Id: I96f983dba77c9cb5698a9eb2e51b33bc128c6dd7\n"
    },
    {
      "commit": "3edc5c41bbee7cf608a781e7056599f32ca1949c",
      "tree": "88b26c5a450fb4548479c109a68253e7a41c07e8",
      "parents": [
        "8d6e19408cfdbd73ba7e5c9e5b8716d9dad8dcf9"
      ],
      "author": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Thu Jan 21 10:55:40 2016 -0800"
      },
      "committer": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Thu Jan 21 14:28:33 2016 -0800"
      },
      "message": "linker: align allocated blocks to 16 bytes\n\nC/C++ requires the result of malloc/new to be\naligned for any primitive type.\n\nChange-Id: I715b7679e738f34b3b409993fb3ef242e1321b7f\n"
    },
    {
      "commit": "600bc3cb9342fbb1dc16ea25f5b676ce072e3e1b",
      "tree": "5892626ab8bfc8648476ba15f71d20e03e90da11",
      "parents": [
        "c9ce70d7838b6aae074fc3615cdf04e5c9ac612a"
      ],
      "author": {
        "name": "Dmitriy Ivanov",
        "email": "dimitry@google.com",
        "time": "Tue Mar 10 15:43:50 2015 -0700"
      },
      "committer": {
        "name": "Dmitriy Ivanov",
        "email": "dimitry@google.com",
        "time": "Tue Mar 10 15:43:50 2015 -0700"
      },
      "message": "Rename LinkerAllocator and LinkerAllocatorPage\n\nChange-Id: I87d80fbcd4ec26c0ee4f601b9c4c64f600418dd9\n"
    },
    {
      "commit": "c9ce70d7838b6aae074fc3615cdf04e5c9ac612a",
      "tree": "dac3026e1798737fd5edc364a82822bdfb078ae0",
      "parents": [
        "e842dc0de5ce5f9950e323ae8805909f60867bf6"
      ],
      "author": {
        "name": "Dmitriy Ivanov",
        "email": "dimitry@google.com",
        "time": "Tue Mar 10 15:30:26 2015 -0700"
      },
      "committer": {
        "name": "Dmitriy Ivanov",
        "email": "dimitry@google.com",
        "time": "Tue Mar 10 15:30:26 2015 -0700"
      },
      "message": "Refactoring: rename linker_allocator files\n\nChange-Id: Ifc08e64b3a85205f072b7abab1149c7ab71e2f75\n"
    },
    {
      "commit": "05fc1d7050d5451aea08dc5f504d2670287b2d43",
      "tree": "fa1d81b61b303ee8ed94c511cc08b8f40ed6624b",
      "parents": [
        "43606bc1ce974e4ba42d7d2c3682ad5182e6fc96"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Jan 28 18:02:33 2015 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Jan 28 19:23:11 2015 -0800"
      },
      "message": "Add missing includes.\n\nChange-Id: Ibf549266a19a67eb9158d341a69dddfb654be669\n"
    },
    {
      "commit": "51a22a12ab370933a35463f5c81223132ec64dcb",
      "tree": "83033d1672090d93a22d349669bbe9159322f4e8",
      "parents": [
        "a0db46418757dd1b399acb97ff42083cc274e8ae"
      ],
      "author": {
        "name": "Dmitriy Ivanov",
        "email": "dimitry@google.com",
        "time": "Fri Aug 08 16:57:15 2014 -0700"
      },
      "committer": {
        "name": "Dmitriy Ivanov",
        "email": "dimitry@google.com",
        "time": "Mon Aug 11 09:22:48 2014 -0700"
      },
      "message": "Label pages mapped by linker_allocator\n\nChange-Id: I7e0bf29bc1a480e9be0d1ae573ca1063d90d82ff\n"
    },
    {
      "commit": "4151ea73b75e274d1ff80b42d9d457a783208516",
      "tree": "5095a8609376eccfc649da4af282d10da47abb06",
      "parents": [
        "7d22a4519610f830178bbff32d961a2784354397"
      ],
      "author": {
        "name": "Dmitriy Ivanov",
        "email": "dimitry@google.com",
        "time": "Thu Jul 24 15:33:25 2014 -0700"
      },
      "committer": {
        "name": "Dmitriy Ivanov",
        "email": "dimitry@google.com",
        "time": "Thu Jul 24 15:33:25 2014 -0700"
      },
      "message": "Fix global variable initialization for linker\n\n Linker now calls init functions for itself.\n\nChange-Id: Ibd099812493041ac70f591e3f379ee742b4683b8\n"
    },
    {
      "commit": "d59e50063ad708509f3ad83350be33f5612c4f54",
      "tree": "4179117769c38d28aff06e56427f54e72e5eed6b",
      "parents": [
        "6897b7b8b95beae120fd53e6fd15921d6420bea7"
      ],
      "author": {
        "name": "Dmitriy Ivanov",
        "email": "dimitry@google.com",
        "time": "Fri May 09 09:10:14 2014 -0700"
      },
      "committer": {
        "name": "Dmitriy Ivanov",
        "email": "dimitry@google.com",
        "time": "Wed May 14 15:16:35 2014 -0700"
      },
      "message": "Improve detection of already loaded libraries\n\nLinker is now able to resolve symlinked libraries correctly.\n\nsoinfo is extended to save the graph of dependencies during\nload/unload. Dependencies are used only in CallConstructor.\n\nBug: 9741592\nChange-Id: Id9c48a74c46aa89bcdf3d54ec2f8ba3d398130b1\n"
    },
    {
      "commit": "1079406cab09090cc11e26d4ac2f1ba9c4930cdb",
      "tree": "1990287fea9a5cc28410dfa1bc3ff3741ad1cfc2",
      "parents": [
        "c6b5834ceb3df72608a8fe3526a2db337e504512"
      ],
      "author": {
        "name": "Dmitriy Ivanov",
        "email": "dimitry@google.com",
        "time": "Wed May 14 12:52:57 2014 -0700"
      },
      "committer": {
        "name": "Dmitriy Ivanov",
        "email": "dimitry@google.com",
        "time": "Wed May 14 12:52:57 2014 -0700"
      },
      "message": "Fix for linker allocator\n\nChange-Id: I18a3f1a8515657f0deb69266184fb516a27f90e8\n"
    },
    {
      "commit": "bc23e530c4db5175a065eeef36553c9c2c78fcf4",
      "tree": "dd0ef72c108a549ef4ac775be8cb4f43034ca29a",
      "parents": [
        "d597d263bc32422402d4810ce4ec070f0227c2f7"
      ],
      "author": {
        "name": "Dmitriy Ivanov",
        "email": "dimitry@google.com",
        "time": "Tue May 13 18:34:48 2014 -0700"
      },
      "committer": {
        "name": "Dmitriy Ivanov",
        "email": "dimitry@google.com",
        "time": "Tue May 13 18:34:48 2014 -0700"
      },
      "message": "Remove page level mprotects\n\nFreeing block mprotects on the page which it turn\nmay lead to application crash if linker subsequently\ntries to modify another block on the page.\n\nBug: 14895266\nChange-Id: I8ff7f5df467d7be184242de652032b3c84e24b76\n"
    },
    {
      "commit": "d597d263bc32422402d4810ce4ec070f0227c2f7",
      "tree": "82c874dc2a5e8e1821a23af6c9d9fce7091be185",
      "parents": [
        "4b57305afe2b54a6afb733361f6fd93cb92ccfa8"
      ],
      "author": {
        "name": "Dmitriy Ivanov",
        "email": "dimitry@google.com",
        "time": "Mon May 05 16:49:04 2014 -0700"
      },
      "committer": {
        "name": "Dmitriy Ivanov",
        "email": "dimitry@google.com",
        "time": "Mon May 12 21:40:09 2014 -0700"
      },
      "message": "Refactor linker allocator\n\nMakes it reusable for different fixed sized and not very\nbig structures (\u003cPAGE_SIZE).\n\nChange-Id: Id5ec13fc6541b1935ef7fe3671c22b98685abbae\n"
    }
  ]
}
