)]}'
{
  "log": [
    {
      "commit": "4956c372cf320328952665629b2626e7cbc84c54",
      "tree": "7a02304c6c2eadc93b1b7a357fb31a143b661a89",
      "parents": [
        "e592dacfa254f59bb097c98d118d0c860b181da1"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Thu Dec 19 16:35:51 2019 -0800"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Thu Jan 02 14:09:50 2020 -0800"
      },
      "message": "Move bionic_macros.h from private to platform.\n\nTest: treehugger\nChange-Id: Ie473914f4c8924c7240b3ac22093a9daf42fc948\n"
    },
    {
      "commit": "7752bcb234a9960d2e9e89766d143b7ac0c5f332",
      "tree": "e7bcae45f66a0682f07d242f18b33681fc9e4cfa",
      "parents": [
        "abf736a7803f4acc8b70a2dab0d43b931aa9c5c0"
      ],
      "author": {
        "name": "Ryan Prichard",
        "email": "rprichard@google.com",
        "time": "Thu Nov 22 02:41:04 2018 -0800"
      },
      "committer": {
        "name": "Ryan Prichard",
        "email": "rprichard@google.com",
        "time": "Wed Nov 28 14:26:14 2018 -0800"
      },
      "message": "Move the abort message to libc_shared_globals\n\n__libc_shared_globals() is available in dynamic modules as soon as\nrelocation has finished (i.e. after ifuncs run). Before ifuncs have run,\nthe android_set_abort_message() function already doesn\u0027t work because it\ncalls public APIs via the PLT. (If this matters, we can use a static\nbool variable to enable android_set_abort_message after libc\ninitialization).\n\n__libc_shared_globals() is hidden, so it\u0027s available in the linker\nimmediately (i.e. before relocation). TLS memory (e.g. errno) currently\nisn\u0027t accessible until after relocation, but a later patch fixes that.\n\nBug: none\nTest: bionic unit tests\nChange-Id: Ied4433758ed2da9ee404c6158e319cf502d05a53\n"
    },
    {
      "commit": "abf736a7803f4acc8b70a2dab0d43b931aa9c5c0",
      "tree": "72009b4f3acbd65415b4c1ed2244d1c560269349",
      "parents": [
        "12ed389ca5ea756f664de6f76118c886f7bac865"
      ],
      "author": {
        "name": "Ryan Prichard",
        "email": "rprichard@google.com",
        "time": "Thu Nov 22 02:40:17 2018 -0800"
      },
      "committer": {
        "name": "Ryan Prichard",
        "email": "rprichard@google.com",
        "time": "Wed Nov 28 14:26:14 2018 -0800"
      },
      "message": "Expose libc_shared_globals to libc.so with symbol\n\nPreviously, the address of the global variable was communicated from the\ndynamic linker to libc.so using a field of KernelArgumentBlock, which is\ncommunicated using the TLS_SLOT_BIONIC_PREINIT slot.\n\nAs long as this function isn\u0027t called during relocations (i.e. while\nexecuting an ifunc), it always return a non-NULL value. If it\u0027s called\nbefore its PLT entry is relocated, I expect a crash.\n\nI removed the __libc_init_shared_globals function. It\u0027s currently empty,\nand I don\u0027t think there\u0027s one point in libc\u0027s initialization where\nshared globals should be initialized.\n\nBug: http://b/25751302\nTest: bionic unit tests\nChange-Id: I614d25e7ef5e0d2ccc40d5c821dee10f1ec61c2e\n"
    },
    {
      "commit": "5e62b34c0d6fa545b487b9b64fb4a04a0589bc13",
      "tree": "e08ee44067b3b636ace11b21ec8d63a08d4d2a19",
      "parents": [
        "c89a3971e94c30611c885e4c440eae2fd9937948"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Oct 25 11:00:00 2018 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Oct 25 11:00:00 2018 -0700"
      },
      "message": "Clean up bionic_macros.h a bit.\n\nUse \u003candroid-base/macros.h\u003e instead where possible, and move the bionic\nmacros out of the way of the libbase ones. Yes, there are folks who manage\nto end up with both included at once (thanks OpenGL!), and cleaning that\nup doesn\u0027t seem nearly as practical as just making this change.\n\nBug: N/A\nTest: builds\nChange-Id: I23fc544f39d5addf81dc61471771a5438778895b\n"
    },
    {
      "commit": "32bc0fcf69dfccb3726fe572833a38b01179580e",
      "tree": "abca656f500087493e0997d5cf38cbcc9ec98eb8",
      "parents": [
        "65f82092a17518080178ff7004cc6db362ebfbcd"
      ],
      "author": {
        "name": "Yi Kong",
        "email": "yikong@google.com",
        "time": "Thu Aug 02 17:31:13 2018 -0700"
      },
      "committer": {
        "name": "Yi Kong",
        "email": "yikong@google.com",
        "time": "Thu Aug 02 18:09:44 2018 -0700"
      },
      "message": "Modernize codebase by replacing NULL with nullptr\n\nFixes -Wzero-as-null-pointer-constant warning.\n\nTest: m\nBug: 68236239\nChange-Id: I5b4123bc6709641315120a191e36cc57541349b2\n"
    },
    {
      "commit": "f6e5b582604715729b09db3e36a7aeb8c24b36a4",
      "tree": "1d68c449355f88a0652d3c1e2d6679b54fce1b20",
      "parents": [
        "ad596bf4fc406c0940d0f76f6b7c4ff22ecee7ac"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Fri Jun 01 15:30:54 2018 -0700"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Thu Jul 19 14:28:54 2018 -0700"
      },
      "message": "Introduce api to track fd ownership in libc.\n\nAdd two functions to allow objects that own a file descriptor to\nenforce that only they can close their file descriptor.\n\nUse them in FILE* and DIR*.\n\nBug: http://b/110100358\nTest: bionic_unit_tests\nTest: aosp/master boots without errors\nTest: treehugger\nChange-Id: Iecd6e8b26c62217271e0822dc3d2d7888b091a45\n"
    },
    {
      "commit": "5cec377f49d6429b19895eb632225cd757ea611e",
      "tree": "bcd08fe1e6b656a5a4e235a225fbe88feb54a112",
      "parents": [
        "0d63a3c233040af004cc470d5f76547f3adc0148"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Jan 19 15:45:23 2018 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Jan 19 15:56:12 2018 -0800"
      },
      "message": "Address a bunch of clang-tidy complaints.\n\nThere were a bunch more unreasonable/incorrect ones, but these ones\nseemed legit. Nothing very interesting, though.\n\nBug: N/A\nTest: ran tests, benchmarks\nChange-Id: If66971194d4a7b4bf6d0251bedb88e8cdc88a76f\n"
    },
    {
      "commit": "63fbb233cbdf0f0d6fb6ce23234f5fc75855ba85",
      "tree": "98676f3ba5b9417661697d876c69077e96b0d03a",
      "parents": [
        "c6c3b47be20be9e81725f9bd07d81a9ed752acfc"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Jan 05 16:29:33 2016 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Jan 05 16:29:33 2016 -0800"
      },
      "message": "Tidy up KernelArgumentBlock::getauxval.\n\nCorrect the comment, and remove the unused functionality. getauxval(3) does\nnow set errno to let you know it failed to find anything, but since none of\nthis function\u0027s callers care anyway it seems safer to leave errno untouched\nuntil we actually have a demonstrated need for it.\n\nBug: https://code.google.com/p/android/issues/detail?id\u003d198111\nChange-Id: I232a42dc5a02c8faab94c7d69bef610408276c23\n"
    },
    {
      "commit": "8eac9af24ea7e570e0b297bcd6ac8a46ba3ecc39",
      "tree": "d69e6b95bccca6e095b5e320198c552c9ee0e398",
      "parents": [
        "b2c3c803f0f4a50acfdc31eb28bd83b48a0026fe"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri May 09 19:12:08 2014 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri May 09 19:12:08 2014 -0700"
      },
      "message": "Bring in google3-style DISALLOW_* macros.\n\nI\u0027ve been meaning to do this for a very long time...\n\nChange-Id: Ia8c16eee7c026c3c9505399948485fb778fb0152\n"
    },
    {
      "commit": "0266ae5f884d72da58f33a072e865ba131234a5e",
      "tree": "48763b706806f544b1dec0ef98261bed6f21dee2",
      "parents": [
        "eeb9a9f59a58a2f042e8f6fd1a4911ae92ac5493"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Feb 10 17:46:57 2014 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Feb 10 18:22:24 2014 -0800"
      },
      "message": "Switch \u003celf.h\u003e over to linux uapi under the covers.\n\nRemove the linker\u0027s reliance on BSD cruft and use the glibc-style\nElfW macro. (Other code too, but the linker contains the majority\nof the code that needs to work for Elf32 and Elf64.)\n\nAll platforms need dl_iterate_phdr_static, so it doesn\u0027t make sense\nto have that part of the per-architecture configuration.\n\nBug: 12476126\nChange-Id: I1d7f918f1303a392794a6cd8b3512ff56bd6e487\n"
    },
    {
      "commit": "c620059479c47a78d57086d73726c9adc2f337ad",
      "tree": "ef410fffb4d853aaf7dbfee41743c197c4985856",
      "parents": [
        "6dee3b9aeec40bb518c1a29b4462300869a03d8e"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Sep 30 18:43:46 2013 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Sep 30 18:43:46 2013 -0700"
      },
      "message": "Remove 32-bit assumptions from the ELF code.\n\nChange-Id: I2c1f3d34c33685799aade8866eec44479ff9f963\n"
    },
    {
      "commit": "0d787c1fa18c6a1f29ef9840e28a68cf077be1de",
      "tree": "3f8efc05d80658c9be48513238104a5de01a9951",
      "parents": [
        "014c75c78bdcad8acde8d0abb2450aa1f78e1a1f"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Apr 04 13:46:46 2013 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Apr 05 11:24:19 2013 -0700"
      },
      "message": "Make abort messages available to debuggerd.\n\nThis adds __libc_fatal, cleans up the internal logging code a bit more,\nand switches suitable callers over to __libc_fatal. In addition to logging,\n__libc_fatal stashes the message somewhere that the debuggerd signal handler\ncan find it before calling abort.\n\nIn the debuggerd signal handler, we pass this address to debuggerd so that\nit can come back with ptrace to read the message and present it to the user.\n\nBug: 8531731\nChange-Id: I416ec1da38a8a1b0d0a582ccd7c8aaa681ed4a29\n"
    },
    {
      "commit": "42b2c6a5eed5e4ef35315b8cd32d1355f12a69b6",
      "tree": "0fb55a369b620ef79cfa103f67a5184f067dadeb",
      "parents": [
        "d32fdbaf03f688497adbec885e85c0a69f7a4542"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Feb 07 10:14:39 2013 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Feb 07 11:44:21 2013 -0800"
      },
      "message": "Clean up the argc/argv/envp/auxv handling.\n\nThere\u0027s now only one place where we deal with this stuff, it only needs to\nbe parsed once by the dynamic linker (rather than by each recipient), and it\u0027s\nnow easier for us to get hold of auxv data early on.\n\nChange-Id: I6314224257c736547aac2e2a650e66f2ea53bef5\n"
    }
  ]
}
