)]}'
{
  "log": [
    {
      "commit": "f17fd1d68aca0a63f7888cd4035858bbdfc6fa94",
      "tree": "554093f4206046bc26daa484604c7f1fad4689a5",
      "parents": [
        "7f92fbe06484f036274952efa00fb5cdf410eb12"
      ],
      "author": {
        "name": "Ivan Lozano",
        "email": "ivanlozano@google.com",
        "time": "Tue Nov 27 07:56:17 2018 -0800"
      },
      "committer": {
        "name": "Ivan Lozano",
        "email": "ivanlozano@google.com",
        "time": "Tue Nov 27 07:56:17 2018 -0800"
      },
      "message": "Disable XOM in linker, libc, and libm.\n\nThese modules have issues running with execute-only memory. Disable it\nin them until we can resolve the issues.\n\nBug: 77958880\nTest: No more XOM-related crashes in these binaries\n\nChange-Id: Ie6c957731155566c2bbe7dbb7a91b9583d9aff93\n"
    },
    {
      "commit": "ea9957a72a78d4f43dd8ddc1545fd800c0d15c9f",
      "tree": "e6875688c7da7c8ca1083623e78205af81e92cf5",
      "parents": [
        "9ab3e4015d381d7309d54b630abebab2bbae1856"
      ],
      "author": {
        "name": "Haibo Huang",
        "email": "hhb@google.com",
        "time": "Mon Nov 19 11:00:32 2018 -0800"
      },
      "committer": {
        "name": "Haibo Huang",
        "email": "hhb@google.com",
        "time": "Mon Nov 26 20:00:55 2018 +0000"
      },
      "message": "Arm32 dynamic function dispatch\n\nPrevious change was reverted in 9690b121e342676453c58f5940964350762085a0.\nThis change added .arch directive to kryo/ to avoid invalid instruction error.\n\nTest: Run bionic unit test.\nTest: Use gdb to make sure the right function is selected.\nTest: Build previously failed target: make PRODUCT-sdk_phone_arm64-sdk\nChange-Id: I14de41851121fc1a0b38c98fda5eb844b6a9695c\n"
    },
    {
      "commit": "9690b121e342676453c58f5940964350762085a0",
      "tree": "0679a4121379514b370e3c73c1842170af2205a0",
      "parents": [
        "ce4ff9c44de8213a55c3712da17c5eab8f1247bc"
      ],
      "author": {
        "name": "Izabela Orlowska",
        "email": "imorlowska@google.com",
        "time": "Mon Nov 19 14:14:41 2018 +0000"
      },
      "committer": {
        "name": "Izabela Orlowska",
        "email": "imorlowska@google.com",
        "time": "Mon Nov 19 14:14:41 2018 +0000"
      },
      "message": "Revert \"Arm32 dynamic function dispatch\"\n\nThis reverts commit ce4ff9c44de8213a55c3712da17c5eab8f1247bc.\n\nReason for revert: broke master in ab/5138164 target sdk_phone_armv7-sdk\n\nChange-Id: Ia4b0c7e6117a37df694509078116963f41d7865e\n"
    },
    {
      "commit": "ce4ff9c44de8213a55c3712da17c5eab8f1247bc",
      "tree": "dd42c871275126a69ed5f4bd22d3359a95fadeeb",
      "parents": [
        "3de3a5faaf34bd3a1b6469988eb2975038074ec2"
      ],
      "author": {
        "name": "Haibo Huang",
        "email": "hhb@google.com",
        "time": "Wed Oct 24 10:47:34 2018 -0700"
      },
      "committer": {
        "name": "Haibo Huang",
        "email": "hhb@google.com",
        "time": "Fri Nov 16 19:50:17 2018 +0000"
      },
      "message": "Arm32 dynamic function dispatch\n\nTest: Run bionic unit test.\nTest: Use gdb to make sure the right function is selected.\n\nChange-Id: I34ccd83d472c13993f75672b1aac2b2eae65c499\n"
    },
    {
      "commit": "e141362aa1a860274a4833dae532a70b21c08541",
      "tree": "a4d8d5c68a0ebb3878b5fe5e5cb25d4594c94e92",
      "parents": [
        "b9244ff551d3ca90f50635f733950c9c860fff8a"
      ],
      "author": {
        "name": "Haibo Huang",
        "email": "hhb@google.com",
        "time": "Tue Nov 13 14:20:43 2018 -0800"
      },
      "committer": {
        "name": "Haibo Huang",
        "email": "hhb@google.com",
        "time": "Tue Nov 13 14:23:19 2018 -0800"
      },
      "message": "Change memcpy ifunc to return memmove for x86\n\nIt is cleaner to do this with ifunc. This is a partial revert of:\nhttps://android-review.googlesource.com/c/platform/bionic/+/693863\n\nTest: run bionic unit test\nChange-Id: I5fb5745fc98807805aedb94b683e959e2a76a25d\n"
    },
    {
      "commit": "b9244ff551d3ca90f50635f733950c9c860fff8a",
      "tree": "2e38ae33f3927fbced3d742803c55e19a8c6354a",
      "parents": [
        "17c4bd9e5966e36352bfe93832e6cdccf5755a49"
      ],
      "author": {
        "name": "Haibo Huang",
        "email": "hhb@google.com",
        "time": "Sat Aug 11 10:12:13 2018 -0700"
      },
      "committer": {
        "name": "Haibo Huang",
        "email": "hhb@google.com",
        "time": "Tue Nov 13 13:48:23 2018 -0800"
      },
      "message": "Use ifunc to dynamically dispatch libc routines for x86\n\nTest: run bionic unit test in aosp_cf_x86_phone emulator\nChange-Id: Ib0c0de37cd38d24bfce2dfbe35b8fd8edff004af\n"
    },
    {
      "commit": "d73a49e91e373cbcf4d044ec79ee7ed7b56dd7ca",
      "tree": "e488c86e6ded1b98a04479aab7123c770bc4f0fd",
      "parents": [
        "b87e85aac399414aeacdc372df4f6900760c7aee"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Fri Oct 19 16:03:44 2018 -0700"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Tue Nov 13 10:32:33 2018 -0800"
      },
      "message": "Move to jemalloc5.\n\nBug: 62621531\n\nTest: Builds and boots. All unit tests pass.\nChange-Id: I09d106cc3b658885b9155d6838f8df61498d3f85\n"
    },
    {
      "commit": "f71edfad1c95baf226af86fba949621349ab8041",
      "tree": "a276b2434eb651c081b2f3bd5b44f1c315826859",
      "parents": [
        "40538268d43d82409a93637960f2da3c1226840a"
      ],
      "author": {
        "name": "Haibo Huang",
        "email": "hhb@google.com",
        "time": "Mon Nov 12 10:06:56 2018 -0800"
      },
      "committer": {
        "name": "Haibo Huang",
        "email": "hhb@google.com",
        "time": "Mon Nov 12 10:10:31 2018 -0800"
      },
      "message": "Separate libc_common to two targets\n\nAdds libc_common_static and libc_common_shared targets. So that static\nand shared objects can use different libraries.\n\nIn following changes I\u0027ll add dynamic dispatch code to\nlibc_common_shared.\n\nTest: compile and run bionic unit test.\nChange-Id: I056742fdf8af76ed7deb274c515951656b176fcb\n"
    },
    {
      "commit": "833cbe4b1c12e31fbbaf99df88f7e2ad23da6610",
      "tree": "ebd94e76888aec68397e40a39142adeb0542243f",
      "parents": [
        "38b8255866860aef8b514cacb21c242e10a33107"
      ],
      "author": {
        "name": "Logan Chien",
        "email": "loganchien@google.com",
        "time": "Fri Oct 19 17:57:54 2018 +0800"
      },
      "committer": {
        "name": "Logan Chien",
        "email": "loganchien@google.com",
        "time": "Fri Nov 02 13:21:03 2018 +0800"
      },
      "message": "Add bionic/libc/include to exported_include_dirs\n\nThis commit adds \"include\" (full path: \"bionic/libc/include\") to\nexported_include_dirs for libc.  Without this change,\nheader-abi-checker will strip all functions from ABI dumps.\n\nBug: 117963950\nTest: libc.so.lsdump has a non-empty functions array\nChange-Id: I192a4ec0251f1320ced56c6201818076ebd2a2da\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": "bc4f411138105d28eee984df848b568e30402574",
      "tree": "9b8eaacad4c8af66f787f4bf71dc5f266bbfcba6",
      "parents": [
        "a2af8bea8c6c4b6ce6883bf92cbce922e0d9f458"
      ],
      "author": {
        "name": "Haibo Huang",
        "email": "hhb@google.com",
        "time": "Wed Oct 10 13:46:48 2018 -0700"
      },
      "committer": {
        "name": "Haibo Huang",
        "email": "hhb@google.com",
        "time": "Fri Oct 12 23:55:06 2018 +0000"
      },
      "message": "Add support for A76 in bionic\n\nA76 still uses A55 as little core. It should be ok to use the same\nsetting as A75 for now.\n\nBug: 117125298\nTest: run bionic tests\nChange-Id: Idfd15424c20ae60becb6539f6ae855f3e7c264cd\n"
    },
    {
      "commit": "6b755755bc627311b351c6480a4cd9354e84c01b",
      "tree": "efd8675c0ee4be6e1bc4e231adc6f463712ce8bf",
      "parents": [
        "7208139406adbd40782ccd7554e1a21458da2b37",
        "ab17944178d8ac26114009746cc64b11ff6f4d81"
      ],
      "author": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Thu Sep 27 23:23:19 2018 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Sep 27 23:23:19 2018 +0000"
      },
      "message": "Merge \"Disable STL for crt objects\""
    },
    {
      "commit": "ab17944178d8ac26114009746cc64b11ff6f4d81",
      "tree": "532b2c04cb81221caca30a29f93307a76f6c5e0e",
      "parents": [
        "e4e3de819d05481422f8bb9925486118924bf4a1"
      ],
      "author": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Thu Sep 27 11:03:22 2018 -0700"
      },
      "committer": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Thu Sep 27 11:03:22 2018 -0700"
      },
      "message": "Disable STL for crt objects\n\ncc_objects are getting support for STL headers, disable them for\ncrt objects to avoid a circular dependency through libc++.\n\nTest: m checkbuild\nChange-Id: I4e0f4a2193ce98ec4b8802492add9014ec0dba98\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": "15711c1dd097badf5aaaf07b46137c0191015857",
      "tree": "264ff4e1183c407b0414c7d2348ebf7c8b44ffc8",
      "parents": [
        "655f80e37fb808175e4e4b8cebd9cb7b952cd76e"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Sep 18 14:28:48 2018 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Sep 18 14:28:48 2018 -0700"
      },
      "message": "Remove dead code.\n\nI stumbled across this because I was looking at the various locks in libc.\n\nBug: N/A\nTest: ran tests\nChange-Id: I77c9954f49aaae7519ea7f4917bbe6f138b841ad\n"
    },
    {
      "commit": "ce934e3d9be9700946ba51a39ba966faf3867a93",
      "tree": "0db870d9253699cf6084818dabbe8f0a46bec6fc",
      "parents": [
        "74934aaf10d629de477095f0b92c467849f89638"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Sep 06 13:26:08 2018 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Sep 06 14:19:46 2018 -0700"
      },
      "message": "Add android_get_device_api_level.\n\nBug: http://b/113615412\nTest: ran tests\nChange-Id: I0a7ae336c96c9ed6543b6935cbc242d14d4a4a67\n"
    },
    {
      "commit": "726b63f725ccfb270bf780c96bdf104a26e72dad",
      "tree": "0b6e0e688d10a1dfdd109f036f73198ec87414ac",
      "parents": [
        "f3aa3007e34eb14e114bd86492d8e6b2673e83c6"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Mon Aug 27 16:00:58 2018 -0700"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Mon Aug 27 16:48:17 2018 -0700"
      },
      "message": "Implement pthread_sigqueue.\n\nBug: http://b/112770187\nTest: bionic-unit-tests\nChange-Id: I03382cd5df2490b2e87265dba9007e2cb1b14cd2\n"
    },
    {
      "commit": "be551f596f763e147bb29ffc26bc360d910f90fb",
      "tree": "f0a7a9aa02e1b73e840f62262125d8064a9d4aae",
      "parents": [
        "3fd45bba4857fdbf320b6e89d2ae0569d9463bf5"
      ],
      "author": {
        "name": "Evgenii Stepanov",
        "email": "eugenis@google.com",
        "time": "Mon Aug 13 16:46:15 2018 -0700"
      },
      "committer": {
        "name": "Evgenii Stepanov",
        "email": "eugenis@google.com",
        "time": "Tue Aug 21 00:15:47 2018 +0000"
      },
      "message": "HWASan support in bionic.\n\n* Allow sanitization of libc (excluding existing global sanitizers)\n  and disallow sanitization of linker. The latter has not been\n  necessary before because HWASan is the first sanitizer to support\n  static binaries (with the exception of CFI, which is not used\n  globally).\n* Static binary startup: initialize HWASan shadow very early so that\n  almost entire libc can be sanitized. The rest of initialization is\n  done in a global constructor; until that is done sanitized code can\n  run but can\u0027t report errors (will simply crash with SIGTRAP).\n* Switch malloc_common from je_*  to __sanitizer_*.\n* Call hwasan functions when entering and leaving threads. We can not\n  intercept pthread_create when libc depends on libclang_rt.hwasan.\n  An alternative to this would be a callback interface like requested\n  here:\n    https://sourceware.org/glibc/wiki/ThreadPropertiesAPI\n\nAll of the above is behind a compile-time check\n__has_feature(hwaddress_sanitizer). This means that HWASan actually\nrequires libc to be instrumented, and would not work otherwise. It\u0027s\nan implementation choice that greatly reduces complexity of the tool.\nInstrumented libc also guarantees that hwasan is present and\ninitialized in every process, which allows piecemeal sanitization\n(i.e. library w/o main executable, or even individual static\nlibraries), unlike ASan.\n\nChange-Id: If44c46b79b15049d1745ba46ec910ae4f355d19c\n"
    },
    {
      "commit": "fa5410fdb7664e4561f5adcee406b1913f520d77",
      "tree": "4dc35e592835307b61e88534a7a054dc90cf0759",
      "parents": [
        "a7573441c1274bbdb3fc992d068ebf97b30a0208"
      ],
      "author": {
        "name": "George Burgess IV",
        "email": "gbiv@google.com",
        "time": "Mon Aug 13 17:44:06 2018 -0700"
      },
      "committer": {
        "name": "George Burgess IV",
        "email": "gbiv@google.com",
        "time": "Wed Aug 15 10:11:08 2018 -0700"
      },
      "message": "libc: enable -Wimplicit-fallthrough\n\nlibc had some -Wimplicit-fallthrough warnings. They all seem to be\nbenign. We\u0027re trying to enable this flag globally, so we need to\nannotate these breaks here.\n\nBug: 112564944\nTest: Builds\nChange-Id: I5afae694cc4cf26ad1a61e2c8ae91f00cda7c733\n"
    },
    {
      "commit": "fa09b3c7542b801b6d78d8ed4fbd20c174c5da40",
      "tree": "b029c976fecb0b8e684f43be69f3d8e42a3d011f",
      "parents": [
        "ea6aff66fa61f973e5cae0c8ebeed218ab316e19"
      ],
      "author": {
        "name": "Luis Hector Chavez",
        "email": "lhchavez@google.com",
        "time": "Fri Aug 03 20:53:28 2018 -0700"
      },
      "committer": {
        "name": "Luis Hector Chavez",
        "email": "lhchavez@google.com",
        "time": "Mon Aug 06 11:10:25 2018 -0700"
      },
      "message": "seccomp: Generate the policy files at compile time\n\nThis change avoids having to run the genseccomp.py script every time a\npolicy file is edited, and instead generates these files at\ncompile-time.\n\nBug: None\nTest: m\nTest: find out/soong/ -name x86_64_global_policy.cpp  # Shows files\nTest: generated policies are equivalent to original policies\nChange-Id: I12461fe0c5fb02c008c1b2503fbb994b8aa2f56b\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": "f98d87b831958cc71ef7f6b6fa18a7a2a2d24737",
      "tree": "7f6aa1a75c0f51eb8b602c31d29a03ff71cdf7b1",
      "parents": [
        "3a5fd0014c0a415b88467bb692a9606c5221d5f9"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Jul 17 13:21:05 2018 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Jul 17 13:21:05 2018 -0700"
      },
      "message": "Add C11 timespec_get.\n\nBug: https://github.com/android-ndk/ndk/issues/744\nTest: ran tests\nChange-Id: Iad9514946e06d55b6a3aa0f945d9a63bff900881\n"
    },
    {
      "commit": "468efc80da2504f4ae7de8b5e137426d44dda9d7",
      "tree": "464d20ef3a5ae493a9728ddc53629764b59f300d",
      "parents": [
        "f0296f35f67cf4c112b3ed407858999bdc2f33b0"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Jul 10 14:39:49 2018 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Jul 11 12:15:26 2018 -0700"
      },
      "message": "Reimplement popen(3)/pclose(3).\n\npclose(3) is now an alias for fclose(3). We could add a FORTIFY check\nthat you use pclose(3) if and only if you used popen(3), but there seems\nlittle value to that when we can just do the right thing.\n\nThis patch also adds the missing locking to _fwalk --- we need to lock\nboth the global list of FILE*s and also each FILE* we touch. POSIX says\nthat \"The popen() function shall ensure that any streams from previous\npopen() calls that remain open in the parent process are closed in the\nnew child process\", which we implement via _fwalk(fclose) in the child,\nbut we might want to just make *all* popen(3) file descriptors O_CLOEXEC\nin all cases.\n\nIgnore fewer errors in popen(3) failure cases.\n\nImprove popen(3) test coverage.\n\nBug: http://b/72470344\nTest: ran tests\nChange-Id: Ic937594bf28ec88b375f7e5825b9c05f500af438\n"
    },
    {
      "commit": "8a0f0ed5e7c2bc5665583db646876808cc3c2bc7",
      "tree": "e37fb7e4c3706931a9bfde2d865b4d90589610f6",
      "parents": [
        "42596b7bf0652e44edff0370f75e1d5387c5cc7b"
      ],
      "author": {
        "name": "Haibo Huang",
        "email": "hhb@google.com",
        "time": "Thu May 24 20:39:18 2018 -0700"
      },
      "committer": {
        "name": "Haibo Huang",
        "email": "hhb@google.com",
        "time": "Mon Jun 11 18:12:45 2018 +0000"
      },
      "message": "Make memcpy memmove\n\nBug: http://b/63992911\nTest: Change BoardConfig.mk and compile for each variant\nChange-Id: Ia0cc68d8e90e3316ddb2e9ff1555a009b6a0c5be\n"
    },
    {
      "commit": "fe55c272adf89ecf14c5aa068119bfadf2c28457",
      "tree": "d1a85abde4d938afe68cd1ce4c89c1cd4665d170",
      "parents": [
        "30144561a4953522cf495a68e4324e6ad01f24de",
        "27475b5105e30332dd2145e0bfba098b756673d9"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Thu May 31 22:32:32 2018 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu May 31 22:32:32 2018 +0000"
      },
      "message": "Merge \"Initialize __libc_sysinfo early on.\""
    },
    {
      "commit": "27475b5105e30332dd2145e0bfba098b756673d9",
      "tree": "02f72da22fcc8e2d2e8bf6db1e84d10f3365592c",
      "parents": [
        "cb5f4100060cd9894273863a973d622d6ebd2719"
      ],
      "author": {
        "name": "Ryan Prichard",
        "email": "rprichard@google.com",
        "time": "Thu May 17 17:14:18 2018 -0700"
      },
      "committer": {
        "name": "Ryan Prichard",
        "email": "rprichard@google.com",
        "time": "Wed May 30 16:44:23 2018 -0700"
      },
      "message": "Initialize __libc_sysinfo early on.\n\n__libc_sysinfo is hidden, so accessing it doesn\u0027t require a relocated GOT.\nIt is important not to have a relocatable initializer on __libc_sysinfo,\nbecause if it did have one, and if we initialized it before relocating the\nlinker, then on 32-bit x86 (which uses REL rather than RELA), the\nrelocation step would calculate the wrong addend and overwrite\n__libc_sysinfo with garbage.\n\nAsides:\n\n * It\u0027d be simpler to keep the __libc_sysinfo initializer for static\n   executables, but the loader pulls in libc_init_static (even though it\n   uses almost none of the code in that file, like __libc_init).\n\n * The loader has called __libc_init_sysinfo three times by the time it\n   has relocated itself. A static executable calls it twice, while libc.so\n   calls it only once.\n\nBug: none\nTest: lunch aosp_x86-userdebug ; emulator\nTest: adb shell /data/nativetest/bionic-unit-tests/bionic-unit-tests\nTest: adb shell /data/nativetest/bionic-unit-tests-static/bionic-unit-tests-static\nChange-Id: I5944f57847db7191608f4f83dde22b49e279e6cb\n"
    },
    {
      "commit": "ece43e14c959752ced0c7ebf3ba38b7917ba2ddc",
      "tree": "0418e94e8a394279d6fd9f0f6408ebccc035c297",
      "parents": [
        "8aa6d67f2d48aa01f099a85adc432097a13172f1"
      ],
      "author": {
        "name": "Haibo Huang",
        "email": "hhb@google.com",
        "time": "Sat May 26 13:07:43 2018 -0700"
      },
      "committer": {
        "name": "Haibo Huang",
        "email": "hhb@google.com",
        "time": "Wed May 30 11:09:19 2018 -0700"
      },
      "message": "Use cortex-a53/bionic/memmove.S by default for arm64\n\ncortex-a53/bionic/memmove.S looks like a more optimized version. It\nshould be used in most cases. It delegates small (\u003c\u003d 96 bytes) moves\nto memcpy.\n\nThe only exception is denver64. It is using its own memcpy, which\ndoesn\u0027t allow overlap for \u003c 96 bytes copies. Only for this variant we\nneed generic/bionic/memmove.S.\n\nBenchmark result looks pretty close through (on marlin)\n\nBefore: using generic/bionic/memmove.S\n\n-------------------------------------------------------------------\nBenchmark                            Time           CPU Iterations\n-------------------------------------------------------------------\nBM_string_memcpy/8/0/0               6 ns          6 ns  108872005   1.15787GB/s\nBM_string_memcpy/64/0/0              7 ns          7 ns  107387438   9.14365GB/s\nBM_string_memcpy/512/0/0            21 ns         20 ns   34165353   23.2734GB/s\nBM_string_memcpy/1024/0/0           40 ns         39 ns   17766657   24.2346GB/s\nBM_string_memcpy/8192/0/0          311 ns        310 ns    2259904   24.6339GB/s\nBM_string_memcpy/16384/0/0         616 ns        613 ns    1143027   24.8852GB/s\nBM_string_memcpy/32768/0/0        1322 ns       1316 ns     530799   23.1835GB/s\nBM_string_memcpy/65536/0/0        2672 ns       2661 ns     229638    22.937GB/s\nBM_string_memcpy/131072/0/0       5379 ns       5357 ns     128316    22.788GB/s\n\nAfter: using cortex-a53/bionic/memmove.S\n\n-------------------------------------------------------------------\nBenchmark                            Time           CPU Iterations\n-------------------------------------------------------------------\nBM_string_memcpy/8/0/0               6 ns          6 ns  116610749   1.24646GB/s\nBM_string_memcpy/64/0/0              6 ns          6 ns  115634093   9.84708GB/s\nBM_string_memcpy/512/0/0            21 ns         21 ns   34167322   22.8938GB/s\nBM_string_memcpy/1024/0/0           39 ns         39 ns   17859445   24.3312GB/s\nBM_string_memcpy/8192/0/0          311 ns        310 ns    2260192   24.6325GB/s\nBM_string_memcpy/16384/0/0         610 ns        608 ns    1151889   25.0987GB/s\nBM_string_memcpy/32768/0/0        1488 ns       1482 ns     532508   20.5988GB/s\nBM_string_memcpy/65536/0/0        2421 ns       2411 ns     290502   25.3146GB/s\nBM_string_memcpy/131072/0/0       5278 ns       5256 ns     132710   23.2234GB/s\n\nTest: Build and benchmark on marlin\nBug: http://b/63992911\nChange-Id: Id85961aca18ba841bcbcfe0d8b162843eab30584\n"
    },
    {
      "commit": "ebf58a6cefa7692702e3bd7abc88e09849391662",
      "tree": "10ff9d42e26e39b6623da446f7abb89a04c97b45",
      "parents": [
        "7caf313168f59c82126df90dc30b448f56e917db",
        "da46caee095766fca147317cc20636022c9106c2"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu May 24 23:53:36 2018 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu May 24 23:53:36 2018 +0000"
      },
      "message": "Merge \"Add generic arm non-neon memmove.\""
    },
    {
      "commit": "b2341cdfe315ed4d85580388ffb360fe449ee9d8",
      "tree": "5ccaa8e4fdb22f070f0ea9c45ac31bcb22432733",
      "parents": [
        "7bfc149b4365b32f16eae9bc072c3df3d11383a2",
        "26e1c41f5c5c79f6bf24d82e327f13da69ecb9de"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Thu May 24 23:47:56 2018 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu May 24 23:47:56 2018 +0000"
      },
      "message": "Merge \"Adapt to versioned_ndk_headers renaming.\""
    },
    {
      "commit": "da46caee095766fca147317cc20636022c9106c2",
      "tree": "9e476f4f8ebef5484f77781faef70d9e9996b7d4",
      "parents": [
        "7bfc149b4365b32f16eae9bc072c3df3d11383a2"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu May 24 14:40:32 2018 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu May 24 14:57:15 2018 -0700"
      },
      "message": "Add generic arm non-neon memmove.\n\nFrom OpenBSD.\n\nBug: http://b/63992911\nTest: ran tests\nChange-Id: If7d9166922776cdc9333ff04205f9c6312a812b3\n"
    },
    {
      "commit": "26e1c41f5c5c79f6bf24d82e327f13da69ecb9de",
      "tree": "09400f76bd4550db6d701eb0d277d6b583d309b8",
      "parents": [
        "4c5c45346fcc6f066a89bfc455f287fe2f4e3e41"
      ],
      "author": {
        "name": "Dan Albert",
        "email": "danalbert@google.com",
        "time": "Thu May 24 14:56:46 2018 -0700"
      },
      "committer": {
        "name": "Dan Albert",
        "email": "danalbert@google.com",
        "time": "Thu May 24 14:56:46 2018 -0700"
      },
      "message": "Adapt to versioned_ndk_headers renaming.\n\nTest: make checkbuild\nBug: None\nChange-Id: I89b931c8519eb4f336fb1a338d6b6518c50bcee1\n"
    },
    {
      "commit": "ecbff8382da95c8560482af81e496011715fd5e7",
      "tree": "6eec7f41b7120b0491d9a575ae5a5de725caaf1e",
      "parents": [
        "778a84f75ba959a100f2299caf2e166e38af2708"
      ],
      "author": {
        "name": "Chih-Hung Hsieh",
        "email": "chh@google.com",
        "time": "Wed May 23 18:45:53 2018 -0700"
      },
      "committer": {
        "name": "Chih-Hung Hsieh",
        "email": "chh@google.com",
        "time": "Wed May 23 18:45:53 2018 -0700"
      },
      "message": "Work around b/24465209, do not pack relocation table.\n\nGlobal flag --pack-dyn-relocs\u003dandroid is used with clang lld.\nFor b/24465209, we need to override that with --pack-dyn-relocs\u003dnone.\n\nBug: 80093890\nBug: 24465209\nTest: build with USE_CLANG_LLD\u003dtrue and run dlext.compat_elf_hash_and_relocation_tables\nChange-Id: Ic3837446ff0deccf4e66425b39d3b062abcacc5e\n"
    },
    {
      "commit": "0fc5df0fde88f49057ea28404e4a7e8b370b1cea",
      "tree": "1fdf7bf5f498a61908426c4324d2a43d951887ea",
      "parents": [
        "a6a56784e02d568c4965dcf5538dea48a472b7d1"
      ],
      "author": {
        "name": "Chih-Hung Hsieh",
        "email": "chh@google.com",
        "time": "Tue May 22 21:34:26 2018 -0700"
      },
      "committer": {
        "name": "Chih-hung Hsieh",
        "email": "chh@google.com",
        "time": "Wed May 23 17:14:22 2018 +0000"
      },
      "message": "Work around b/24465209, do not use clang lld\n\nSee longer explanation in b/80093890.\nClang lld does not generate expected DT_REL and DT_RELA tags\nwith --hash-style\u003dboth and --pack-dyn-relocs\u003dandroid.\nI am not sure about the extent of b/24465209, so\nI would rather not to use lld for these .so files for now.\n\nBug: 80093890\nBug: 24465209\nTest: build with USE_CLANG_LLD\u003dtrue and run dlext.compat_elf_hash_and_relocation_tables\nChange-Id: I94e9fe8d687daeadb0182ae26596ca11d3f8bd9b\n"
    },
    {
      "commit": "5603c6e6b9722cb8fcd1bd7a361b64c8dae47a50",
      "tree": "6d83ddddfdb31dd367bd882a256bef41de069771",
      "parents": [
        "af2eb6f40adc6c293a634cd7733536dc41302d8a"
      ],
      "author": {
        "name": "Jiyong Park",
        "email": "jiyong@google.com",
        "time": "Fri Apr 27 21:53:11 2018 +0900"
      },
      "committer": {
        "name": "Jiyong Park",
        "email": "jiyong@google.com",
        "time": "Mon May 14 18:08:01 2018 +0900"
      },
      "message": "Mark as recovery_available: true\n\nLibraries that are direct or indirect dependencies of modules installed\nto recovery partition (e.g. toybox) are marked as recovery_available:\ntrue. This allows a recovery variant of the lib is created when it is\ndepended by other recovery or recovery_available modules.\n\nBug: 67916654\nBug: 64960723\nBug: 63673171\nBug: 29921292\nTest: m -j\nChange-Id: I59bf859a10a218af6591025a0fe7d1853e328405\n"
    },
    {
      "commit": "4da58cf6304f5d71db196e95fb528e154f438e99",
      "tree": "457158eecc5f3f79ef131611a25d2314a428c05a",
      "parents": [
        "62a93ee1a0d26990ab4e57b2bb6b31b573a620d2"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Fri Apr 27 16:57:51 2018 -0700"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Fri May 11 00:43:01 2018 +0000"
      },
      "message": "Add support for cortex-a55/cortex-a75.\n\nBug: 78133793\nBug: 78242072\n\nTest: Builds and ran to verify best libc routines.\nChange-Id: I2299b8f0f6379c9003072764978ea917b74aee4f\nMerged-In: I2299b8f0f6379c9003072764978ea917b74aee4f\n(cherry picked from commit 3162eb3b810e6375931f7e901e3e40496edc12de)\n"
    },
    {
      "commit": "611ad621c670a94dadf51562b6256b24f1247981",
      "tree": "b3eba3e1135aaa45d353a174c9e159c2a3394b06",
      "parents": [
        "48227e66026724f9a94d9ff9cdef0aacae75b3a9"
      ],
      "author": {
        "name": "Jeremy Compostella",
        "email": "jeremy.compostella@intel.com",
        "time": "Tue Apr 10 16:16:14 2018 -0700"
      },
      "committer": {
        "name": "Jeremy Compostella",
        "email": "jeremy.compostella@intel.com",
        "time": "Thu Apr 12 14:00:43 2018 -0700"
      },
      "message": "Revert \"Add 64-bit slm optimized strlcpy and srlcat.\"\n\nThis reverts commit 2e7145c048e15bf6646befd70aa08d1bfe7b6c26.\n\nWhen src is at the end page, the sse2 strlcpy SSE2 optimized version\ncan issue a movdqu instruction that can cross the page boundary.  If\nthe next page is not allocated to that process, it leads to\nsegmentation fault.  This is a rare but has be caught multiple times\nduring robustness testing.\n\nWe isolated a way to reproduce that issue outside of an Android device\nand we have been able to resolve this particular case.  However, we\nran some additional compliance and robustness tests and found several\nother similar page crossing issues with this implementation.\n\nIn conclusion, this optimization needs to be re-written from scratch\nbecause its design is at cause.  In the meantime, it is better to\nremove it.\n\nChange-Id:  If90450de430ba9b7cd9282a422783beabd701f3d\nSigned-off-by: Jeremy Compostella \u003cjeremy.compostella@intel.com\u003e\n"
    },
    {
      "commit": "0b66dd441319c85c09779bae7f8a5192904c6bf3",
      "tree": "8d9e44554dbc1befcda1481bd5266b89a85ec831",
      "parents": [
        "9d641d518624f00e156bb9464ba271cc2034db1c"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Mar 15 14:17:55 2018 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Mar 15 14:17:55 2018 -0700"
      },
      "message": "Remove -Wno-uninitialized for libc.\n\nBug: N/A\nTest: builds\nChange-Id: I79e66374b4eeba671705fdc7728f19f3a5c1fa64\n"
    },
    {
      "commit": "71ba5899ae5857a6510f0fa05039dccee73bcc6a",
      "tree": "9d34769766ce10c95ecb32bc5ec25949007a0048",
      "parents": [
        "0a8d5f3eb8f4087b307f237943a19ae36b094ced"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Feb 07 12:44:45 2018 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Mar 05 17:20:12 2018 -0800"
      },
      "message": "Rewrite system(3) to use posix_spawn(3).\n\nWe saw crashes from pthread_exit+debuggerd on LP32\n(https://issuetracker.google.com/72291624), and it seems like the\nequivalent problem should exist with system(3). I fixed posix_spawn(3)\nas part of that bug, so the easiest fix is probably to reuse that.\n\nBug: http://b/72470344\nTest: ran tests\nChange-Id: I05f838706f2b4a14ac3ee21292833e6c8579b0d4\n"
    },
    {
      "commit": "7ae39129e12b12bfc5cef54432c9598e7d4dfc7e",
      "tree": "cc8cbbb3ab4813748e868f02c025cc247b7d685d",
      "parents": [
        "9c85408d953ea543cc58ea2c1c48b2c65390e834"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Feb 26 16:49:43 2018 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Feb 26 16:59:37 2018 -0800"
      },
      "message": "Move sigprocmask into its own file.\n\nOtherwise clang inlines it into pthread_sigmask(3), which breaks libsigchain.\n\nBug: http://b/73344857\nTest: ran tests, plus the app this broke\nChange-Id: Ie4a1dc8f9c6ba58d1a2fa69aeff961c70b74767d\n"
    },
    {
      "commit": "8f419579ed27a86d140cc496196b5c0e577e4848",
      "tree": "ca41d80b55677c2d1ce7e6137508bf305fe06d4b",
      "parents": [
        "ee8e3dd67c910907115c7cef87be3d898d71a05d"
      ],
      "author": {
        "name": "Ryan Prichard",
        "email": "rprichard@google.com",
        "time": "Tue Feb 20 17:09:05 2018 -0800"
      },
      "committer": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Wed Feb 21 15:10:24 2018 -0800"
      },
      "message": "Reject exit-time destructors in libc\n\nTest: m libc\nBug: b/73485611\nChange-Id: Idc5da0f8a21e3f58fc68085577fa5fca40057276\n"
    },
    {
      "commit": "25f17e48df2e5e9e88b0c5cd2ebeded33c7cedc0",
      "tree": "f117b124c5aa047b3a4d922526040b8c894aef7c",
      "parents": [
        "919dd9dcb4ca547a67079b85494236cd5f680598"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Feb 12 15:48:01 2018 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Feb 12 15:48:01 2018 -0800"
      },
      "message": "Better backwards compatibility for stat64.\n\nCaused problems for some Google source switching to unified headers\nbecause the legacy headers just used #define instead.\n\nBug: http://b/73210428\nTest: builds\nChange-Id: If8a36f284031e57af419903610029a8c34a23d91\n"
    },
    {
      "commit": "ab8c86159738a774ca99a5b3311e5e3b81fc8ce9",
      "tree": "a35165b08fe9fcd81d936d5a3ae2eadee6e2dc48",
      "parents": [
        "4362da80760ef76af310280e70fddb6b6d3d043f",
        "6034ef85d86675d063d6b1920e85e4c471b95904"
      ],
      "author": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Mon Feb 12 16:27:20 2018 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Feb 12 16:27:20 2018 +0000"
      },
      "message": "Merge \"Add ability to read /etc/passwd and /etc/group\""
    },
    {
      "commit": "6034ef85d86675d063d6b1920e85e4c471b95904",
      "tree": "717a7dfe7c2778a81919f04cccd1cbaf43f9297d",
      "parents": [
        "4cd3550d50cb14efe3d86ab9732ce75def5b85bd"
      ],
      "author": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Fri Feb 02 16:10:07 2018 -0800"
      },
      "committer": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Thu Feb 08 12:38:57 2018 -0800"
      },
      "message": "Add ability to read /etc/passwd and /etc/group\n\nAdd the capability to read /etc/passwd and /etc/group for getpw* and\ngetgr* functions.\n\nBug: 27999086\nTest: pwd, grp, grp_pwd_file unit tests\nTest: Read in custom users/groups from /etc/{passwd,group}\nChange-Id: Idc1f054af8a7ca34743a90493495f0ccc775a0d8\n"
    },
    {
      "commit": "0f546f45d7a748fb30b7611b63572dd3e50816c6",
      "tree": "89f1c14cde53a3648c35dcc6ede2cd2c4de10c45",
      "parents": [
        "a325151da0dec4d488a9e1cc93a29a561dd00578",
        "d50a1de565c00d415ad39ef8c14e392da4c99d43"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Tue Feb 06 03:58:23 2018 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Feb 06 03:58:23 2018 +0000"
      },
      "message": "Merge \"Run bpfmt manually.\""
    },
    {
      "commit": "d50a1de565c00d415ad39ef8c14e392da4c99d43",
      "tree": "011e021bbb021d83634d00ffa3255ebd7d468cfe",
      "parents": [
        "a70089163ca09a983772dd2a8daa17e47f8ede53"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Feb 05 17:30:57 2018 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Feb 05 17:30:57 2018 -0800"
      },
      "message": "Run bpfmt manually.\n\nBug: N/A\nTest: builds\nChange-Id: I0cf145c3b699ac8ef170a63366832f63a9cc1a91\n"
    },
    {
      "commit": "211c4d35f2a6bea0a3ff1bb1215ec5df9a6115b5",
      "tree": "711bb56de3483b6dff3aef90109038f40435e612",
      "parents": [
        "12d96ed7f59d1e463df581ad6ec7ccfc87d9ef5d"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Feb 02 15:10:32 2018 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Feb 05 12:57:22 2018 -0800"
      },
      "message": "Rewrite getentropy.\n\nThe error handling was a mess, resulting in an infinite loop\n(and a test timeout) if you actually took the /dev/urandom\nfallback. I\u0027m also unconvinced that the getrandom(2) path was correct\nbecause of the various reasons why we might get a short count back\n(http://man7.org/linux/man-pages/man2/getrandom.2.html). In this version,\nthe two paths look very similar except for the getrandom(2) failure case,\nwhere it\u0027s now much clearer that we just give up so that we can boot\n(http://b/33059407).\n\nBug: http://b/33059407\nBug: http://b/67015565\nTest: ran tests on hikey and a ICS Galaxy Nexus\nChange-Id: Ie715d59b46f7a70bae66943c316168838787b40d\n"
    },
    {
      "commit": "5905d6f8797056ca4178d42bf1220b6692e557a5",
      "tree": "222848ae0ced32fcf2028a2c6502b4a763c83830",
      "parents": [
        "d435d256da57fdf4278b3198720d881f3edcf452"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Jan 30 15:09:51 2018 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Jan 30 18:47:16 2018 -0800"
      },
      "message": "Add `sigset64_t` and accompanying functions.\n\nThis doesn\u0027t address `struct sigaction` and `sigaction`. That will\ncome later.\n\nBug: http://b/72493232\nTest: ran tests\nChange-Id: I4134346757ce3a4dac6feae413361cec16223386\n"
    },
    {
      "commit": "6dafb4ac781fea2950180048ce903d2a6bbeda39",
      "tree": "610f24970a195ec6e235790651a0eb3285aaf9b9",
      "parents": [
        "2e2a8930e5f9eb2d9ea4fdb61f746c6f2e2048ac"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Jan 26 17:47:56 2018 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Jan 26 17:47:56 2018 -0800"
      },
      "message": "Move all the short \u003csignal.h\u003e functions together.\n\nBug: N/A\nTest: ran tests\nChange-Id: Ie5509e4108efcd5d403227ce99bef2b61c79f757\n"
    },
    {
      "commit": "40f15ec4b19140734d632a4ed32289fd4f2c4e32",
      "tree": "027e114066a88c59917bc2d35574c1dd9debfe38",
      "parents": [
        "88e61da8a7f75d189ec6f79c412392179ee0356e"
      ],
      "author": {
        "name": "Dan Albert",
        "email": "danalbert@google.com",
        "time": "Fri Oct 27 11:21:20 2017 -0700"
      },
      "committer": {
        "name": "Dan Albert",
        "email": "danalbert@google.com",
        "time": "Mon Jan 22 12:40:56 2018 -0800"
      },
      "message": "Package bionic static libraries in the NDK.\n\nTest: build/soong/scripts/build-ndk-prebuilts.sh\nBug: https://github.com/android-ndk/ndk/issues/272\nChange-Id: Ibb21d799fdcf230ed45db0b809e20dd86d2d8e52\n"
    },
    {
      "commit": "3048a36a34c5124a435df8a1d343b791f59a7f0b",
      "tree": "faa8a603ab38fdde244f7121527291e7e9c7b86c",
      "parents": [
        "2b66844a0beffff0d2fcf20938e64cdd387131ac"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Jan 19 17:58:07 2018 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Jan 19 17:58:07 2018 -0800"
      },
      "message": "Simplify CT_CCL and CT_STRING inner loop.\n\nMakes no difference to the benchmarks, but does make the code a bit\nmore readable.\n\nBug: http://b/68672236\nTest: ran tests, benchmarks\nChange-Id: I63fa5f78d077c86e4f4f194f2c76ab5510c29109\n"
    },
    {
      "commit": "2b66844a0beffff0d2fcf20938e64cdd387131ac",
      "tree": "c3882636c464bd981f06ac7f99ff136e68c636b4",
      "parents": [
        "df4c92888e6283c8f6f1731391a6bccbc30d64db",
        "38e4aefe6c7804d809cfe9e05619ac1a6935e565"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Sat Jan 20 01:17:25 2018 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Sat Jan 20 01:17:25 2018 +0000"
      },
      "message": "Merge \"Support %mc/%ms/%m[ in sscanf.\""
    },
    {
      "commit": "38e4aefe6c7804d809cfe9e05619ac1a6935e565",
      "tree": "162d29d0e7128f5e7fdf59bb6ad072cc57d79d0a",
      "parents": [
        "0d63a3c233040af004cc470d5f76547f3adc0148"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Jan 18 10:21:29 2018 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Jan 19 14:53:55 2018 -0800"
      },
      "message": "Support %mc/%ms/%m[ in sscanf.\n\nAlso support the \"long\" (wchar_t) variants.\n\nBug: http://b/68672236\nTest: ran tests\nChange-Id: I060e98b4d2feb61e12986d9d51e4710b2b1d9724\n"
    },
    {
      "commit": "b6310c2aa704bd30990f4e3152e494b5290972b2",
      "tree": "818a92a3148fa0ec488d11b5281bc4026b7ca5dc",
      "parents": [
        "ee88e76f14111ea94745d7eec6caca9ffb526f1a"
      ],
      "author": {
        "name": "Ian Pedowitz",
        "email": "ijpedowitz@google.com",
        "time": "Thu Jan 18 16:26:19 2018 -0800"
      },
      "committer": {
        "name": "Ian Pedowitz",
        "email": "ijpedowitz@google.com",
        "time": "Thu Jan 18 16:26:45 2018 -0800"
      },
      "message": "Fixing app compat issue b/72143978\n\nThis is a squash revert of a4a4854 and 1b0f2b4\n\n  Revert \"Remove a test for backwards compatibility we no longer support.\"\n\n  This reverts commit a4a485454a3a117eccdca1113681f770d765d865.\n\n  # This is the commit message #2:\n\n  Revert \"Remove obsolete workaround.\"\n\n  This reverts commit 1b0f2b49d528c90842b4263269d9039d7e07415e.\n\nBug: 72143978\nBug: 24465209\nTest: Tested failing case on sailfish, reverted back all CL\u0027s since\nTest: 3471433 for b/24465209 and apps open\n"
    },
    {
      "commit": "f1515f64087e4635a7f53d0e1725240f91a0c4b1",
      "tree": "7a9924fa106ddd80aed09d9bf7eee0b576dfda57",
      "parents": [
        "25a3087d6dde58e126c5ecb1033319ff333fcc59"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Jan 12 15:20:28 2018 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Jan 12 15:20:28 2018 -0800"
      },
      "message": "Clean up the time(2) implementation.\n\nThis is also slightly faster for the no VDSO case (56ns vs 66ns).\n\nBug: N/A\nTest: ran tests, benchmarks\nChange-Id: I2b0edd06ee6942eb57c32678279278a53ca5ee9b\n"
    },
    {
      "commit": "1b0f2b49d528c90842b4263269d9039d7e07415e",
      "tree": "1be7ae23d7716db86552beca0064cf6e74e7d6e3",
      "parents": [
        "a238a9a32815f63b286d8383f7f73e2319472583"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Jan 10 11:05:19 2018 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Jan 10 11:05:19 2018 -0800"
      },
      "message": "Remove obsolete workaround.\n\nBug: http://b/24465209\nTest: manually ran the app.\nChange-Id: I1e2a498864c74ff3a9886b97f7dc60ad7f6dfa44\n"
    },
    {
      "commit": "a238a9a32815f63b286d8383f7f73e2319472583",
      "tree": "2de1da4de2774b2788b87d97cc357780190d667f",
      "parents": [
        "41971399cf330f2b3170d45442319b31989b25f3",
        "06016f226efe7aff2736643cb8e719c513948ecc"
      ],
      "author": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Wed Jan 10 13:50:01 2018 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Jan 10 13:50:01 2018 +0000"
      },
      "message": "Merge \"Fix dlclose for libraries with thread_local dtors\""
    },
    {
      "commit": "06016f226efe7aff2736643cb8e719c513948ecc",
      "tree": "9966630fba35664dc74ac357c43dc81257115410",
      "parents": [
        "581723ebc7acdbf8b095b44928dac3d0767382fa"
      ],
      "author": {
        "name": "dimitry",
        "email": "dimitry@google.com",
        "time": "Fri Jan 05 11:39:28 2018 +0100"
      },
      "committer": {
        "name": "dimitry",
        "email": "dimitry@google.com",
        "time": "Wed Jan 10 10:24:06 2018 +0100"
      },
      "message": "Fix dlclose for libraries with thread_local dtors\n\nIntroduce new flag to mark soinfo as TLS_NODELETE when\nthere are thread_local dtors associated with dso_handle\nbelonging to it.\n\nTest: bionic-unit-tests --gtest_filter\u003ddl*\nTest: bionic-unit-tests-glibc --gtest_filter\u003ddl*\nBug: https://github.com/android-ndk/ndk/issues/360\nChange-Id: I724ef89fc899788f95c47e6372c38b3313f18fed\n"
    },
    {
      "commit": "ca056d742f0d83e586a0ebf2cd75cae8f625ce7e",
      "tree": "498605c1609faf4adf5bfce628bb3ab5d6dead6e",
      "parents": [
        "f9fcb1efae7458109b13260d7a7f8db939a1aa2c"
      ],
      "author": {
        "name": "Dan Willemsen",
        "email": "dwillemsen@google.com",
        "time": "Mon Jan 08 14:00:24 2018 -0800"
      },
      "committer": {
        "name": "Dan Willemsen",
        "email": "dwillemsen@google.com",
        "time": "Mon Jan 08 14:00:24 2018 -0800"
      },
      "message": "Expose kernel input headers for toolbox\n\nToolbox is moving to Android.bp, and its genrule needs access to these\nkernel headers.\n\nTest: mmma system/core/toolbox\nChange-Id: I213a36e1f4bb5d4e3e3e105ed7ab01ec945014a2\n"
    },
    {
      "commit": "9dc37b9439063df2b0db6d1b3a37b491bc3cd427",
      "tree": "875c7be62c7bdb0bcfa8be79350e6b053d825603",
      "parents": [
        "811a1dd8680ccc0c052651cb30ecf6416613c627",
        "1921dce886c8ea17fb7958b59a18a71b6dc7ff96"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Dec 20 00:05:57 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Dec 20 00:05:57 2017 +0000"
      },
      "message": "Merge \"Refactor the ato* and strto* family.\""
    },
    {
      "commit": "1921dce886c8ea17fb7958b59a18a71b6dc7ff96",
      "tree": "7e28abec7cf31f9e06ebe79472e35a8b12af5ed2",
      "parents": [
        "721a5305e24b69b68ecc9431526f32131abc8f6c"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Dec 19 10:27:27 2017 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Dec 19 13:55:54 2017 -0800"
      },
      "message": "Refactor the ato* and strto* family.\n\nThere are no meaningful changes here, just a minimal conversion to two\nC++ templates to make further changes easier.\n\nBug: N/A\nTest: ran tests, benchmarks\nChange-Id: I958fbf17a85f19dd8f17bfb4bbb9314d220daa3b\n"
    },
    {
      "commit": "e275d6d72db1868056a204e8483a7346a28cb8d6",
      "tree": "3191e33ca242518f7d486c6b37212c7f682498b0",
      "parents": [
        "721a5305e24b69b68ecc9431526f32131abc8f6c"
      ],
      "author": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Mon Dec 11 23:31:33 2017 -0800"
      },
      "committer": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Mon Dec 18 15:17:55 2017 -0800"
      },
      "message": "Split properties into their own class to make testing better\n\nReinitializing system properties can result in crashes later in the\nprogram, and is generally not recommended or even supported.  This\nchange moves the actual logic for system properties into a class that\ncan be tested in isolation, without reinitializing the actual system\nproperty area used in libc.\n\nBug: 62197783\nTest: boot devices, ensure properties work\nTest: system property unit tests and benchmarks\nChange-Id: I9ae6e1b56c62f51a4d3fdb5b62b8926cef545649\n"
    },
    {
      "commit": "b9d5a87b1b63095d7ad7a3d87d8d110d1662fcaa",
      "tree": "98b230bc67779a8da0d8fc085c4f2b32f8c8502f",
      "parents": [
        "59a6ee963f96eedf01df7db1e57397ff71852b15",
        "96bbc5ca87b0cfbcab3bd9e5fc49b71420bf3c08"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Fri Dec 15 17:41:27 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Dec 15 17:41:27 2017 +0000"
      },
      "message": "Merge \"Use treble_linker_namespace instead of treble.\""
    },
    {
      "commit": "96bbc5ca87b0cfbcab3bd9e5fc49b71420bf3c08",
      "tree": "1980633e8aa554996f4c16a85e0e976bf34d80fe",
      "parents": [
        "78b40e8fe1f37de319344c92d8e6e1eb595c1067"
      ],
      "author": {
        "name": "Steven Moreland",
        "email": "smoreland@google.com",
        "time": "Wed Dec 13 14:11:26 2017 -0800"
      },
      "committer": {
        "name": "Steven Moreland",
        "email": "smoreland@google.com",
        "time": "Wed Dec 13 14:11:26 2017 -0800"
      },
      "message": "Use treble_linker_namespace instead of treble.\n\nMore specific. Treble is being removed.\n\nBug: 62019611\nTest: manual\nChange-Id: I94c21c6a5cb6a258bfb36a0b7da23abdc73a67fb\n"
    },
    {
      "commit": "e6e8f6ee77ac0be9b950ddd94f52ebcefe4433ce",
      "tree": "e9f19eaab6d54c42730a8fb3fe96a455ac008b11",
      "parents": [
        "eb7347aedbc61ba45555aef3e6e863f0d90b407b",
        "79b724ca5a33e5dff7c2530b2649648021c1258d"
      ],
      "author": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Wed Dec 13 01:28:29 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Dec 13 01:28:29 2017 +0000"
      },
      "message": "Merge \"Add support for serialized property contexts\""
    },
    {
      "commit": "79b724ca5a33e5dff7c2530b2649648021c1258d",
      "tree": "703e81d1d3c41fe093f4747d4d7d4324427dde2c",
      "parents": [
        "78b40e8fe1f37de319344c92d8e6e1eb595c1067"
      ],
      "author": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Fri Nov 17 17:14:05 2017 -0800"
      },
      "committer": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Tue Dec 12 00:36:20 2017 -0800"
      },
      "message": "Add support for serialized property contexts\n\nThis adds support for reading a serialized\n/dev/__properties__/property_info file, which contains a\nserialized trie that maps property names to the SELinux context to\nwhich they belong.\n\nPerformance wise on walleye, this change reduces the start up cost in\nlibc from ~3000us to ~430us.  On a benchmark that calls\n__system_property_find() for each property set on the system, it\nreduces the time per iteration from ~650us to ~292us.\n\nBug: 36001741\nTest: Boot bullhead, walleye, run unit tests\nTest: Benchmark initialization and lookup performance\n\nChange-Id: I0887a3a7da88eb51b6d1bd494fa5bce593423599\n"
    },
    {
      "commit": "ee291c021c58cd1e0f235572c4ad2f9813b51cdc",
      "tree": "05c92a0322d611f2758dbe277acf5b14a7d553c5",
      "parents": [
        "d351581aa9ba1fbce227db35500471fe59c45f08"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Dec 11 11:32:34 2017 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Dec 11 11:32:34 2017 -0800"
      },
      "message": "Explain why the mips/mips64 ndk headers need to be present.\n\nBug: N/A\nTest: N/A\nChange-Id: I70e3a043884784d86a9a3ec7066d945803481b54\n"
    },
    {
      "commit": "790d2f7161328a281de68252894b80689a820e90",
      "tree": "449a11a1410a8a72a40811a37de805a40987966f",
      "parents": [
        "b7d6df2b61f7941e24d362105a43950da6f2da05"
      ],
      "author": {
        "name": "Lazar Trsic",
        "email": "Lazar.Trsic@mips.com",
        "time": "Mon Nov 27 11:54:11 2017 +0100"
      },
      "committer": {
        "name": "Lazar Trsic",
        "email": "Lazar.Trsic@mips.com",
        "time": "Mon Nov 27 16:48:14 2017 +0100"
      },
      "message": "Revert \"Remove mips/mips64 headers from the NDK sysroot.\"\n\nThis reverts commit 050f046d3d3685c5419b265efe83da67a6e016bb.\n\nChange-Id: I2549dfccced02b61383cd9e534bfd34cf1d6dba1\n"
    },
    {
      "commit": "b7d6df2b61f7941e24d362105a43950da6f2da05",
      "tree": "9c5f0893d8e2df1a4ddd003188f5496dc7f04f81",
      "parents": [
        "8fb8c61e4854c7383b18a643713b7f19b6987b62",
        "5e7c90b7f1d6e6e14f8571f36b7c5548f4fa5de6"
      ],
      "author": {
        "name": "Isaac Chen",
        "email": "ycchen@google.com",
        "time": "Thu Nov 23 09:08:24 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Nov 23 09:08:24 2017 +0000"
      },
      "message": "Merge \"Optimize libc for generic armv7/armv8 neon cores\""
    },
    {
      "commit": "fd44b9f8d89ce4f33ff39d7f340a5ed08029d21c",
      "tree": "24268cde0a4afd99c6500691f949687c65ce5985",
      "parents": [
        "0793e3dd07b8ecb5bd0a0e91740f68f42f4f7e60"
      ],
      "author": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Wed Nov 08 14:01:00 2017 -0800"
      },
      "committer": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Tue Nov 14 08:50:52 2017 -0800"
      },
      "message": "Split system_properties.cpp into its component pieces\n\nsystem_properties.cpp is a little bit unmanageable in its current\nform, and is overdue for a refactoring into more clearly defined\ncomponents.\n\nOf particular interest, is creating of a Contexts interface that\nhandles mapping of system property name -\u003e SEContext and its\nassociated prop_area, and creating two classes that implement the\ncurrent and legacy functionality.  This is needed as there will likely\nbe a third even newer way to do this mapping.\n\nBug: 36001741\nTest: boot bullhead, system property unit tests\nChange-Id: Ie75ec6fea1a95f90813918f54669d533e51327c6\n"
    },
    {
      "commit": "db4f3346958684424815720ca00a56c75fc536e0",
      "tree": "34a3ce2d28d787895f118017c0c873ca52882989",
      "parents": [
        "8697f10e747eada34fa91d838c1ce95b687068f5",
        "7d7b368a44f8531805618d58ef78efa21b3a1cea"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Mon Nov 06 22:09:22 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Nov 06 22:09:22 2017 +0000"
      },
      "message": "Merge \"Clean up crt defaults\""
    },
    {
      "commit": "8697f10e747eada34fa91d838c1ce95b687068f5",
      "tree": "1a244cf548ec7672de884ab071753b3e84e35726",
      "parents": [
        "2ca61ebe970c7980107437c3bcc1d6d3485e9547",
        "6a2610dbd3a865505df3661f0ae435ad8e07c043"
      ],
      "author": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Mon Nov 06 18:59:00 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Nov 06 18:59:00 2017 +0000"
      },
      "message": "Merge \"Remove no_default_compiler_flags from crt*\""
    },
    {
      "commit": "7d7b368a44f8531805618d58ef78efa21b3a1cea",
      "tree": "00bab86ca9dc0ed0eb0626b07c73475bd6fd8482",
      "parents": [
        "6a2610dbd3a865505df3661f0ae435ad8e07c043"
      ],
      "author": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Fri Nov 03 13:38:40 2017 -0700"
      },
      "committer": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Fri Nov 03 13:38:40 2017 -0700"
      },
      "message": "Clean up crt defaults\n\nMake crt_so_defaults inherit from crt_defaults, remove duplicates\nfrom crt_so_defaults, and make the users of crt_so_defaults not\ndirectly use crt_defaults.\n\nTest: m checkbuild\nChange-Id: I1448a5a4c86521b994fd4d79120e0b7d3a9c5ba9\n"
    },
    {
      "commit": "6a2610dbd3a865505df3661f0ae435ad8e07c043",
      "tree": "fa7a6484a9a729371a8fc573622b26af8acbe43a",
      "parents": [
        "232541aa02e22ab8fafcdd503c74aae22fa09699"
      ],
      "author": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Fri Nov 03 13:37:42 2017 -0700"
      },
      "committer": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Fri Nov 03 13:37:42 2017 -0700"
      },
      "message": "Remove no_default_compiler_flags from crt*\n\nno_default_compiler_flags is unnecessary and causes problems when\nnecessary flags like -no-canonical-prefixes are not passed.\n\nBug: 68719465\nTest: m checkbuild\nChange-Id: Ifdc68067eb3208b151b0a96820aa9a57b82db057\n"
    },
    {
      "commit": "050f046d3d3685c5419b265efe83da67a6e016bb",
      "tree": "acf3e538ccf260d0fb0ee9d8199334bedb14e625",
      "parents": [
        "232541aa02e22ab8fafcdd503c74aae22fa09699"
      ],
      "author": {
        "name": "Dan Albert",
        "email": "danalbert@google.com",
        "time": "Fri Nov 03 12:02:50 2017 -0700"
      },
      "committer": {
        "name": "Dan Albert",
        "email": "danalbert@google.com",
        "time": "Fri Nov 03 12:02:50 2017 -0700"
      },
      "message": "Remove mips/mips64 headers from the NDK sysroot.\n\nTest: build/soong/scripts/build-ndk-prebuilts.sh\nBug: None\nChange-Id: Iac212939636abbbf8402c85c5e89c724fb531c91\n"
    },
    {
      "commit": "2f9c8ce38a885791dfa4cefb6370b5025c55ae82",
      "tree": "efbdbe306e126b1bad2d3bd455e23e49639f0a64",
      "parents": [
        "0cbbdaa5cfa131e33dbfc80ce9b34c9fe1523f08"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Nov 01 13:54:47 2017 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Nov 01 18:13:36 2017 -0700"
      },
      "message": "Start de-duplicating the regular and wide printf implementations.\n\nThis patch switches to C++ (in anticipation of needing it later), removes\na little duplication (via a macro for now), and ensures uniform support\nfor %C/%lc and %S/%ls between regular and wide (with new tests).\n\nSince it\u0027s so hard to debug problems in printf (as the time I\u0027ve wasted\nalready today will testify), that\u0027s all I want to do in this change. The\nother 500 lines of diff can wait...\n\n(Also merge \"floatio.h\" into \"local.h\" now all the users are in forked\ncode.)\n\nBug: http://b/67371539\nTest: ran tests\nChange-Id: I083353d89c32b9302d759ca6967cc6d8a62cd8a5\n"
    },
    {
      "commit": "07e412419b63a9055465515845d7542e5e87176b",
      "tree": "6eaf8d440565181b8422d1a90c157e2ef9541774",
      "parents": [
        "555a6d19c8691519d24d1415b5749ac0b447f5cc",
        "37ad9597839c70a7ec79578e5072df9c189fc830"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Tue Oct 31 22:43:34 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Oct 31 22:43:34 2017 +0000"
      },
      "message": "Merge \"More missing _unlocked \u003cstdio.h\u003e functions.\""
    },
    {
      "commit": "37ad9597839c70a7ec79578e5072df9c189fc830",
      "tree": "f1f70a143c99b072b040f5592f1b42da464b35f8",
      "parents": [
        "e379a202504911d228ae07d9ba32c5a02274fe1d"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Oct 30 17:47:12 2017 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Oct 31 13:23:41 2017 -0700"
      },
      "message": "More missing _unlocked \u003cstdio.h\u003e functions.\n\nAlso simplify trivial one-liners like perror/puts/fputs, and clean up\nfread/fwrite slightly.\n\nFix perror to match POSIX.\n\nAdd basic perror and *_unlocked tests.\n\nBug: N/A\nTest: ran tests\nChange-Id: I63f83c8e0c15c3c4096509d17421ac331b6fc23d\n"
    },
    {
      "commit": "3a589c23626c64b34ec6840271033c9ff486c8c5",
      "tree": "240bcbe8483839db6c439445535b9ef047888982",
      "parents": [
        "e379a202504911d228ae07d9ba32c5a02274fe1d"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Oct 30 11:43:58 2017 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Oct 30 11:43:58 2017 -0700"
      },
      "message": "Fork vfprintf.c/vfwprintf.c.\n\nFuture changes will start reducing the duplication...\n\nBug: http://b/67371539\nTest: ran tests\nChange-Id: I477afea34f9e1f41817823984bd0548944ee5eec\n"
    },
    {
      "commit": "cc3d04f03ac0c3d60d00ae021f41f3610bb3b3eb",
      "tree": "83fc235a8357f5b12802ccc3538dd14d38cef456",
      "parents": [
        "c6291b081d2089ba7a16d7777fb2713d828d537f"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Oct 26 15:38:06 2017 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Oct 26 16:16:33 2017 -0700"
      },
      "message": "Add null checks to \u003cdirent.h\u003e functions.\n\nMove all the new checks over to the existing __fortify_fatal.\n\nBug: http://b/67455242\nTest: ran tests\nChange-Id: Idb899c58c32d52d3b423caf1a91feb7defcba9b3\n"
    },
    {
      "commit": "fa386e0d1eb52478f11b7232d280919245c1616c",
      "tree": "fcfb7d65c39ec91e1b1ec5bedeefe806861d21c4",
      "parents": [
        "ab9dc08bdd60d3709e1bce555625d923b32812be"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Oct 18 13:34:32 2017 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Oct 18 13:34:32 2017 -0700"
      },
      "message": "Add POSIX swab.\n\nSurprisingly to me, there are actual uses of `swab` in the codebases\nI have available to search, including one with a #ifndef __ANDROID__\naround it.\n\nBug: N/A\nTest: ran tests\nChange-Id: Ic91b78ae22bb65c346cb46dd38916f48d979abe0\n"
    },
    {
      "commit": "0e0e370154ea478c9d7102061cbb62d9bfea6c1d",
      "tree": "8a39ea9040d36a498bfb15815d16aa49f1bc06bb",
      "parents": [
        "a0f6dc577e1bf63e199599d8dc79311a3083aec2"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Thu Oct 12 13:34:42 2017 -0700"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Mon Oct 16 21:31:37 2017 -0700"
      },
      "message": "Add libc_nopthread.\n\nAdd a static library containing the non-pthread dependent parts of\nlibc.\n\nBug: http://b/64400027\nTest: sailfish boots\nTest: bionic-unit-tests32/64, no new failures\nTest: bionic-unit-tests-static32/64, no new failures\nChange-Id: I93dc3811acddad7936d11b369b98cefd945ee2d5\n"
    },
    {
      "commit": "ddd6436df2adef2e195cf45634750a31c3e03bd1",
      "tree": "ae58a01e0582b0a5b19f7545b048e56756993052",
      "parents": [
        "01bb7bf6fb6b5b43c4b1ff00be79b64f01015691",
        "d4ca231ae2891e5c9eccb6e9a2e6af7fabcfc2a5"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Oct 12 22:23:58 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Oct 12 22:23:58 2017 +0000"
      },
      "message": "Merge \"Unified sysroot: kill arch-specific include dirs.\""
    },
    {
      "commit": "d4ca231ae2891e5c9eccb6e9a2e6af7fabcfc2a5",
      "tree": "4ffbf1b6c0d0acb3df88b1ce02d574eeaead3f0a",
      "parents": [
        "36f7b8b7891f0af56eb61e7d32cc8cedb5ded8de"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Oct 11 22:27:45 2017 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Oct 12 13:19:51 2017 -0700"
      },
      "message": "Unified sysroot: kill arch-specific include dirs.\n\n\u003cmachine/asm.h\u003e was internal use only.\n\n\u003cmachine/fenv.h\u003e is quite large, but can live in \u003cbits/...\u003e.\n\n\u003cmachine/regdef.h\u003e is trivially replaced by saying $x instead of x in\nour assembler.\n\n\u003cmachine/setjmp.h\u003e is trivially inlined into \u003csetjmp.h\u003e.\n\n\u003csgidefs.h\u003e is unused.\n\nBug: N/A\nTest: builds\nChange-Id: Id05dbab43a2f9537486efb8f27a5ef167b055815\n"
    },
    {
      "commit": "14e3ff9f09fdd52db43628ccd6f39a6d3fb41740",
      "tree": "8ed0ba1d0744ac95265e2ea634b6e1ff8d72d88c",
      "parents": [
        "e387c2f08841ac0f6578e903ab21b54d01f3266e"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Oct 06 16:58:36 2017 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Oct 11 14:57:49 2017 -0700"
      },
      "message": "Implement \u003cspawn.h\u003e.\n\nAs described here:\n\n  http://pubs.opengroup.org/onlinepubs/9699919799/functions/posix_spawn.html\n\nAnd here:\n\n  http://man7.org/linux/man-pages/man3/posix_spawn.3.html\n\nBug: N/A (but mentioned in my inbox since 2013)\nTest: ran tests\nChange-Id: I0b27b2919b660779e3bd8a25fb429527c16dc621\n"
    },
    {
      "commit": "5e7c90b7f1d6e6e14f8571f36b7c5548f4fa5de6",
      "tree": "b15501e91ee7058b7073abd78bced93d0f5adc7c",
      "parents": [
        "6e6e1abb89913463778ae7559dd6b70049c52216"
      ],
      "author": {
        "name": "Isaac Chen",
        "email": "ycchen@google.com",
        "time": "Wed Sep 20 14:44:42 2017 +0800"
      },
      "committer": {
        "name": "Isaac Chen",
        "email": "ycchen@google.com",
        "time": "Wed Oct 11 19:12:21 2017 +0800"
      },
      "message": "Optimize libc for generic armv7/armv8 neon cores\n\nIf (2nd) arch is \"arm\", (2nd) arch variant is \"armv7-a-neon\" or\n\"armv8-a\", and (2nd) cpu variant is \"generic\", current Android.bp only\nuses generic ARM assmebly or C code, even though they all have NEON.\n\nThis change use functions optimized for cortex-a15 (for these generic\ncores), which are a reasonable balance for most ARM cores with Neon.\n\nAlso build script for specific armv7/armv8 cores are refactored to\ntake advantage of the common part (mostly cortex-a15 code), so more\nthan 150 repeated lines are removed.\n\nBug: 66064745\nTest: For armv7-a-neon/armv8-a \"generic\" core\n       - boot with GSI on sailfish\n       - related cortex-a15 function are built and linked.\n      All libc.a/libc.so built are identical for the following cores:\n       - cortex-a7, cortex-a8, cortex-a9, cortex-a15, krait\n       - cortex-a53, cortex-a53.a57, cortex-a73, denver, kryo\n      $ lunch aosp_arm64 # with TARGET_2ND_CPU_VARIANT unset\n      # For each $core listed above\n      $ TARGET_2ND_CPU_VARIANT\u003d$core m -e -j libc\nChange-Id: Ia565d3ea09e034adcd014e7467a5b791cff908cb\n"
    },
    {
      "commit": "93ea09f65c59585c082797bbfa4f4c7778d6e8b9",
      "tree": "635acc213edb1ed30cf595c4cb1f183bc0abc290",
      "parents": [
        "7c6784061dca3e36b6c80973573a0bea8896d585"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Thu Oct 05 15:18:47 2017 -0700"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Thu Oct 05 15:18:47 2017 -0700"
      },
      "message": "Add directives to force stop unwinding.\n\nOn aarch64/x86/x86_64 add a macro that inserts a cfi directive that will\nstop unwinding.\n\nFor arm, clang doesn\u0027t allow emitting .cantunwind, so add a comment and\nleave it the same as it current is.\n\nAdd this macro to __libc_init and __start_thread.\n\nAlso, remove duplicate compilation of libc_init_static.cpp that already\nincludes the static library that includes that file.\n\nBug: 15469122\n\nTest: Did unwinds using new unwinder tool (unwind) and debuggerd -b\nTest: and verified new unwinder works on aarch64/x86/x86_64.\nTest: Verified that it works on old unwinder for aarch64/x86, but\nTest: x86_64 doesn\u0027t work properly, but as well as before.\nChange-Id: I77302e8f6c7ba1549d98a4a164106ee82c9ecadc\n"
    },
    {
      "commit": "f1c568d1eac6d2baba62af35e5b9856fb7e98319",
      "tree": "a7840d0a41465e4bc73e766bfc212bee12c6eaa0",
      "parents": [
        "2e01f39c31e042482fbe10df79d8b2837ae79239"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Sep 26 17:09:07 2017 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Sep 26 18:46:09 2017 -0700"
      },
      "message": "Add \u003cglob.h\u003e.\n\nThis is the FreeBSD implementation, plus some tests. The FreeBSD\nimplementation includes the GNU extensions and seems to be what\niOS is using too, which should provide bug compatibility for app\ndevelopers.\n\nThe code unfortunately uses a lot of stack, and uses FreeBSD locale\nimplementation that we don\u0027t have, but it does seem better maintained\nthan the other BSDs.\n\nBug: http://b/29251134\nTest: ran tests\nChange-Id: Ie477b45e42a6df1319b25712098519d2b33adf67\n"
    },
    {
      "commit": "7ccc50d2e48b9d8027a1f382b0408e9c36e56731",
      "tree": "5c0f8742d17baa66596860f88bfe387020b2d864",
      "parents": [
        "4326d84d217b40b819729da153f97217ea4ec932"
      ],
      "author": {
        "name": "Dan Willemsen",
        "email": "dwillemsen@google.com",
        "time": "Mon Sep 18 21:28:14 2017 -0700"
      },
      "committer": {
        "name": "Dan Willemsen",
        "email": "dwillemsen@google.com",
        "time": "Wed Sep 20 13:59:13 2017 -0700"
      },
      "message": "Use an embedded linker for host bionic\n\nThe linux kernel requires that the ELF interpreter (runtime linker)\nthat\u0027s referenced by PT_INTERP be either an absolute path, or a relative\npath from the current working directory. We\u0027d prefer a relative path\nfrom the binary, similarly to how we handle looking up shared libraries,\nbut that\u0027s not supported.\n\nInstead, extract the LOAD segments from the runtime linker ELF binary\nand embed them into each host bionic binary, omitting the PT_INTERP\ndeclaration. The kernel will treat it as a static binary, and we\u0027ll use\na special entry point (linker_wrapper) to fix up the arguments passed by\nthe kernel before jumping to the embedded linker. From the linker\u0027s\npoint of view, it looks like the kernel loaded the linker like normal.\n\nBug: 31559095\nTest: Enable host bionic, build and run libdemangle_test\nChange-Id: I1753401ef91eecbf0ae3376faca31eec1c53842b\n"
    },
    {
      "commit": "7e6f98b93d8f386d3c9413ab17998591a0e1cf3a",
      "tree": "daac1c1a5d7c0ad3c71ea9bb68478670663cc5e2",
      "parents": [
        "40756d61ac05c71a1a00aa686bf5105bda420661",
        "2286b9f5ae822445646a5ed403949986498116b0"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Mon Sep 11 21:39:41 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Sep 11 21:39:41 2017 +0000"
      },
      "message": "Merge \"Remove clang: true\""
    },
    {
      "commit": "2286b9f5ae822445646a5ed403949986498116b0",
      "tree": "5ce4cb329035ba39834f1555b881eef1fe5a14ea",
      "parents": [
        "d74088bc46bba234a9bf24a91c16e64fc05ba3be"
      ],
      "author": {
        "name": "Lennart Wieboldt",
        "email": "lennart.1997@gmx.de",
        "time": "Mon Jul 24 20:06:15 2017 +0200"
      },
      "committer": {
        "name": "Lennart Wieboldt",
        "email": "lennart.1997@gmx.de",
        "time": "Mon Sep 11 21:43:58 2017 +0200"
      },
      "message": "Remove clang: true\n\nclang is the default compiler since Android nougat\n\nTest: mma \u0026 verified it´s still build with clang\nChange-Id: Id8b5361d18c1b2febb2dc6cc44502feaa08f605c\nSigned-off-by: Lennart Wieboldt \u003clennart.1997@gmx.de\u003e\n"
    },
    {
      "commit": "4c9d528a25a5b605643a13da24afb42d2d5d840c",
      "tree": "07ec4842deb71eadd51b231b8c86b5abf55e972d",
      "parents": [
        "d74088bc46bba234a9bf24a91c16e64fc05ba3be",
        "5702c6ff454a8a9695fae64597d7692b06fc27b5"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Sep 11 18:39:30 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Sep 11 18:39:30 2017 +0000"
      },
      "message": "Merge \"Finish \u003csearch.h\u003e.\""
    },
    {
      "commit": "ab2f79c0daa113ceaacaa59c4573ba606ab7de15",
      "tree": "47b2c3045044274ff6a1413f106ed96cb4e8874c",
      "parents": [
        "04503da174b5e51ba9035fb79521a6a2af17c111"
      ],
      "author": {
        "name": "Jayant Chowdhary",
        "email": "jchowdhary@google.com",
        "time": "Fri Sep 01 16:29:44 2017 -0700"
      },
      "committer": {
        "name": "Jayant Chowdhary",
        "email": "jchowdhary@google.com",
        "time": "Thu Sep 07 17:19:21 2017 -0700"
      },
      "message": "For devices which are not treble enabled, return the system shell.\n\nFor treble enabled devices, still return the appropriate shell depending\non whether the process is a vendor process or a system one.\n\nTest: Manual testing: on a bullhead device, ran test programs from\n      /vendor/bin which used popen() and system(). The calls succeeded.\n\nBug: 65054230\n\nBug: 64516799\n\nMerged-In: I15dfdbb107cfca7c0f92f337c9bb46b9876eb38e\nChange-Id: I15dfdbb107cfca7c0f92f337c9bb46b9876eb38e\n(cherry picked from commit 1e52871773505edf70d10a3af7b003e9320ef6a3)\n"
    },
    {
      "commit": "5702c6ff454a8a9695fae64597d7692b06fc27b5",
      "tree": "198c64982038daff5603e6c6813089751f62328f",
      "parents": [
        "7f9f1b6f918bec90354f70f2eb3dcf87d85df918"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Aug 31 17:27:05 2017 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Aug 31 17:38:51 2017 -0700"
      },
      "message": "Finish \u003csearch.h\u003e.\n\nI\u0027m unable to find a bug, but we\u0027ve had requests for this internally\nonce or twice (though I pointed those folks at the STL), and there\u0027s\ncode we build for the host or in our bootloaders that would use this,\nand there\u0027s reasonable-looking FreeBSD implementation ready and waiting.\n\nBug: N/A\nTest: ran tests\nChange-Id: I6ddee4b71bea4c22ed015debd31d3eaac4fcdd35\n"
    },
    {
      "commit": "a648733cb7398810df9a35528cc6e874edc57b06",
      "tree": "90ff33e6b479b5ccb20b1a8bb0007dacde75bc8d",
      "parents": [
        "571c88823636e3c6f894e806ea7c4dc8131a1ae4"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Aug 15 23:16:48 2017 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Aug 25 08:47:41 2017 -0700"
      },
      "message": "Implement \u003ciconv.h\u003e.\n\nBug: http://b/32978596\nTest: ran tests\nChange-Id: I56b6ae3d9c5a3a56d2b4afba33fb8f9e964bf7b9\n"
    },
    {
      "commit": "9b1ca569db3e698c3a901720ae6989c876a9e6ee",
      "tree": "586e7581ad2e2296aa8b24cb4c5bcf598255bfbb",
      "parents": [
        "611d0de62fc7d23dcdd120c2d3698acc85351f9e"
      ],
      "author": {
        "name": "Sandeep Patil",
        "email": "sspatil@google.com",
        "time": "Mon Aug 21 12:17:19 2017 -0700"
      },
      "committer": {
        "name": "Sandeep Patil",
        "email": "sspatil@google.com",
        "time": "Tue Aug 22 10:17:28 2017 -0700"
      },
      "message": "libc: Add support to allow library calls to find appropriate shell executable for a process\n\nLibrary calls like system() and popen() invoke the shell executable\npointed to by \u0027_PATH_BSHELL\u0027 in order to run the command passed into the\nfunction. The _PATH_BSHELL points to /system/bin/sh by default and thus\nbreaks any vendor process trying to use system() / popen(), as they are\ndenied access to system shell by selinux.\n\nThis CL make necessary changes, so the implmentations of system() and popen()\ncan use the appropriate shell (e.g. /vendor/bin/sh for processes running\nout of /vendor partition). Also, changes the implementation of system()\nand popen().\n\nBug: 64832610\nTest: Manual, Using a test program running from /system/bin and\n      /vendor/bin to ensure correct shell is being used.\n\nChange-Id: Ie7168d69decb1ae98284446ae7db34dec930dc33\nMerged-In: Ie7168d69decb1ae98284446ae7db34dec930dc33\nSigned-off-by: Sandeep Patil \u003csspatil@google.com\u003e\n(cherry picked from commit aa3e32422cc7089b9b15976f2651a58840d95e4f)\n"
    },
    {
      "commit": "ac49cedc7e2bab2073a0895ef01e31dac84f590b",
      "tree": "49713323bcf5e81e429e669e359bd99021d771e6",
      "parents": [
        "30438e4cea83628bcacbedff37a35398bb8b40e7"
      ],
      "author": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Thu Aug 17 13:18:52 2017 -0700"
      },
      "committer": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Fri Aug 18 09:11:05 2017 -0700"
      },
      "message": "Always use CLOCK_MONOTONIC for pthreads and semaphores\n\npthread\u0027s and semaphore\u0027s default behavior is to use CLOCK_REALTIME,\nhowever this behavior is essentially never intended, as that clock is\nprone to change discontinuously.\n\nWhat users really intend is to use CLOCK_MONOTONIC, however only\npthread_cond_timedwait() provides this as an option and even there, a\nlarge amount of existing code does not opt into CLOCK_MONOTONIC.\n\nWe have seen numerous bugs directly attributable to this difference.\nTherefore, we provide this general workaround to always use\nCLOCK_MONOTONIC for waiting, regardless of what the input timespec\nis.\n\nSpecifically this impacts the below APIs:\npthread_mutex_timedlock()\npthread_cond_timedwait()\npthread_rwlock_timedrdlock()\npthread_rwlock_timedwrlock()\nsem_timedwait()\n\nTest: boot bullhead, boot sailfish\nTest: bionic pthread/semaphore unit tests\nTest: check that pthread_cond_timedwait() timeouts are uneffected by\n      CLOCK_REALTIME time changes\n\nBug: 64694413\nBug: 64623895\nBug: 35756266\nBug: 35678943\nChange-Id: Ibba98f5d88be1c306d14e9b9366302ecbef6d534\n"
    },
    {
      "commit": "1db06faa3891bd056431a5aa8f27c5bc34ad7988",
      "tree": "34534e0d9ab0152ab0b095145df9d57e7c4d17e4",
      "parents": [
        "4dd33f92d82b9fb77152bfc68f312d2fa5710a28",
        "b97049c0390cb1a11b9cb0b14391972e69398ce5"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Tue Aug 01 02:03:52 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Aug 01 02:03:52 2017 +0000"
      },
      "message": "Merge \"libc: Split FORTIFY into its own headers\""
    },
    {
      "commit": "bafa1985eccaac231ade6f15d340759f44928524",
      "tree": "4680ad77b3501d3df5cd0932eda2a9d86fe03d7f",
      "parents": [
        "07d2d327bfdfe51c000842125cabd852ce264b2b",
        "c41b560f5f624cbf40febd0a3ec0b2a3f74b8e42"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Jul 28 21:42:13 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Jul 28 21:42:13 2017 +0000"
      },
      "message": "Merge \"Implement wcwidth(3) in terms of icu4c.\""
    },
    {
      "commit": "c41b560f5f624cbf40febd0a3ec0b2a3f74b8e42",
      "tree": "4bf012d6072b455cee89a1d3ecf8b7654ec97628",
      "parents": [
        "38bcf2b704eb5038668759d2dd37115aea1dc437"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Jul 27 17:08:08 2017 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Jul 27 17:08:24 2017 -0700"
      },
      "message": "Implement wcwidth(3) in terms of icu4c.\n\nBased on com.google.i18n.CharWidth by the icu-team folks.\n\nBug: N/A\nTest: ran tests\nChange-Id: Ia9d818ec4ae60f2f3978533195330d00699397c5\n"
    },
    {
      "commit": "b97049c0390cb1a11b9cb0b14391972e69398ce5",
      "tree": "c331f88d0cb75e427564fdebd15738adf410f501",
      "parents": [
        "38bcf2b704eb5038668759d2dd37115aea1dc437"
      ],
      "author": {
        "name": "George Burgess IV",
        "email": "gbiv@google.com",
        "time": "Mon Jul 24 15:05:05 2017 -0700"
      },
      "committer": {
        "name": "George Burgess IV",
        "email": "gbiv@google.com",
        "time": "Thu Jul 27 17:00:13 2017 -0700"
      },
      "message": "libc: Split FORTIFY into its own headers\n\nThis patch cleans up our standard headers by moving most of the FORTIFY\ncruft out in to its own sandbox. In order to include the *_chk and\n*_real declarations, you can either enable FORTIFY, or `#define\n__BIONIC_DECLARE_FORTIFY_HELPERS`.\n\nBoth sys/select.h and strings.h are explicitly ignored by this patch.\nBoth of these files have very small __BIONIC_FORTIFY blocks, and don\u0027t\ndefine any actual FORTIFY\u0027ed functions (just macros, and 3 *_chk\nfunctions).\n\nThis patch also makes the versioner ignore the FORTIFY implementation\nheaders, since we\u0027re guaranteed to pick the FORTIFY\u0027ed headers up when\nlooking at the regular headers. (...Not to mention that making the\nFORTIFY\u0027ed headers freestanding would be annoying to do and maintain for\n~no benefit).\n\nWe bake the knowledge of where FORTIFY headers live directly into the\nversioner. We could go with a more general approach (e.g. adding an -X\nIGNORED_FILE flag that tells the versioner to ignore\n$HEADER_PATH/$IGNORED_FILE), but we\u0027d then have to repeat that for every\ntest, every manual invocation of the versioner, etc. for no benefit\nthat\u0027s obvious to me.\n\nBug: 12231437\nTest: m checkbuild on bullhead internal master + CtsBionicTestCases. no\nnew errors.\n\nChange-Id: Iffc0cc609009b33d989cdaddde0a809282131a5b\n"
    }
  ],
  "next": "82e950c9fb183a0f1be9bd99f8e1c4ef5ddbddbc"
}
