)]}'
{
  "log": [
    {
      "commit": "d41c355af3cb2621136ee2e5e87d6c813751cacd",
      "tree": "25512f449b3da4c5fbcea9d2f3b5ef1504d030ba",
      "parents": [
        "910f91a8f992723cf55f90bee023dc54baaeb6d0",
        "18c0bb69855269a7ad6c4cedafdc324526e1a3f4"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "android-test-infra-autosubmit@system.gserviceaccount.com",
        "time": "Wed Sep 11 21:15:33 2024 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Sep 11 21:15:33 2024 +0000"
      },
      "message": "Merge \"Remove versioner.\" into main"
    },
    {
      "commit": "ae3c6f7737a9e8a52099fabb790a6663c9d5fbce",
      "tree": "1d2b0d3b6b43c4322859bacb8c18dfb2b333d035",
      "parents": [
        "aca0fc6532de632da2c11a85e0aafedd96bb6406"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Sep 04 13:58:56 2024 +0000"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Sep 04 13:58:56 2024 +0000"
      },
      "message": "Improve the fdtrack documentation.\n\nSpecifically, talk about the frameworks side of things too.\n\nBug: http://b/362165173\nChange-Id: If2f19a18ad06cad1a16afff30abc3f6796993576\n"
    },
    {
      "commit": "18c0bb69855269a7ad6c4cedafdc324526e1a3f4",
      "tree": "e7e8133c7aafb13623b484d9004468ddbe244562",
      "parents": [
        "4f50fd24bc3df50313b51322707505dfd7f252ba"
      ],
      "author": {
        "name": "Dan Albert",
        "email": "danalbert@google.com",
        "time": "Wed Aug 28 20:12:14 2024 +0000"
      },
      "committer": {
        "name": "Dan Albert",
        "email": "danalbert@google.com",
        "time": "Wed Aug 28 20:13:17 2024 +0000"
      },
      "message": "Remove versioner.\n\njmgao\u0027s finally no longer a noogler.\n\nBug: None\nTest: treehugger\nChange-Id: I6a7398cd7ca99bf5cf65c8f96b229d402d754407\n"
    },
    {
      "commit": "6f266ee8f036d8d843480a0fcba630cfc83657dd",
      "tree": "05f0aab005375e1b4dd074bf1f41aa875d7a201e",
      "parents": [
        "36a37f072916dd2fae6b1f6f76786a9881d70dc5",
        "219e6025be55afd9661d79407b5ebeb391d7d704"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Aug 28 12:13:44 2024 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Aug 28 12:13:44 2024 +0000"
      },
      "message": "Merge \"\u003csys/stat.h\u003e: add lchmod().\" into main"
    },
    {
      "commit": "219e6025be55afd9661d79407b5ebeb391d7d704",
      "tree": "bcbd4aa595d32e7a4e8dafbbbc445250c04338cc",
      "parents": [
        "3b3786a30e7faacc0fa3ff50cc56df7d34d87122"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Aug 27 19:12:08 2024 +0000"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Aug 27 19:12:08 2024 +0000"
      },
      "message": "\u003csys/stat.h\u003e: add lchmod().\n\nBug: http://b/361334945\nChange-Id: I6a76db7bd2f657ad9b058c2672bf7a4e687017f9\n"
    },
    {
      "commit": "b115a8c76bdefe60feb36b56e5d1537906c2c6bb",
      "tree": "bc2827cb2a565d793baf23a107a00874502874ff",
      "parents": [
        "6186885d77a73b8146fcddbd9e87e122af1b8475"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Aug 23 14:10:11 2024 +0000"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Aug 23 14:10:11 2024 +0000"
      },
      "message": "status.md: actually write down what\u0027s wrong with wordexp().\n\n(And also that there\u0027s nothing deeply wrong with \u003caio.h\u003e.)\n\nChange-Id: I3267c6d5ee55bccf97890f6f057f8306f350b20f\n"
    },
    {
      "commit": "a3fa4696cf3b45cf6dcdd7e55f4d5f293d7f1b5e",
      "tree": "742aee43f7e57a137cf715af215ee3552779e024",
      "parents": [
        "dcc7c9c1a7ff28af9db71964ad0f9f5fe61c3c73"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Aug 14 20:53:00 2024 +0000"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Aug 14 20:53:00 2024 +0000"
      },
      "message": "Update the docs to mention mseal().\n\nChange-Id: I7f98a9a94a4689db2f12fbde7770425052cab6dd\n"
    },
    {
      "commit": "07d520945e53ba92a336a123dfeccad3a7b7340d",
      "tree": "77e55618f6b9996da695098731f65eb479abea4e",
      "parents": [
        "18c76a005c25c71ec8b4fd59fe94d7f05fd58cf6"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Aug 09 13:47:14 2024 +0000"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Aug 12 20:06:23 2024 +0000"
      },
      "message": "Add sig2str()/str2sig() from POSIX Issue 8.\n\n(cherry picked from https://googleplex-android-review.googlesource.com/q/commit:55c1e379790545fff6239aefcb1c51d0a6463fbf)\n\nMerged-In: I3b2c1601bd667af6b8f736e03a6e94035b812ff7\nChange-Id: I3b2c1601bd667af6b8f736e03a6e94035b812ff7\n"
    },
    {
      "commit": "5bae57212c86af74d786326888371d0997ca4aaa",
      "tree": "7fe0607edb0e3a9a64326f0a420ba487070065a1",
      "parents": [
        "23adf82ad25ddcd6a56974d42275a818c5b7ba88"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Jul 30 12:47:33 2024 -0400"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Jul 30 13:40:12 2024 -0400"
      },
      "message": "Add POSIX qsort_r().\n\nPOSIX added this to issue 8, based on https://www.austingroupbugs.net/view.php?id\u003d900.\n\nThis is an incompatibility with iOS, which is one reason why I hadn\u0027t\nadded this previously, but FreeBSD (upstream for both Android and iOS in\nthis case) already moved off their different qsort_r(), so it\u0027s possible\nApple will, and in the meantime, at least I now have the defense of\n\"POSIX says...\".\n\nChange-Id: Iab048a3a931010c3276a88d25eb56b38d4d608b1\n"
    },
    {
      "commit": "4fda1bc10e16cd5bc8ba18791d65498468189ded",
      "tree": "20c72a89ccf2c2baa0c6ccbb8898018709f61a8c",
      "parents": [
        "f4ef9a53deb5ecaf70f91ccae30a75f6464aad29"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Jul 10 18:55:15 2024 +0000"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Jul 10 18:55:15 2024 +0000"
      },
      "message": "Update the \"number of functions in libc\" table.\n\nTalking about whether libc.a is any use any more made me wonder to what extent we\u0027ve plateaued here.\n\nChange-Id: I247b0e6f54c9386f9b4736762d90f2ac03f5c7fe\n"
    },
    {
      "commit": "0782929faa7205a2adf4ae30a98188dcc7916ee6",
      "tree": "6db51e0361dd4635941d8431b3416662bef52038",
      "parents": [
        "883de33d4269a9626c7e1de4782c449efff20b14",
        "e9d77e46646190e2cf060b459d30435d2141935e"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Jun 25 11:13:14 2024 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Jun 25 11:13:14 2024 +0000"
      },
      "message": "Merge \"els-tls.md: stop talking about ELF TLS as future work.\" into main"
    },
    {
      "commit": "883de33d4269a9626c7e1de4782c449efff20b14",
      "tree": "92bad94d65c52bbfa037cbfc273192b1a15458cf",
      "parents": [
        "a86249b6f247df48348eda860812186ccc926fac",
        "12a584dd7b36bd85c4ee05b305b1a8c4a07071aa"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "android-test-infra-autosubmit@system.gserviceaccount.com",
        "time": "Mon Jun 24 23:01:08 2024 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Jun 24 23:01:08 2024 +0000"
      },
      "message": "Merge \"fdsan docs: be more consistent in using API levels.\" into main"
    },
    {
      "commit": "e9d77e46646190e2cf060b459d30435d2141935e",
      "tree": "f77ad31f014f677bdb4200f90af1a15f17422369",
      "parents": [
        "a86249b6f247df48348eda860812186ccc926fac"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Jun 24 21:50:06 2024 +0000"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Jun 24 21:50:06 2024 +0000"
      },
      "message": "els-tls.md: stop talking about ELF TLS as future work.\n\nAlso link to the TL;DR that _app_ developers will likely want to read instead.\n\nChange-Id: I72ef9ac694e190addd1687e06e0818d25edd5946\n"
    },
    {
      "commit": "7a8f48f87bdd5ffc6a5ad87903d5d1eb49c93342",
      "tree": "be70ff241269cce0ba88981878bc01e09490041b",
      "parents": [
        "38d1acc6afe9bc7db0e23180df1d7cb2ce2558eb",
        "3db37fd4d03f8d83a7d6a2449685f3c117bb1bd1"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "android-test-infra-autosubmit@system.gserviceaccount.com",
        "time": "Fri Jun 21 22:04:12 2024 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Jun 21 22:04:12 2024 +0000"
      },
      "message": "Merge \"elf-tls.md: remove useless links.\" into main"
    },
    {
      "commit": "d71382b9c7341fff9d2dd68e44ccf436074f63ef",
      "tree": "bada6fc692dc3a6d4f46b3e9f8fd00418e962bbf",
      "parents": [
        "1009c5d4df0978847e71f80ba5b30acdd507a2cf"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Jun 21 20:34:04 2024 +0000"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Jun 21 20:34:04 2024 +0000"
      },
      "message": "status.md: say when ELF TLS was added.\n\nChange-Id: Ic3f1844d1d90bf6befc3f9f34fcd68794e206d90\n"
    },
    {
      "commit": "3db37fd4d03f8d83a7d6a2449685f3c117bb1bd1",
      "tree": "986ea19b45acc10890e03905003dc6fdc98ed72b",
      "parents": [
        "b8e7b3e77b3478ef06c8a30ad66c20ff7532df47"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Jun 21 17:37:33 2024 +0000"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Jun 21 17:37:33 2024 +0000"
      },
      "message": "elf-tls.md: remove useless links.\n\nOnly Google employees can access these links, and they don\u0027t point to anything useful that isn\u0027t here anyway. No-one needs to read the one-pager feature request for a feature that shipped years ago.\n\nChange-Id: Icd18df2a6911787978a15920e5e7f10e6ec1b96e\n"
    },
    {
      "commit": "12a584dd7b36bd85c4ee05b305b1a8c4a07071aa",
      "tree": "abc6d91353eb644cbb7414988dd70e18710c1bc0",
      "parents": [
        "2483d93e0547bdd3f60f37a0269f3550edab95ea"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Jun 18 15:41:57 2024 +0000"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Jun 18 15:41:57 2024 +0000"
      },
      "message": "fdsan docs: be more consistent in using API levels.\n\nChange-Id: I4934c922cdd57eecf5a30be7df849a8446e91485\n"
    },
    {
      "commit": "ecaa192929e5fcb78e4f5436393fa6f02036bd0f",
      "tree": "f7b4345bed50fe0e71561af9005d14b50944e85d",
      "parents": [
        "be241d1d6b1bd5887ea58421d4fe36c6318abcba"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Jun 04 18:20:05 2024 +0000"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Jun 04 18:20:05 2024 +0000"
      },
      "message": "Add a README.md to docs/, as a guide to what we have available.\n\nI was actually here to add some new documentation, but realized there wasn\u0027t really a good place to put it...\n\nChange-Id: I8a2fc93e61a89e87aa53dd0beb9dfcc6561687ca\n"
    },
    {
      "commit": "10a7e2799d167f2410313a3a72e5f5737707d6bb",
      "tree": "5c5c7e4f4dfc84913b5c7312786b151f3d45a3f5",
      "parents": [
        "4d9af810fd175712f57ebc790654647b759ba82e"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu May 02 19:13:37 2024 +0000"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu May 02 19:13:37 2024 +0000"
      },
      "message": "Update the _FORTIFY_SOURCE documentation.\n\nChange-Id: Icc73673b792dbc1a20ed70561a461e1fc47b2d6b\n"
    },
    {
      "commit": "a459c0b0668aba7baf3f8901de960197fa79faa8",
      "tree": "b492fd225cf9993f15ec51aa6bb63e2c2107acdb",
      "parents": [
        "5a42460cc67308b6b791d882f003ae722666806d"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Mar 27 02:16:49 2024 +0000"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Mar 27 02:16:49 2024 +0000"
      },
      "message": "Update status.md.\n\nWe were still using \"Android O\" in developer-facing documentation, we\u0027d forgotten to document the destroyed pthread_mutex_t behavior change, and we\u0027d forgotten to document the existence of _Fork() and \u003candroid/crash_detail.h\u003e.\n\nChange-Id: Ie2c94a1956b7252472116cacc90f38fa4e2dd229\n"
    },
    {
      "commit": "8880cab65cd5ab2c3aca2249f41fd34d75b7d5de",
      "tree": "abb1607f4e989038ab2e5d84e37a9f15366c8f03",
      "parents": [
        "d90d990468844b7cd2e88f2ed389f7d411ee8d5f"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Feb 13 00:43:24 2024 +0000"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Feb 13 00:43:24 2024 +0000"
      },
      "message": "Admit to another LP32 bug.\n\nBut explain why we\u0027re not going to bother fixing it.\n\nTest: treehugger\nChange-Id: Ib7358fceff10f80b9e359ea3f4d088c64d440021\n"
    },
    {
      "commit": "9c06d16ca3d230059ccf3b7f270574bc5e8fcfcb",
      "tree": "9051bc0a5c2d7b110be37d81f041427c5b79f8fb",
      "parents": [
        "ae3168308606f837cb8470e641a265d2040ad016"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Oct 04 23:36:14 2023 +0000"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Oct 04 23:36:48 2023 +0000"
      },
      "message": "s/master/main/\n\nTest: treehugger\nChange-Id: I2c975b2f5f92f23c7357b6f7e785578504298cc6\n"
    },
    {
      "commit": "2109f12c3b04d4023030ad12e17197c4a1c843ac",
      "tree": "ecf265a5e206f71058e114d3a575e24a1ce5f9da",
      "parents": [
        "631dfbb8ad2edd23e008c820f499152ac0d16caa"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Sep 21 18:32:39 2023 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Sep 27 11:21:12 2023 -0700"
      },
      "message": "Add strerrordesc_np() and strerrorname_np().\n\nstrerrordesc_np() isn\u0027t very useful (being just another name for\nstrerror()), but strerrorname_np() lets you get \"ENOSYS\" for ENOSYS,\nwhich will make some of our test assertion messages clearer when we\nswitch over from strerror().\n\nThis also adds `%#m` formatting to all the relevant functions.\n\nTest: treehugger\nChange-Id: Icfe07a39a307d591c3f4f2a09d008dc021643062\n"
    },
    {
      "commit": "906d7d41e41b1130129eaceff3088578a1db22d7",
      "tree": "6425a03921ad569b2c6265b621172cc0e75fd8f8",
      "parents": [
        "4d3903eab966db68e3faf603bac74d5031839b2d",
        "4c62e59fe6b1de5a72d818ea3e8712f70b65ef90"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Sep 05 21:48:08 2023 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Sep 05 21:48:08 2023 +0000"
      },
      "message": "Merge \"Add epoll_pwait2().\" into main"
    },
    {
      "commit": "647472db9b0691518a9d346f707571f3fa8471ab",
      "tree": "95ae42edb2b0455a8a6425dee6471bcecf92e2d1",
      "parents": [
        "97a0587f20a6b88571b8c71165c866e0fff44051"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Aug 28 16:55:07 2023 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Aug 29 09:33:04 2023 -0700"
      },
      "message": "\u003ctermios.h\u003e: add two new POSIX functions.\n\nmusl already added tcgetwinsize() and tcsetwinsize(), but I didn\u0027t\nnotice.\n\nTrivial single-line inlines added to a header that\u0027s already written\nthat way.\n\nTest: treehugger\nChange-Id: Iac95ea6a89f3872025c512f7e61987b81d0aafa7\n"
    },
    {
      "commit": "4c62e59fe6b1de5a72d818ea3e8712f70b65ef90",
      "tree": "a329b91b93f971b634deb695faab1bddc8ac775c",
      "parents": [
        "0398f8ab3a87a70f31ee664fcca293e3e3031db8"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Jul 13 15:45:33 2023 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Aug 23 15:59:12 2023 -0700"
      },
      "message": "Add epoll_pwait2().\n\nI\u0027ve also added doc comments for everything in \u003csys/epoll.h\u003e.\n\nI\u0027ve also broken up the old \"smoke\" test (which was taking 2s on my\nriscv64 qemu) to keep the total runtime for all the tests down to 200ms.\n\nTest: treehugger\nChange-Id: Icd939af51886fdf21432653a07373c1a0f26e422\n"
    },
    {
      "commit": "838dbacbfdd787de9ad24a6ee793366cddb03b5f",
      "tree": "6c671ab9b201607d7c8a8343e3c502b9735cae4a",
      "parents": [
        "e722c756a5d2c288d6dcc210c4e943094074f8f9"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Aug 22 14:07:48 2023 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Aug 22 14:25:01 2023 -0700"
      },
      "message": "linker: add LD_SHOW_AUXV support.\n\nYes, `od -t d8 /proc/self/auxv` is clever:\n```\n$ adb shell od -t d8 /proc/self/auxv\n0000000                      33            488593047552\n0000020                      51                    4720\n0000040                      16                 1155071\n0000060                       6                    4096\n0000100                      17                     100\n0000120                       3            375971917888\n0000140                       4                      56\n0000160                       5                      12\n0000200                       7            488593051648\n0000220                       8                       0\n0000240                       9            375972184064\n0000260                      11                       0\n0000300                      12                       0\n0000320                      13                       0\n0000340                      14                       0\n0000360                      23                       0\n0000400                      25            549220780840\n0000420                      26                       0\n0000440                      31            549220786153\n0000460                      15            549220780856\n0000500                       0                       0\n0000520\n$\n```\nBut this is a lot easier to read:\n```\n$ adb shell LD_SHOW_AUXV\u003d1 date\nAT_SYSINFO_EHDR      0x7065010000\nAT_MINSIGSTKSZ       4720\nAT_HWCAP             0b100011001111111111111\nAT_PAGESZ            4096\nAT_CLKTCK            100\nAT_PHDR              0x5c79d60040\nAT_PHENT             56\nAT_PHNUM             12\nAT_BASE              0x7065011000\nAT_FLAGS             0\nAT_ENTRY             0x5c79da1000\nAT_UID               0\nAT_EUID              0\nAT_GID               0\nAT_EGID              0\nAT_SECURE            0\nAT_RANDOM            0x7ff814eb98\nAT_HWCAP2            0\nAT_EXECFN            \"/system/bin/date\"\nAT_PLATFORM          \"aarch64\"\nTue Aug 22 20:43:22 GMT 2023\n```\n\nTest: adb shell LD_SHOW_AUXV\u003d1 date\nChange-Id: I51c4e8cbb799eb1dc360c9417cc6f82bebdcda73\n"
    },
    {
      "commit": "f3d6b44e2ba00e61dd1349272a741d395fbf1e96",
      "tree": "fa077b68378ea5857e707734c80ec4bb3354add8",
      "parents": [
        "6e601911f1431810bf6f96d0b09c9387af052ead"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Jul 27 16:53:30 2023 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Jul 28 09:29:06 2023 -0700"
      },
      "message": "riscv64: add \u003csys/hwprobe.h\u003e.\n\nThis is source compatible with the current proposal for glibc.\n\nBug: https://github.com/google/android-riscv64/issues/27\nTest: treehugger\nChange-Id: I428777e4eac1fe643d442a93a4b3ad1fdf0ffd97\n"
    },
    {
      "commit": "74d9765be96ab52100f8b2bff173ac17abf6ef1e",
      "tree": "4986f3e33b27ca55d051a8a65ced6fb76bc63ebb",
      "parents": [
        "0b2996f14490f9a10e03674690dfe5841cc83f2a"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Jul 12 16:30:55 2023 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Jul 12 16:30:55 2023 -0700"
      },
      "message": "Add __riscv_flush_icache() to \u003csys/cachectl.h\u003e.\n\nThe obsolete mips header rides again!\n\nThe most interesting part of this change is that I\u0027ve removed the hack\nthat meant that all system call wrappers starting with `__` defaulted to\nbeing hidden symbols. That\u0027s no longer useful given our linker scripts,\nand it actively got in the way here because the public libc symbol\nactually starts with `__` in glibc, and it would be weird and annoying\nfor developers if we chose a different name.\n\nTest: strace\nChange-Id: I230479787895e8e34f566ade36346a8241eea998\n"
    },
    {
      "commit": "31fc69f67fc49b1a08f5561ae62d098106da6565",
      "tree": "9f784d9239cae9d4dea25a6d7ee2e36df19ba07d",
      "parents": [
        "a43db276fdfa997e54b4edfda848d071c039ea92"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Jun 20 15:36:11 2023 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Jun 22 09:51:01 2023 -0700"
      },
      "message": "Fix tzalloc(nullptr) and add a test.\n\nThis works (by reading /etc/localtime) on NetBSD, but not on Android\nsince we have no such file. Fix that by using our equivalent system\nproperty instead.\n\nAlso s/time zone/timezone/ in documentation and comments. We\u0027ve always\nbeen inconsistent about this (as is upstream in code comments and\ndocumentation) but it seems especially odd now we expose a _type_ that\nspells it \"timezone\" to talk of \"time zone\" even as we\u0027re describing\nthat type and its associated functions.\n\nBug: https://github.com/chronotope/chrono/issues/499\nTest: treehugger\nChange-Id: I142995a3ab4deff1073a0aa9e63ce8eac850b93d\n"
    },
    {
      "commit": "2bd4316bd6827497ee1bf3467b70ad85ef684ceb",
      "tree": "071e0af4b999d9d13702fa7029b3825d7912d86a",
      "parents": [
        "5c6961ff6d0fde3dab0236b0e56be1638b030e52"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Jun 15 13:17:08 2023 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Jun 16 08:10:47 2023 -0700"
      },
      "message": "Expose tzalloc()/localtime_rz()/mktime_z()/tzfree().\n\n* Rationale\n\nThe question often comes up of how to use multiple time zones in C code.\nIf you\u0027re single-threaded, you can just use setenv() to manipulate $TZ.\ntoybox does this, for example. But that\u0027s not thread-safe in two\ndistinct ways: firstly, getenv() is not thread-safe with respect to\nmodifications to the environment (and between the way putenv() is\nspecified and the existence of environ, it\u0027s not obvious how to fully\nfix that), and secondly the _caller_ needs to ensure that no other\nthreads are using tzset() or any function that behaves \"as if\" tzset()\nwas called (which is neither easy to determine nor easy to ensure).\n\nThis isn\u0027t a bigger problem because most of the time the right answer\nis to stop pretending that libc is at all suitable for any i18n, and\nswitch to icu4c instead. (The NDK icu4c headers do not include ucal_*,\nso this is not a realistic option for most applications.)\n\nBut what if you\u0027re somewhere in between? Like the rust chrono library,\nfor example? What then?\n\nCurrently their \"least worst\" option is to reinvent the entire wheel and\nread our tzdata files. Which isn\u0027t a great solution for anyone, for\nobvious maintainability reasons.\n\nSo it\u0027s probably time we broke the catch-22 here and joined NetBSD in\noffering a less broken API than standard C has for the last 40 years.\nSure, any would-be caller will have to have a separate \"is this\nAndroid?\" and even \"is this API level \u003e\u003d 35?\" path, but that will fix\nitself sometime in the 2030s when developers can just assume \"yes, it\nis\", whereas if we keep putting off exposing anything, this problem\nnever gets solved.\n\n(No-one\u0027s bothered to try to implement the std::chrono::time_zone\nfunctionality in libc++ yet, but they\u0027ll face a similar problem if/when\nthey do.)\n\n* Implementation\n\nThe good news is that tzcode already implements these functions, so\nthere\u0027s relatively little here.\n\nI\u0027ve chosen not to expose `struct state` because `struct __timezone_t`\nmakes for clearer error messages, given that compiler diagnostics will\nshow the underlying type name (`struct __timezone_t*`) rather than the\ntypedef name (`timezone_t`) that\u0027s used in calling code.\n\nI\u0027ve moved us over to FreeBSD\u0027s wcsftime() rather than keep the OpenBSD\none building --- I\u0027ve long wanted to only have one implementation here,\nand FreeBSD is already doing the \"convert back and forth, calling the\nnon-wide function in the middle\" dance that I\u0027d hoped to get round to\ndoing myself someday. This should mean that our strftime() and\nwcsftime() behaviors can\u0027t easily diverge in future, plus macOS/iOS are\nmostly FreeBSD, so any bugs will likely be interoperable with the other\nmajor mobile operating system, so there\u0027s something nice for everyone\nthere!\n\nThe FreeBSD wcsftime() implementation includes a wcsftime_l()\nimplementation, so that\u0027s one stub we can remove. The flip side of that\nis that it uses mbsrtowcs_l() and wcsrtombs_l() which we didn\u0027t\npreviously have. So expose those as aliases of mbsrtowcs() and\nwcsrtombs().\n\nBug: https://github.com/chronotope/chrono/issues/499\nTest: treehugger\nChange-Id: Iee1b9d763ead15eef3d2c33666b3403b68940c3c\n"
    },
    {
      "commit": "2b9ae05bee932ea406ffbf3aed4a0c6b9edf6f5b",
      "tree": "f1668972c5bdd401a94803d8c6ce16289857b3fa",
      "parents": [
        "e20c5fa4ac785091a73ca0dc5a7e0d69ef487b59"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu May 18 17:10:37 2023 +0000"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu May 18 17:10:37 2023 +0000"
      },
      "message": "Clarify the defines documentation further.\n\nAt least one person wasn\u0027t entirely convinced by our existing riscv64\ndocumentation, and there was an error in the 32 vs 64 section.\n\nTest: N/A\nChange-Id: Iaa08b8f4b5a5506a4ade15f81e17325185036a07\n"
    },
    {
      "commit": "a6a9d5757e380647a63eb83b5ffd7b4a5ef470f1",
      "tree": "79c30c0aadf7d8b63a39c9b858e0216cd0b324d5",
      "parents": [
        "aaaf46837009d228531c78836823e5c42e15691b"
      ],
      "author": {
        "name": "Wang Chen",
        "email": "wangchen20@iscas.ac.cn",
        "time": "Mon May 08 16:08:35 2023 +0800"
      },
      "committer": {
        "name": "Wang Chen",
        "email": "wangchen20@iscas.ac.cn",
        "time": "Mon May 08 16:55:21 2023 +0800"
      },
      "message": "doc: add desc for riscv together with other ARCHs\n\nTest: doc changes, no test required.\n\nChange-Id: I30311d4edc12e623567b5622a65339fb61c9a5f3\nSigned-off-by: Wang Chen \u003cwangchen20@iscas.ac.cn\u003e\n"
    },
    {
      "commit": "52541eea33fd8622d191b9ef0451c644ec22f7c3",
      "tree": "b39b6e0946f8c8d034a715a6456de9360b63704e",
      "parents": [
        "56f5c044911268b7bb0d669948e4381039328b86"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Apr 24 17:04:49 2023 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Apr 25 17:29:22 2023 -0700"
      },
      "message": "C23: add timespec_getres() and the new TIME_* constants.\n\nNothing to see here --- you\u0027ll want to keep using POSIX clock_gettime()\nand clock_getres() instead. But portable code might use this eventually,\nand it\u0027s trivial, so let\u0027s add it anyway.\n\n(The whole \"zero as an error return\" precluding the direct use of\nLinux\u0027s CLOCK_ constants is what really makes this a terrible API ---\nwe\u0027re going to have to add explicit translation any time they add a\nnew base.)\n\nTest: treehugger\nChange-Id: Iddb6cbe67b67b2b10fdd8b5ee654896d23deee47\n"
    },
    {
      "commit": "599d12d6519bdb2b271400a626de1188fea14919",
      "tree": "787e17fce7baef9e4bd725b7247efcf5d8ce952c",
      "parents": [
        "be39cd5ebb76ad91984122b09edcbb1c865308cc"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Apr 21 15:31:16 2023 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Apr 21 15:31:16 2023 -0700"
      },
      "message": "Document a couple of new-in-U features.\n\nTest: N/A\nChange-Id: I78acd8d772aacbb3b88649d78b759cffabd94e8f\n"
    },
    {
      "commit": "7b5cc4b251b280eede6419a79f939f0a8de43f76",
      "tree": "d9e8ad2b5de2c954b2f407d1f28653cc0e368a7c",
      "parents": [
        "6296071782cfa30722267785a7d2bc7b170bdc60",
        "462ca8b3148c8034cfee3a526033bb14c068102b"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Apr 06 17:51:45 2023 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Apr 06 17:51:45 2023 +0000"
      },
      "message": "Merge \"\u003cspawn.h\u003e: add posix_spawn_file_actions_addchdir_np()/posix_spawn_file_actions_addfchdir_np().\""
    },
    {
      "commit": "462ca8b3148c8034cfee3a526033bb14c068102b",
      "tree": "76defcd676fa4c49fdc5af90bd768fd077c1c12f",
      "parents": [
        "97c690226971eb4c88e6f2de1e139fde91a65b99"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Apr 04 13:33:28 2023 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Apr 04 17:28:39 2023 -0700"
      },
      "message": "\u003cspawn.h\u003e: add posix_spawn_file_actions_addchdir_np()/posix_spawn_file_actions_addfchdir_np().\n\nThe recent header nullability additions and the corresponding source\ncleanup made me notice that we\u0027re missing a couple of actions that most\nof the other implementations have. They\u0027ve also been added to the _next_\nrevision of POSIX, unchanged except for the removal of the `_np` suffix.\n\nThey\u0027re trivial to implement, the testing is quite simple too, and\nif they\u0027re going to be in POSIX soon, having them accessible in older\nversions of Android via __RENAME() seems useful. (No-one else has shipped\nthe POSIX names yet.)\n\nBug: http://b/152414297\nTest: treehugger\nChange-Id: I0d2a1e47fbd2e826cff9c45038928aa1b6fcce59\n"
    },
    {
      "commit": "b692ecb913f7d12aa0f1f98ab7d08cfb84225d6e",
      "tree": "a8c1c2ddbdf1bbdc96c8b0f3df91652462ecb519",
      "parents": [
        "e744d817877d60d0b86c5c0e6168faf19d8c7a3f"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Apr 03 14:29:24 2023 +0000"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Apr 03 14:31:37 2023 +0000"
      },
      "message": "ELS TLS documentation: s/module/module_id/.\n\nThe field is actually called `module_id` in the code.\n\nTest: N/A\nChange-Id: I10f5ce07cb67f7f338036c49e0008c3dce2db0bd\n"
    },
    {
      "commit": "046fe15fb5ec63e7fa4a0fb1f874caa1c1350e43",
      "tree": "02bc93bf5f0d30037ef38c59393ce25cb1b2c7b5",
      "parents": [
        "8262ca1dd866050e6cf43b37952b6034820bb73d"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Dec 02 20:15:42 2022 +0000"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Dec 02 20:15:42 2022 +0000"
      },
      "message": "Explicitly mention bionic\u0027s single C.UTF-8 locale.\n\nTest: treehugger\nChange-Id: Iea45c0211d3476579f9778dfc7a0111f2e54a983\n"
    },
    {
      "commit": "82be76b5a2c069c6d5039f28c63831a639163dfb",
      "tree": "7100308d179bff6ae5eb90359e3cb9a3d5215ec7",
      "parents": [
        "72f572185f42d1e591d6ba88c5b9b19155fa0bb9"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Sep 22 23:47:42 2022 +0000"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Sep 22 23:47:42 2022 +0000"
      },
      "message": "Add __freadahead.\n\nAt the time I added \u003cstdio_ext.h\u003e, I just added what was on the man\npage (which matched glibc), not realizing that musl and glibc had\nslightly different functionality in their headers.\n\nThe toybox maintainer came up with a legitimate use case for this, for\nwhich there is no portable workaround, so I\u0027m adding it here. I\u0027m not\nadding the other functions that are in musl but not glibc for lack of a\nmotivating use case.\n\nBug: http://lists.landley.net/htdig.cgi/toybox-landley.net/2022-April/020864.html\nTest: treehugger\nChange-Id: I073baa86ff0271064d4e2f20a584d38787ead6b0\n"
    },
    {
      "commit": "f9fac36f15d8f1c5f0248511d75fa16c6197469c",
      "tree": "4be90573ed9755a19bc61c21444aac562b2707e5",
      "parents": [
        "bf75d08b13072a96e3eb130a3336968745bf0773",
        "0d64243407e13299c7aeea9e5d42f8c15174ec1b"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Aug 11 22:01:28 2022 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Aug 11 22:01:28 2022 +0000"
      },
      "message": "Merge \"Add C23\u0027s memset_explicit().\""
    },
    {
      "commit": "1f462dec34a5358c3e63d6a8e986a82248338aed",
      "tree": "2f1534308da43c4e91b3c96e0d9d556efec547bd",
      "parents": [
        "cede011a2c7d9d1d3679f05fe0270b2bfea558bc"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Aug 05 22:51:05 2022 +0000"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Aug 11 00:25:08 2022 +0000"
      },
      "message": "Add %b and %B support to the scanf/wscanf and strto*/wcsto* families.\n\nComing to C23 via WG14 N2630.\n\nThis one is a little interesting, because it actually changes existing\nbehavior. Previously \"0b101\" would be parsed as \"0\", \"b\", \"101\" by these\nfunctions. I\u0027m led to believe that glibc plans to actually have separate\nversions of these functions for C23 and pre-C23, so callers can have the\nbehavior they (implicitly) specify by virtue of which -std\u003d they compile\nwith. Android has never really done anything like that, and I\u0027m pretty\nsure app developers have more than enough to worry about with API levels\nwithout having to deal with the cartesian product of API level and C\nstandard.\n\nTherefore, my plan A is \"if you\u0027re running on Android \u003e\u003d U, you get C23\nbehavior\". My plan B in the (I think unlikely) event that that actually\ncauses trouble for anyone is \"if you\u0027re _targeting_ Android \u003e\u003d U, you\nget C23 behavior\". I don\u0027t think we\u0027d actually want to have two versions\nof each of these functions under any circumstances --- that seems by far\nthe most confusing option.\n\nTest: treehugger\nChange-Id: I0bbb30315d3fabd306905ad1484361f5d8745935\n"
    },
    {
      "commit": "0d64243407e13299c7aeea9e5d42f8c15174ec1b",
      "tree": "a1d62d460ce5b605ba24ce53ac4c6f45eb5f65f3",
      "parents": [
        "cede011a2c7d9d1d3679f05fe0270b2bfea558bc"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Aug 10 23:35:03 2022 +0000"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Aug 10 23:36:16 2022 +0000"
      },
      "message": "Add C23\u0027s memset_explicit().\n\nhttps://open-std.org/jtc1/sc22/wg14/www/docs/n2897.htm\n\nTest: treehugger\nChange-Id: Ia0cfc72bdf3c22eda6a4fc9adaa4c0ca0ff9a7c8\n"
    },
    {
      "commit": "b813a6a6be2f160c81c8c0acd2f44d8c462181b8",
      "tree": "8f4714a98db0b8063171c6b7063aa85dee3745a4",
      "parents": [
        "27b3ad2c7805a330153450be6abd03aa41654f00"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Aug 01 22:18:40 2022 +0000"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Aug 01 22:18:40 2022 +0000"
      },
      "message": "Add %b and %B support to the printf/wprintf family.\n\nComing to C23 via WG14 N2630, and already in glibc.\n\nWe\u0027re still missing clang support for %b and %B in format string checking,\nbut it\u0027s probably easier to fix this first. (Apparently GCC already has\nsupport because of glibc.)\n\nTest: treehugger\nChange-Id: Ie8bfe4630d00c50e1d047d6756a7f799205356db\n"
    },
    {
      "commit": "a39ac04033fe3bc9faa49eba16a7e80e2be4ed77",
      "tree": "d7bedde6a8bed40d09533b0029ff641674f21c4a",
      "parents": [
        "a8cb33ff0733823e327ddcb609165e4431e20e72"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Jun 14 17:23:35 2022 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Jun 14 17:23:35 2022 -0700"
      },
      "message": "Document another obsolete POSIX function.\n\nualarm(3) was removed from POSIX in 2008, but somehow wasn\u0027t included in\nthe list of such functions (perhaps because it\u0027s not inherently useless\nlike a lot of the other stuff is; it just has a better replacement).\n\nTest: N/A\nChange-Id: I0347d3e7f1357bc2acb870f74e9084872c28ca3e\n"
    },
    {
      "commit": "3b51605a798fa02283a3d5dbd4e9ff5b8fb85818",
      "tree": "a7c95d5eb58032e0c99f076a1b300b5ed919be03",
      "parents": [
        "4ebdeebef74ffa09fe8176f73b32d5a21f4be4ae"
      ],
      "author": {
        "name": "George Burgess IV",
        "email": "gbiv@google.com",
        "time": "Tue Jun 07 13:21:59 2022 -0700"
      },
      "committer": {
        "name": "George Burgess IV",
        "email": "gbiv@google.com",
        "time": "Tue Jun 07 13:28:51 2022 -0700"
      },
      "message": "docs: add a clang_fortify_anatomy doc\n\nThis is mostly copy-pasted from go/clang-fortify-anatomy. Since it\noffers extensive documentation on how FORTIFY works in Bionic, having it\nalso live within Bionic seems quite helpful.\n\nBug: 235150687\nFixes: 235150687\nTest: None\nChange-Id: I20145a5ba3155b1c7b3977f9b688320a7fda4ea2\n"
    },
    {
      "commit": "02335c77387aef981c96048c038b86e65bf7ab33",
      "tree": "7f3bba0d41402a8461a12652dbe3a107e398a22d",
      "parents": [
        "ab74e3260a4521cf8040de6aeb9356b86e9aacdf"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Feb 16 14:41:09 2022 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Feb 16 14:41:09 2022 -0800"
      },
      "message": "T is API level 33, not 32.\n\nThe actual constant was fixed, but the docs weren\u0027t.\n\nTest: treehugger\nChange-Id: Id76d38cd8b17be02ddece8bbb2695f5d172fee9b\n"
    },
    {
      "commit": "57f17dea206bc83486c864172bfe21ce67ef3486",
      "tree": "243abab6ff441e690210acbfcce60ab4478c4f47",
      "parents": [
        "e62be7eea5cdf40e5f4417173f1acf8ce98bf0a0"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Jan 14 16:26:25 2022 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Jan 14 16:26:25 2022 -0800"
      },
      "message": "Update the status for S and T.\n\nTest: treehugger\nChange-Id: I21c4374d7e55dbbb2294cef5cc7bf50b7fe1b549\n"
    },
    {
      "commit": "a73179fe305b153bdfa2446897f0243f61f41e9c",
      "tree": "8b207a338acd02305c5bda305c817f6bba7da7d4",
      "parents": [
        "6769ccbe88da22cee0c68fa2981837a1faaa73d6",
        "38be11e88c32773afb5261af02c9a4f82723c1a9"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Dec 14 00:25:54 2021 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Dec 14 00:25:54 2021 +0000"
      },
      "message": "Merge \"Add some documentation about EINTR.\""
    },
    {
      "commit": "38be11e88c32773afb5261af02c9a4f82723c1a9",
      "tree": "5b6933cb01e49fa098e21010d4aa7ceb15df11d3",
      "parents": [
        "ad12582726766526a6bf0d999be2da240c824ffc"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Dec 10 14:01:49 2021 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Dec 13 10:16:57 2021 -0800"
      },
      "message": "Add some documentation about EINTR.\n\nIt\u0027s a common cause of confusion, and even a brief explanation can be\nquite involved, so it\u0027s worth having something we can point to (and\nsomething that interested parties might just find via a web search).\n\nBug: http://b/207248554\nTest: treehugger\nChange-Id: I4a6d8917baf99a8f7abef05ce852a31ebe048d68\n"
    },
    {
      "commit": "32a72522e0e6a69ba8c964f2f10a5a196783db85",
      "tree": "66e62b7bff869da14dafe3711a66c6e502108623",
      "parents": [
        "ad12582726766526a6bf0d999be2da240c824ffc"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Dec 10 01:42:21 2021 +0000"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Dec 10 01:42:31 2021 +0000"
      },
      "message": "Clarify that fdsan wasn\u0027t \"enforcing\" in its first release.\n\nChange-Id: I02c4ff49446995b5ea33f4fa9ca30cf204307ae8\n"
    },
    {
      "commit": "977867173a7461f43cdd1d9b5198d1102ec9a740",
      "tree": "619a8366814b4ad7430e0ce32574a506c278be40",
      "parents": [
        "9cf8871dd98bf69fe46bba056fa05c3c6bf2222d"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Apr 16 13:57:52 2021 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Apr 16 13:57:52 2021 -0700"
      },
      "message": "Say which API level fdsan/fdtrack appeared at.\n\nTest: N/A\nChange-Id: Id29db9a5ec6a039af95ce3cdd421542ac862f339\n"
    },
    {
      "commit": "7bdca8d16f92868f0f4be13d80b0b3316e5ec771",
      "tree": "82be494223deb81bf46db104d43173557dc3ec7d",
      "parents": [
        "eb33b5b7a8852003756fcd645c238dae193410d6"
      ],
      "author": {
        "name": "Peter Collingbourne",
        "email": "pcc@google.com",
        "time": "Fri Apr 09 15:11:42 2021 -0700"
      },
      "committer": {
        "name": "Peter Collingbourne",
        "email": "pcc@google.com",
        "time": "Fri Apr 09 15:11:49 2021 -0700"
      },
      "message": "Fix the adb command to push the memory trace files.\n\nChange-Id: If49d084486486c7899d7655175860f7528aac6ce\n"
    },
    {
      "commit": "aa8db1b9d1e8bba7eba26238e44713f02a3dd533",
      "tree": "0c55f7bf1fa5b9aa9e01c63573bd4bb6314a6393",
      "parents": [
        "ef0ec82684ea52ee3a13db8df9103ca314ea17aa"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Feb 16 15:05:44 2021 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Feb 16 15:06:50 2021 -0800"
      },
      "message": "Fix/update notices.\n\nAuto-generate NOTICE files for all the directories, and for each one\nindividually rather than mixing libc and libm together.\n\nTest: N/A\nChange-Id: I7e251194a8805c4ca78fcc5675c3321bcd5abf0a\n"
    },
    {
      "commit": "12a0eb6c6d20b97d2c7eb8b3e960d753fe6f82e7",
      "tree": "191231b916952c1412209b1649b0696026d07744",
      "parents": [
        "95dbcfaf045edfb17c48fd3e46fe2e3a278dc148"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Mon Aug 31 19:12:46 2020 -0700"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Mon Aug 31 19:12:46 2020 -0700"
      },
      "message": "Add fdtrack docs.\n\nTest: none\nChange-Id: I035be350cfd40cdbff1e95332f96841001922454\n"
    },
    {
      "commit": "cf346532fccbe35666b827fbbfd2cb951dd00dc2",
      "tree": "c1ab59c29e63dea1700f24edb6bfad28c9d0687f",
      "parents": [
        "b1d27cab96c7aa31470ed2a1a8b284f9422cef25"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Jul 31 10:35:03 2020 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Jul 31 10:35:03 2020 -0700"
      },
      "message": "More cleanup for #inclusivefixit.\n\nFound manually with grep, since the script seems to miss stuff.\n\nTest: treehugger\nChange-Id: I5933cbade9792801d4a0bec1ccb077efa6ad8fbc\n"
    },
    {
      "commit": "1cd4d4227ae1dcd743bea0898b11c8a0f13c15d1",
      "tree": "2ec48435a473ce19badf9239ba3d87034a49c102",
      "parents": [
        "f76ef3669002e802bad2bd04225b89ae5ee9d862"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue May 19 12:39:50 2020 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue May 19 12:41:25 2020 -0700"
      },
      "message": "Expand a little on the time_t situation.\n\nSince we last touched this file, the Linux kernel has added the missing\nAPI, but time has also moved on enough to make the cost/benefit\nunconvincing for Android.\n\nBug: http://b/156317457\nTest: treehugger\nChange-Id: I07fa678458ef10d15540b36ab65e0898d2fdadc6\n"
    },
    {
      "commit": "733cedd1c4696ea74dab34d629ef7ac28ecc2200",
      "tree": "6f24227b01f5bfea254d364bd90ee5a1067d4408",
      "parents": [
        "fcbdba22ab1c84825bd1e4cd18f8298c87991a5b"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Feb 21 23:21:28 2020 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Sun Feb 23 11:36:53 2020 -0800"
      },
      "message": "Add a libc wrapper for statx(2).\n\nBug: http://b/127675384\nBug: http://b/146676114\nTest: treehugger\nChange-Id: I844edc12f62717e579870a040cf03dfe60dc280b\n"
    },
    {
      "commit": "56a9fda6103cd3b903dffa013dc1532fc33d31ba",
      "tree": "5b7a5b38bd0b7436eb69ed89848a19e367c73d35",
      "parents": [
        "fb28c278b726a2281cef89cf25b5e9a2a5503b31"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Feb 13 22:23:17 2020 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Feb 13 22:25:02 2020 -0800"
      },
      "message": "Remove dead code.\n\nWe haven\u0027t built any of this for years.\n\nTest: treehugger\nChange-Id: I3f8a85e9530af68587f47931d850eb60631a9481\n"
    },
    {
      "commit": "9c381b046ff63d6c41788655d200723b0d026095",
      "tree": "5420169334526b1eff6e6c924189f2e06ad1403c",
      "parents": [
        "fd2eb42006fd1b51beb98e5c4e3e3ae2e676173e"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Feb 05 16:04:57 2020 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Feb 05 16:04:57 2020 -0800"
      },
      "message": "docs/status.md: link to github.\n\nWe\u0027ve had discussions about \u003cmonetary.h\u003e (which wasn\u0027t previously\nmentioned here at all, an oversight) and robust mutexes on github that\nare worth linking to.\n\nBug: https://github.com/android/ndk/issues/1181\nBug: https://github.com/android/ndk/issues/1182\nTest: N/A\nChange-Id: If0d2c28757a3cbfffc358e8847dc4de1a67d9001\n"
    },
    {
      "commit": "b5a7741bb3250c2bcb93bee748512e90a9fd99b1",
      "tree": "9dbf7b0c793877598392fdc9521ad8e0779f6bf0",
      "parents": [
        "73e9f242ed07631798433df4e35f5f73443cb9f9"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Jan 22 15:10:52 2020 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Jan 22 15:10:52 2020 -0800"
      },
      "message": "Mention why we don\u0027t have pthread_cancel().\n\nIt\u0027s a somewhat frequently asked question.\n\nChange-Id: I2ad88e8d79607e49a891eb2304e9be63494ad193\n"
    },
    {
      "commit": "91e3bd1f334a2fa570109390bb2373d314bc01cd",
      "tree": "06f085bf4c4a64105720c362aac76bad87fb2733",
      "parents": [
        "3779d6da40fc90b989b343c1b0d5b22611226b43"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Jan 16 15:23:58 2020 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Jan 16 15:23:58 2020 -0800"
      },
      "message": "Document the changed fdsan default from Q to R.\n\nChange-Id: I98c50232184a8bf929579a7a30460dc33555475e\n"
    },
    {
      "commit": "5a3c920051d8139a4c81f8804d3a7be94d150e85",
      "tree": "ddc7e20ab5777563640dc3b9b83939a6c871a27f",
      "parents": [
        "1752b5b9c0f2ae3845278e72d7ac9f83e33f0e32"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Wed Dec 04 15:57:07 2019 -0800"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Thu Dec 05 15:46:22 2019 -0800"
      },
      "message": "Add mallopt M_PURGE benchmark.\n\nUpdate the native allocator documentation to include running of this\nbenchmark.\n\nMove the malloc_benchmark.cpp to malloc_sql_benchmark.cpp and use\nmalloc_benchmark.cpp for benchmarking functions from malloc.h.\n\nBug: 137795072\n\nTest: Ran new benchmark.\nChange-Id: I76856de833032da324ad0bc0b6bd85a4ea8c253d\n"
    },
    {
      "commit": "75edf16f4d10d21b606eaee2987b3c7a2ec926a3",
      "tree": "f4f1d3af60a5a5c3203587ab81a3f56c117b8703",
      "parents": [
        "5e85d1b290877201174fdb2f09226b5bd34b80a9"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Wed Nov 13 13:55:17 2019 -0800"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Wed Nov 13 14:00:56 2019 -0800"
      },
      "message": "Update the native allocator document.\n\nAdd extra information I\u0027ve been using to evaluate scudo.\n\nTest: NA\nChange-Id: Ie7ee65890b1a3804c38ba38de504144d43e410b2\n"
    },
    {
      "commit": "502dc0b9c3c39e5a1def8d074b209395a65ba502",
      "tree": "333dbde6a512f94a5f40b1be5ec0c8b26844db4b",
      "parents": [
        "31600e84249769cc51dda49c78400887fab64f7e"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Nov 12 21:06:07 2019 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Nov 12 21:06:07 2019 -0800"
      },
      "message": "Update docs/status.md function counts for recent releases.\n\nTest: N/A\nChange-Id: I99b7227334d0858f19ec7544a255fe47f265d810\n"
    },
    {
      "commit": "51863b36714ea93a6ad792b2ec0cf9be18a8ce91",
      "tree": "5e2498720c1aec97315834d1d392883111bb6f9f",
      "parents": [
        "6e5d06336a4d1e013c921437d59918b66fa5fd6a"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Fri Oct 25 15:24:16 2019 -0700"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Fri Oct 25 15:27:12 2019 -0700"
      },
      "message": "Add section about libmemunreachable tests.\n\nTest: NA\nChange-Id: I0dcb8bbb7a598c44201281c7d493023e7d25c153\n"
    },
    {
      "commit": "2f5fc3372a2fd0c571546d68b74d52895dd5ced2",
      "tree": "f1c5c7ee1877864ec83faafd03749a77319784f5",
      "parents": [
        "919dc05d66b129ad6f34fad95322efb6de245754"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Thu Oct 17 14:21:03 2019 -0700"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Thu Oct 17 15:20:55 2019 -0700"
      },
      "message": "Updated memory_replay description.\n\nThe description of memory_replay talks about unzippping the trace\nfiles, but this is no longer necessary. This language has been\nupdated to reflect this.\n\nTest: NA\nChange-Id: Id808f9bd1286284c8de12b19c08eb8677c76dd53\n"
    },
    {
      "commit": "80e9f65c040873c2aa016bfb0db5984e9db46f18",
      "tree": "4999055583e9f535e4f514d1534834d7c47d074c",
      "parents": [
        "95712059371aa522c80f1cab3cc3eb5431cc7f71"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Oct 14 12:19:29 2019 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Oct 15 13:30:12 2019 -0700"
      },
      "message": "Remove __ANDROID_NDK__ from bionic, and document our #defines.\n\n__ANDROID_NDK__ is moving into the NDK\u0027s \u003candroid/ndk-version.h\u003e\ninstead.\n\nTest: treehugger\nChange-Id: I192016165a929547009d15dbcc30e8f6dad1ac88\n"
    },
    {
      "commit": "5f112cd7564f092c93c877e526d269ec68d47922",
      "tree": "d37d23c086a530131baa455c3a815d2245ea7d73",
      "parents": [
        "1491521a6824e80e8499d706707a9a58f138dd04",
        "8f3f191bf33dbd68d9e03cb24aef50722cc62b0c"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Fri Aug 16 02:08:22 2019 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Aug 16 02:08:22 2019 +0000"
      },
      "message": "Merge \"Link our two main developer-facing docs together.\""
    },
    {
      "commit": "8f3f191bf33dbd68d9e03cb24aef50722cc62b0c",
      "tree": "73a836a6cb7f93ddcc670fc88cb81a5d4536fb35",
      "parents": [
        "639ad55176c78bfd70c3786a92a05dd3d2299953"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Aug 15 08:19:49 2019 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Aug 15 08:19:49 2019 -0700"
      },
      "message": "Link our two main developer-facing docs together.\n\nBug: http://b/139329827\nTest: N/A\nChange-Id: I38e05f1a7eaa8ff31b503541e34f2e362cd4722e\n"
    },
    {
      "commit": "aa22c0cb0c25d6462547bc1557c08a18b176147b",
      "tree": "1cd96da2588ffdd0a55f32c19fe63fbe08b2dde7",
      "parents": [
        "6864fc8d065f647b56297e71d928aab0800d0879"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Wed Aug 14 15:17:26 2019 -0700"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Wed Aug 14 15:17:26 2019 -0700"
      },
      "message": "Update location of trace files.\n\nTest: NA\nChange-Id: I27f98b84b7701b8747d22dbdfbfa074083c36bc1\n"
    },
    {
      "commit": "05197f7d032ce70f0a23fdaee2e88a7cc54298a3",
      "tree": "cd355581b669a0e82a454c311ebd060bdba03ef3",
      "parents": [
        "592b5f52fd5f027817516b4d0945c2b4537518e4"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Wed Aug 07 14:27:52 2019 -0700"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Wed Aug 07 15:34:11 2019 -0700"
      },
      "message": "Change all references to PSS to RSS.\n\nRSS is the real measurement by which an allocator should be measured\nsince RSS is the real memory consumed by the process. PSS is a shared\nvalue.\n\nFor memory_replay, PSS and RSS should be the same, so this didn\u0027t really\nmatter in practice, but it\u0027s better to use the correct name of RSS.\n\nAlso, add a small section about fragmentation.\n\nBug: 138394907\n\nTest: NA\nChange-Id: Ic6f982f9c4619f452342e7c105818e33b8b85e44\n"
    },
    {
      "commit": "da32ff104b1863b3052f355cce711c92c2cfc950",
      "tree": "f01d032271e5b1261882a5724ed142cf9d0892ed",
      "parents": [
        "5d3ba4ed9dc0b3e37d4979cbea34757e29d60715",
        "3d24d2b0883ea828443fd7c36d1b262410618aca"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Aug 06 17:08:13 2019 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Aug 06 17:08:13 2019 +0000"
      },
      "message": "Merge \"Add memfd_create(2) and mlock2(2).\""
    },
    {
      "commit": "3d24d2b0883ea828443fd7c36d1b262410618aca",
      "tree": "90ddca40aa1d86f1c182462d5b3386a4375dcc3f",
      "parents": [
        "a5c9c7c56542b6471575148b8a3654078b180940"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Aug 05 13:53:01 2019 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Aug 05 16:31:08 2019 -0700"
      },
      "message": "Add memfd_create(2) and mlock2(2).\n\nThese are old enough now that the latest devices will have kernels that\nsupport them.\n\nAlso add basic doc comments to \u003csys/mman.h\u003e.\n\nTest: treehugger\nChange-Id: I1b5ff5db0b6270f5c374287cac1d6a751a0259f5\n"
    },
    {
      "commit": "f0d9271fe2b7120d3b14204456e72c939de8256b",
      "tree": "75f0b8effe162648711d1906388030f9c7b17f52",
      "parents": [
        "a5c9c7c56542b6471575148b8a3654078b180940"
      ],
      "author": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Mon Aug 05 14:10:17 2019 -0700"
      },
      "committer": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Mon Aug 05 14:13:25 2019 -0700"
      },
      "message": "Update docs for clockwait/clocklock functions\n\nTest: n/a\nChange-Id: Ie4853912c9ed63d29121e62406682896012962ec\n"
    },
    {
      "commit": "05b675e8bfec6e33138fd2e1b2e0e16afe745b37",
      "tree": "2de2c98f748581531eaa6b0bb92adbe30f891f36",
      "parents": [
        "c2a722f5d77911afd199f452b03d9c15fbe645f8"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Apr 17 13:01:06 2019 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Aug 02 09:09:59 2019 -0700"
      },
      "message": "Add renameat2.\n\nBug: http://b/127675384\nTest: new tests\nChange-Id: Ia2e3d5679180391ca98e62fa429fa11cbf167507\n"
    },
    {
      "commit": "afce4e897fdd8ed29bcfacf552216e1e106409c0",
      "tree": "c23d580fd024577d6c6dda50e064d12234668714",
      "parents": [
        "25f0e8ad2d6e5396abf620652d5c33162ecc7068",
        "4316d43f4d45d2e029d9c1a058fd451073ed4e06"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Fri Jun 28 19:55:31 2019 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Jun 28 19:55:31 2019 +0000"
      },
      "message": "Merge \"Add doc describing native allocator.\""
    },
    {
      "commit": "4316d43f4d45d2e029d9c1a058fd451073ed4e06",
      "tree": "d96aa254548b3d1b431b42708e76f4b103d7fc18",
      "parents": [
        "b2bd7c575eaa91e35ff40450bb4c514a2088a5d7"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Thu Jun 27 00:08:23 2019 -0700"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Fri Jun 28 10:33:53 2019 -0700"
      },
      "message": "Add doc describing native allocator.\n\nThis includes tests that a native allocator has to pass, and the ways\nto benchmark a native allocator on Android.\n\nTest: NA\nChange-Id: I5e1f4b3eea46ee2240e63a487ca3dfabecff81c0\n"
    },
    {
      "commit": "2671de289604e7fbee9ff2aa89dd78b3ca3382b7",
      "tree": "f0d6e8533f53e2432b0b68c0b84df703bfad858a",
      "parents": [
        "b2bd7c575eaa91e35ff40450bb4c514a2088a5d7"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Thu Jun 27 20:42:38 2019 -0700"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Thu Jun 27 20:42:38 2019 -0700"
      },
      "message": "Fix usage of () and [].\n\nThe usage was reversed, [] is used for the name and () is used for the\nlink destination.\n\nTest: NA\nChange-Id: I07bf8645a888d5690d6c3d58edc3899b3e287df4\n"
    },
    {
      "commit": "420671135237cdf40c98d2336fb8712b7f0a2861",
      "tree": "c4d85a256eb46c8aa1a00a1675ac31f60498e313",
      "parents": [
        "30bcaae2b6bcdeadd42066fe5b6f5a49bd5b9b07"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Apr 18 14:27:24 2019 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Apr 24 09:12:29 2019 -0700"
      },
      "message": "threads.h: Add C11 thread support.\n\nFreeBSD, glibc, and musl have all implemented C11 threads at this\npoint. POSIX is looking at how to align with it. Probably time to jump\non the bandwagon ourselves...\n\nImplemented in the same style as \u003ctermios.h\u003e so we can provide this\nfunctionality even on older API levels. This does mean that this is\nstrictly more expensive than calling pthread functions directly.\n\nAlthough this isn\u0027t in POSIX yet, assume that it\u0027s going to be basically\nthe same as C11 and add the header test anyway. We should revisit this\nwhen POSIX actually adds \u003cthreads.h\u003e.\n\nTest: new tests\nChange-Id: I8602d67ce71ca7f8ed1529daa0a8ea1feb083dd6\n"
    },
    {
      "commit": "a1fb15bb67bcdf426c012919c096e7235b551f40",
      "tree": "0410e1c0d036b886cb97c315a67ebc828a5b64fb",
      "parents": [
        "e08288465ece24860d61788b975a8267a4594379"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Mar 26 19:07:40 2019 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Mar 26 19:07:40 2019 -0700"
      },
      "message": "strptime: support everything that strftime supports.\n\nOur strptime was missing `%F`, `%G`, `%g`, `%P`, `%u`, `%V`, and\n`%v`. Most of these are already supported upstream (and I\u0027ve just pulled\ntheir current implementation), but some aren\u0027t. We\u0027re horribly out of\nsync anyway, so I\u0027ll upstream the missing pieces and then try to get us\nback in sync later.\n\nTest: new tests, but originally found by toybox trying to use %F\nChange-Id: Ib1a10801a7a3b9c9189440c3b300109bde535fd9\n"
    },
    {
      "commit": "b282a6d4d32b5f88a1042aaab8c208ec4f35235b",
      "tree": "1c91d2e39f6858891dd9c8be7163c2f3b86f043e",
      "parents": [
        "ebdf4c19f9e034d7ec8e0e57539890d5c93eaed1"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Mar 20 11:21:46 2019 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Mar 20 11:23:53 2019 -0700"
      },
      "message": "Document various libc behavior changes.\n\nTest: N/A\nChange-Id: I3044c394180058ba500762239b16a4c740caca44\n"
    },
    {
      "commit": "a22f5d5175df5c42ec86d2c2db250edf1f64084c",
      "tree": "66d2980a1b04626c7e4fc1437e96194b958ea8f8",
      "parents": [
        "0771b752f1b955e7ded6ccbbf825b0ae93439eb5"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Fri Mar 01 16:40:59 2019 -0800"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Fri Mar 01 23:56:23 2019 -0800"
      },
      "message": "Make aligned_alloc match the standard.\n\nJemalloc does not verify that the size parameter is a multiple of\nalignment. Fix this since it only went into P.\n\nFix the unit tests, and fix malloc debug/malloc hooks to handle this\nnew restrictive behavior.\n\nBug: 126944692\n\nTest: Ran bionic unit tests.\nTest: Ran bionic unit tests with malloc hooks enabled (no new tests fail).\nTest: Ran bionic unit tests with malloc debug enabled (no new tests fail).\nTest: Ran malloc debug unit tests.\nChange-Id: I4d50785928815679c781ca729f998454d76b9192\n"
    },
    {
      "commit": "9491c54619e254823730c56abeb5ea21e295c624",
      "tree": "8478b6d1f7bf1f8bfd0495e09b32be6852555c3d",
      "parents": [
        "bf925b0580b63f0746303eb234d2684aadc29dc0"
      ],
      "author": {
        "name": "Ryan Prichard",
        "email": "rprichard@google.com",
        "time": "Fri Nov 09 15:18:05 2018 -0800"
      },
      "committer": {
        "name": "Ryan Prichard",
        "email": "rprichard@google.com",
        "time": "Fri Nov 09 15:24:16 2018 -0800"
      },
      "message": "Publish the current draft of my ELF TLS doc\n\nI have a script that converts the internal Google Doc to this markdown\nfile.\n\nBug: http://b/78026329\nTest: review document\nChange-Id: I16cfa60f1e480f859eb79cb0e5f0c519f5622cfd\n"
    },
    {
      "commit": "2d0b28bc0da1ade2de2b72093dbdb740028fce7c",
      "tree": "75a1b66144e65f7141e3cf9ddaaae0049b07ca11",
      "parents": [
        "7562f1ab87e4b51042d185345248f1a54885489a"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Oct 23 11:23:00 2018 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Oct 23 11:23:00 2018 -0700"
      },
      "message": "Add getloadavg(3).\n\nLets us build ninja with bionic.\n\nBug: N/A\nTest: ran tests\nChange-Id: I97eef1247d794b58a2b9aee4851551632e5a4e48\n"
    },
    {
      "commit": "b177085ce7219562eecf77f2e8de49f8f2605005",
      "tree": "573947a27714273f7d78e9c6f85c9fd30e63dba9",
      "parents": [
        "e4e3de819d05481422f8bb9925486118924bf4a1"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Sep 18 12:52:42 2018 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Sep 26 14:24:18 2018 -0700"
      },
      "message": "Add reallocarray(3).\n\nOriginally a BSD extension, now in glibc too. We\u0027ve used it internally\nfor a while.\n\n(cherry-pick of e4b13f7e3ca68edfcc5faedc5e7d4e13c4e8edb9.)\n\nBug: http://b/112163459\nTest: ran tests\nChange-Id: I813c3a62b13ddb91ba41e32a5a853d09207ea6bc\nMerged-In: I813c3a62b13ddb91ba41e32a5a853d09207ea6bc\n"
    },
    {
      "commit": "ce9d653b38868a73260d141acbf3ddd8c5d8e178",
      "tree": "1f1367d6c59031427eb9b7911439f1f1d7ea722b",
      "parents": [
        "a02d631163860c795cac7a0428ad8abb9ed3b747",
        "d747bb8f3f7061786db9ed77430a572361f263af"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Thu Sep 20 19:22:03 2018 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Sep 20 19:22:03 2018 +0000"
      },
      "message": "Merge changes from topics \"fdsan_ziparchive_type\", \"fdsan_java_socket\"\n\n* changes:\n  fdsan: improve documentation.\n  fdsan: add type for libziparchive\u0027s ZipArchive.\n  fdsan: add types for Java sockets.\n"
    },
    {
      "commit": "d747bb8f3f7061786db9ed77430a572361f263af",
      "tree": "cf4254af7d55bdb17da4cd1d7c58c9fc1fec7c29",
      "parents": [
        "5fa9df8efc96667564cc5289b176592bd7882953"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Tue Sep 18 13:38:31 2018 -0700"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Tue Sep 18 13:42:08 2018 -0700"
      },
      "message": "fdsan: improve documentation.\n\nFix a race condition in the example, and add a linearized version to\nmake it more clear what\u0027s going on.\n\nTest: none\nChange-Id: Id9158e4fd407b676ef364e7076985de3ad477457\n"
    },
    {
      "commit": "670ea7aca905c5a93828b7c401ef320d65b8999f",
      "tree": "3e061b8d126557bf12baaafa6ed8062885b98d4a",
      "parents": [
        "4d9814909677805d04d113b7af24b3edf655a712"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Sep 14 17:05:01 2018 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Sep 14 17:05:01 2018 -0700"
      },
      "message": "Explicitly say `pthread_cancel` in the docs.\n\nBug: http://b/33943372\nTest: N/A\nChange-Id: If71691f7ff20c9b8c14de15692543bbd858c9aab\n"
    },
    {
      "commit": "01416ba1120c8ab7697fbe64eb1aa90f4faf10bd",
      "tree": "b7c56d3242bdda64db4802f431d0317d9428658e",
      "parents": [
        "0326f063b5b275bf0721b942b06a04b7ec719e16"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Thu Sep 06 16:23:14 2018 -0700"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Thu Sep 06 16:23:38 2018 -0700"
      },
      "message": "Fix mistake in fdsan documentation.\n\nFile descriptors are POSIX, not C.\n\nTest: none\nChange-Id: Idc3c32c60f9c61e8e68aabbc4589a6c68e156e4b\n"
    },
    {
      "commit": "b64196a9bbf7578c1328faa88b6020b0384f6d1c",
      "tree": "4ec18897221f00a68deff9bc3df016e1ae2957ea",
      "parents": [
        "e57399d4a132df84ac62a6539eebdcf10553b170"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Fri Aug 31 00:32:46 2018 -0700"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Thu Sep 06 14:55:12 2018 -0700"
      },
      "message": "fdsan: add documentation.\n\nTest: none\nChange-Id: I7dabd8f5420c757b6504254a6414da8e877d475e\n"
    },
    {
      "commit": "86bce192e90c827ffcae2c82d199d7ff27aedb86",
      "tree": "aaac107ea9b57b3bac2bdc819df879a958d844c6",
      "parents": [
        "74934aaf10d629de477095f0b92c467849f89638"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Sep 05 12:00:55 2018 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Sep 05 12:01:15 2018 -0700"
      },
      "message": "Document various post-P bionic changes.\n\nHistorically we haven\u0027t documented many behavioral changes, but it\u0027s\nprobably useful to record that information before it\u0027s lost (even if,\nlong term, it might be more useful in the man pages or the doc comments).\n\nBug: N/A\nTest: N/A\nChange-Id: Iaa4f651fd6576298d848894b61285ef95879deb9\n"
    },
    {
      "commit": "3876ade8420b9e6815d8afbe66618ccc92d04411",
      "tree": "01167c8d08da7d9ed4e10d6b5fb7debcf22723f0",
      "parents": [
        "003521af4760215c9c3b8ba80c88dd3b3c87ab67"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Aug 30 14:25:32 2018 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Aug 30 14:25:32 2018 -0700"
      },
      "message": "Fill out historical \"what was added when\" information.\n\nBug: N/A\nTest: N/A\nChange-Id: Ifa1807c6bb61dea2a4831785492b13118c66490d\n"
    },
    {
      "commit": "a473be239570817b065dc7acbc6968c3ad402133",
      "tree": "e341a54d393bff19fa792d3a3b6eab0a185a2a78",
      "parents": [
        "782cd01b098f86bef787955d5264e694d0e7e807"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Mon Aug 06 12:18:32 2018 -0700"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Mon Aug 06 12:18:32 2018 -0700"
      },
      "message": "Fix libc assembler documentation.\n\nTest: NA\nChange-Id: I71485a3a44a56f2ff7ed590aec171464b57f56f6\n"
    },
    {
      "commit": "782cd01b098f86bef787955d5264e694d0e7e807",
      "tree": "dd054bb651836caedcc20f20d405b3f309217eb7",
      "parents": [
        "ea6aff66fa61f973e5cae0c8ebeed218ab316e19",
        "74866e160dd3b0d31e31befb36f334d4acc6e567"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Mon Aug 06 17:27:31 2018 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Aug 06 17:27:31 2018 +0000"
      },
      "message": "Merge \"Revert \"Move android-changes-for-ndk-developers.md into docs/.\"\""
    },
    {
      "commit": "74866e160dd3b0d31e31befb36f334d4acc6e567",
      "tree": "d91763e382ec8242dcf293f1ac3f9eb441743666",
      "parents": [
        "1975196c871f20928c20b4ab23e4f3ee6b33390a"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Aug 06 15:40:04 2018 +0000"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Aug 06 15:40:04 2018 +0000"
      },
      "message": "Revert \"Move android-changes-for-ndk-developers.md into docs/.\"\n\nThis reverts commit 1975196c871f20928c20b4ab23e4f3ee6b33390a.\n\nReason for revert: https://android.googlesource.com/ doesn\u0027t follow symlinks :-(\n\nChange-Id: I58038a03388ab5257d301debb494ce354013acfe\n"
    },
    {
      "commit": "65f82092a17518080178ff7004cc6db362ebfbcd",
      "tree": "33f3d115d6bbec22c89dd3b27b82a9df8149392a",
      "parents": [
        "7fe9001364ede6aece4119059ef8199d39c74159",
        "af455ac83d82cdca5f8a89205735e9e7b4ef15e0"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Thu Aug 02 19:27:05 2018 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Aug 02 19:27:05 2018 +0000"
      },
      "message": "Merge \"Add doc about verifying libc assembler routines.\""
    },
    {
      "commit": "af455ac83d82cdca5f8a89205735e9e7b4ef15e0",
      "tree": "30fade4a0579e03aba43c427cd5532ab63d31dab",
      "parents": [
        "78b4a82d7d62f548b707f92f5dc5f339bb1fadc4"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Wed Aug 01 15:21:16 2018 -0700"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Wed Aug 01 20:17:28 2018 -0700"
      },
      "message": "Add doc about verifying libc assembler routines.\n\nTest: NA\nChange-Id: Ic3576f9c063a11d5c3f5fdb093b4d9dd2a1f5dd7\n"
    },
    {
      "commit": "1975196c871f20928c20b4ab23e4f3ee6b33390a",
      "tree": "f1959149eb7f9d0b8a120b4cadbd465802b49cd3",
      "parents": [
        "b0c8a01de1dafc1e47f74895d00ca82429f851b3"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Aug 01 13:07:17 2018 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Aug 01 13:07:17 2018 -0700"
      },
      "message": "Move android-changes-for-ndk-developers.md into docs/.\n\n(But keep a symbolic link so we don\u0027t break the web.)\n\nBug: N/A\nTest: N/A\nChange-Id: Ib0c8ef80cb4b6836a465d897ffe6d78e11f09f46\n"
    },
    {
      "commit": "a7119af33ef71ae24d809b5ea52c1ba913f97a6c",
      "tree": "085450dbe59e2b07a6d86d7bfe062f93a4d6de9c",
      "parents": [
        "f98d87b831958cc71ef7f6b6fa18a7a2a2d24737"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Jul 17 13:26:14 2018 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Jul 17 13:26:14 2018 -0700"
      },
      "message": "Update libc status documentation.\n\nBug: N/A\nTest: N/A\nChange-Id: Ied9659f0388a4affa65f0948b3e4a58d0dca5605\n"
    }
  ],
  "next": "07f62385b65856552ad8f1019e4261df3badc5cb"
}
