)]}'
{
  "log": [
    {
      "commit": "d500751443dbd841445f019428099aae42bac007",
      "tree": "2c55d14b68aad215315d927885a12c427c58b451",
      "parents": [
        "f08e70a0d9a02cbec89be682d665c2c2896c968f"
      ],
      "author": {
        "name": "Vy Nguyen",
        "email": "vyng@google.com",
        "time": "Tue Jul 14 17:37:04 2020 -0400"
      },
      "committer": {
        "name": "Vy Nguyen",
        "email": "vyng@google.com",
        "time": "Tue Aug 11 16:51:43 2020 +0000"
      },
      "message": "Add a thread-properties API\n(Based on proposal at https://sourceware.org/glibc/wiki/ThreadPropertiesAPI)\n\nThis includes API to:\n - locate static and dynamic TLS\n - register thread-exit and  dynamic TLS creation/destruction callbacks\n\nChange-Id: Icd9d29a5b2f47495395645e19d3b2c96826f19c8\n"
    },
    {
      "commit": "96773a2daf8d11f2d95801935e26f71eb0265559",
      "tree": "44a8da51e6b6acfb7054830a44e23b00d82afefc",
      "parents": [
        "083d850b30c5eb29c16500bca934d7f6682e4aaa"
      ],
      "author": {
        "name": "Ryan Prichard",
        "email": "rprichard@google.com",
        "time": "Thu Jan 24 15:22:50 2019 -0800"
      },
      "committer": {
        "name": "Ryan Prichard",
        "email": "rprichard@google.com",
        "time": "Fri Jan 25 15:31:35 2019 -0800"
      },
      "message": "Add BionicAllocator::memalign\n\nBionic needs this functionality to allocate a TLS segment with greater\nthan 16-byte alignment. For simplicity, this allocator only supports up\nto one page of alignment.\n\nThe memory layout changes slightly when allocating an object of exactly\nPAGE_SIZE alignment. Instead of allocating the page_info header at the\nstart of the page containing the pointer, it is allocated at the start\nof the preceding page.\n\nBug: http://b/78026329\nTest: linker-unit-tests{32,64}\nChange-Id: I1c8d1cd7ca72d113bced5ee15ba8d831426b0081\n"
    },
    {
      "commit": "083d850b30c5eb29c16500bca934d7f6682e4aaa",
      "tree": "5138d02782bff5e30af0c97cf114000674ca8771",
      "parents": [
        "52165b34b9c36eae4e15c47c25ab3c51b2029592"
      ],
      "author": {
        "name": "Ryan Prichard",
        "email": "rprichard@google.com",
        "time": "Thu Jan 24 13:47:13 2019 -0800"
      },
      "committer": {
        "name": "Ryan Prichard",
        "email": "rprichard@google.com",
        "time": "Fri Jan 25 15:31:35 2019 -0800"
      },
      "message": "Move the linker allocator into libc\n\nRename LinkerMemoryAllocator -\u003e BionicAllocator\nRename LinkerSmallObjectAllocator -\u003e BionicSmallObjectAllocator\n\nlibc and the linker need to share an instance of the allocator for\nallocating and freeing dynamic ELF TLS memory (DTVs and segments). The\nlinker also continues to use this allocator.\n\nBug: http://b/78026329\nTest: /data/nativetest/bionic-unit-tests-static\nTest: /data/nativetest64/bionic-unit-tests-static\nTest: /data/nativetest/linker-unit-tests/linker-unit-tests32\nTest: /data/nativetest64/linker-unit-tests/linker-unit-tests64\nChange-Id: I2da037006ddf8041a75f3eba2071a8fcdcc223ce\n"
    },
    {
      "commit": "52165b34b9c36eae4e15c47c25ab3c51b2029592",
      "tree": "60e48aa85eb4ed8fefa0275667a5bfe1c5db1f80",
      "parents": [
        "70ee1825d0e8c72570c834db0f27ab806de5d857"
      ],
      "author": {
        "name": "Ryan Prichard",
        "email": "rprichard@google.com",
        "time": "Wed Jan 23 17:46:24 2019 -0800"
      },
      "committer": {
        "name": "Ryan Prichard",
        "email": "rprichard@google.com",
        "time": "Fri Jan 25 14:48:00 2019 -0800"
      },
      "message": "Replace some of linker_allocator\u0027s header includes\n\nThe \u003casync_safe/log.h\u003e include in linker_allocator.h was made\nunnecessary when the STL dependency was removed.\n\nReplace the linker_*.h header includes with private/bionic_*.h\nincludes.\n\nThis change prepares LinkerMemoryAllocator for use in libc allocating\ndynamic ELF TLS memory.\n\nBug: http://b/78026329\nTest: bionic unit tests\nChange-Id: I6ad62bd513e71dd3f91a4b724a92b19a1eb6c3b4\n"
    },
    {
      "commit": "259429bd855daa54fc6ebf57982778db58e0331f",
      "tree": "af7d15d8070f717f5c8144e20fe2f0928f8dcc54",
      "parents": [
        "5493851e1bd92fd64bcaeee53492584564c6e7cc"
      ],
      "author": {
        "name": "Vic Yang",
        "email": "victoryang@google.com",
        "time": "Tue Dec 04 23:59:57 2018 -0800"
      },
      "committer": {
        "name": "Vic Yang",
        "email": "victoryang@google.com",
        "time": "Wed Dec 12 17:39:07 2018 -0800"
      },
      "message": "Further improve of linker memory allocators\n\nThis includes:\n  - Blocks allocated by small object allocators are now aligned to\n    their block size.\n  - Remove redundant free_blocks_cnt and allocated_blocks_cnt, as they\n    sum up to a fixed number.\n  - Remove a redundant padding word in small_object_page_info on 32-bit\n    platform.\n\nTest: Build and boot cuttlefish.\nChange-Id: Ib922d7af739e3709e8a162c7f68e7f99bf95a914\n"
    },
    {
      "commit": "5493851e1bd92fd64bcaeee53492584564c6e7cc",
      "tree": "b2e7eadce5ab178aa5d53e5618bc0219d0d9bd55",
      "parents": [
        "c49776bffc92c623c0bbb9d517252bf95bf9b652"
      ],
      "author": {
        "name": "Vic Yang",
        "email": "victoryang@google.com",
        "time": "Sun Dec 02 23:46:26 2018 -0800"
      },
      "committer": {
        "name": "Vic Yang",
        "email": "victoryang@google.com",
        "time": "Wed Dec 12 15:53:55 2018 -0800"
      },
      "message": "Reduce LinkerSmallObjectAllocator memory overhead\n\nThe current implementation of LinkerSmallObjectAllocator keeps record\nof pages in a vector, which uses its own page(s).  This is at least a\npage overhead per LinkerSmallObjectAllocator.\n\nThis change removes the page record vector by managing the pages in a\ndoubly linked list.\n\nWe also fix a bug where we are actually keeping up to 2 free pages\ninstead of just one.\n\nThe memory used by small objects when running \u0027dd\u0027, before this change:\n    72 KB  [anon:linker_alloc_small_objects]\n    28 KB  [anon:linker_alloc_vector]\n\nAfter this change:\n    60 KB  [anon:linker_alloc_small_objects]\n\nTest: Boot cuttlefish and check memory used by linker.\nChange-Id: I3468fa4d853c78b4bc02bfb84a3531653f74fb17\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": "cbc80ba9d839675a0c4891e2ab33f39ba51b04b2",
      "tree": "0b24e6123c94bd3e61d94fd6eca6a3b9cc9b074e",
      "parents": [
        "3374d0cabb973ff2b73ad8cd909389bdeed18658"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Feb 13 14:26:29 2018 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Feb 13 14:27:17 2018 -0800"
      },
      "message": "Switch the rest of our internal headers to #pragma once.\n\nWe\u0027ve been using #pragma once for new internal files, but let\u0027s be more bold.\n\nBug: N/A\nTest: builds\nChange-Id: I7e2ee2730043bd884f9571cdbd8b524043030c07\n"
    },
    {
      "commit": "1c78cb0fee257cdee13acceaee3de88e40d77e1b",
      "tree": "c6bf25c41c4e4d863871f4a7cc191542ffbe89f1",
      "parents": [
        "983c2da84cdcd0171b7f726b78990cabd0a58f49"
      ],
      "author": {
        "name": "Dan Albert",
        "email": "danalbert@google.com",
        "time": "Wed Oct 11 11:25:25 2017 -0700"
      },
      "committer": {
        "name": "Dan Albert",
        "email": "danalbert@google.com",
        "time": "Wed Oct 11 11:25:52 2017 -0700"
      },
      "message": "Add missing includes.\n\nTest: mma\nBug: None\nChange-Id: I0221b213e08d07cc5ac0b704a86e98ae8c0f456f\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": "7a3681e5b6c39bc2b3b62031ca5941dbf7bc4e63",
      "tree": "78c25e2a38b7efed8db770a623a5cbfb7eaab11d",
      "parents": [
        "ca5e0f49ca5df873a20c996755175b5c9c1e2ed9"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Mon Apr 24 17:48:32 2017 -0700"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Wed May 03 08:50:43 2017 -0700"
      },
      "message": "Move libc_log code into libasync_safe.\n\nThis library is used by a number of different libraries in the system.\nMake it easy for platform libraries to use this library and create\nan actual exported include file.\n\nChange the names of the functions to reflect the new name of the library.\n\nRun clang_format on the async_safe_log.cpp file since the formatting is\nall over the place.\n\nBug: 31919199\n\nTest: Compiled for angler/bullhead, and booted.\nTest: Ran bionic unit tests.\nTest: Ran the malloc debug tests.\nChange-Id: I8071bf690c17b0ea3bc8dc5749cdd5b6ad58478a\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": "65707b696a59f28b3980c78bdb4b049231610e64",
      "tree": "31fcb0e09dbe033dbd8fb82c6c304ad362d5a2ea",
      "parents": [
        "4bc6eea83e127a50d4763f067486ec79ed4e61a7"
      ],
      "author": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Fri Jul 29 13:25:33 2016 -0700"
      },
      "committer": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Fri Jul 29 14:05:39 2016 -0700"
      },
      "message": "Improvements to initialization of linker_allocator\n\nMake linker_allocator independent of the order of global constructors.\n\nBug: http://b/30483811\nChange-Id: I18a323175661b8e1c9e398f2d6112f7a08d2cceb\nTest: boot the device with I3ac91758a1a043146c65f2ae0f36fcfbe372c30f\n"
    },
    {
      "commit": "d9d6a84c016abea6745c7e7a789755f3449c7e4b",
      "tree": "b74880ccb4c3b95e54173f60f59ce5f1bb97531a",
      "parents": [
        "194860a9e638b1d093857f08b8fad37c9ec0e113"
      ],
      "author": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Tue Jan 26 17:53:17 2016 -0800"
      },
      "committer": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Tue Jan 26 17:54:13 2016 -0800"
      },
      "message": "Unify names for pages allocated for small objects\n\nBug: http://b/26776399\nChange-Id: Id5b6f143a526cecca56de18ddad8857dfa1dd165\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": "19656ce5376c95ce0deebc4d0c6af1bb8d740934",
      "tree": "3e78273c034d5890e12af1a00f9e9746ce3fec23",
      "parents": [
        "11a06c73f6e7d31442429a58a346d881b0a8a441"
      ],
      "author": {
        "name": "Dmitriy Ivanov",
        "email": "dimitry@google.com",
        "time": "Tue Mar 10 17:48:27 2015 -0700"
      },
      "committer": {
        "name": "Dmitriy Ivanov",
        "email": "dimitry@google.com",
        "time": "Mon Mar 16 11:19:53 2015 -0700"
      },
      "message": "General purpose memory allocator for linker.\n\n Add basic general purpose memory allocator to\n linker in order to enable usage of other libraries\n like libziparchive.\n\nChange-Id: I4a680ebb36ed5ba67c61249f81dba9f567808434\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": "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": "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"
    }
  ]
}
