)]}'
{
  "log": [
    {
      "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": "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"
    },
    {
      "commit": "82e950c9fb183a0f1be9bd99f8e1c4ef5ddbddbc",
      "tree": "46ac8301e1ea1619e212cf3138e0303da10c2fa4",
      "parents": [
        "38bcf2b704eb5038668759d2dd37115aea1dc437"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Jul 27 16:39:02 2017 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Jul 27 16:39:02 2017 -0700"
      },
      "message": "Actually turn on -Werror for crtbegin.\n\nAnd then -Wno-gcc-compat in the right place this time. (But leaving the\nother one because I don\u0027t care in the non-crtbegin code either.)\n\nBug: N/A\nTest: builds without warnings now\nChange-Id: Id2cfa3392ee80c045644ebfdf92c6d341db90964\n"
    },
    {
      "commit": "4f36cabd8d1b1f3ed6ad4586f86aad5731f4bdaf",
      "tree": "cbdf4e391733c4436bc50174d24289f0791e82a5",
      "parents": [
        "93068895091ee516c55a7873a4056145a7da3644",
        "d34b0a946c551db59b29a1446bbc3d4f6973d959"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Wed Jul 26 02:44:21 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Jul 26 02:44:21 2017 +0000"
      },
      "message": "Merge \"libc: Move FORTIFY into one file; make style fixups\""
    },
    {
      "commit": "d34b0a946c551db59b29a1446bbc3d4f6973d959",
      "tree": "d88b9af0e9a725d70c02b8bb41fb172da7ab870a",
      "parents": [
        "086b1b5a22fdba8ace37919bfc4f27f9b27d78c2"
      ],
      "author": {
        "name": "George Burgess IV",
        "email": "gbiv@google.com",
        "time": "Tue Jul 25 11:43:39 2017 -0700"
      },
      "committer": {
        "name": "George Burgess IV",
        "email": "gbiv@google.com",
        "time": "Tue Jul 25 17:39:21 2017 -0700"
      },
      "message": "libc: Move FORTIFY into one file; make style fixups\n\nThis addresses post-commit feedback from\nI88c39ca166bacde0b692aa3063e743bb046a5d2f. With this, our FORTIFY impl\nnow sits in one file.\n\nBug: 12231437\nTest: mma; no new CtsBionicTestCases failures on bullhead internal\nmaster.\nChange-Id: I6f9ff81c3e86cf9d6a0efa650eb5765f1e2fa09c\n"
    },
    {
      "commit": "93068895091ee516c55a7873a4056145a7da3644",
      "tree": "7735a719acaecd5848ddb714035e40b6a42b7e6e",
      "parents": [
        "33f9043f482769c35f82df9d25b4ccc8f1193229",
        "b348d5cda89d0f4a8306056dde1c0423887854d6"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Tue Jul 25 21:03:26 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Jul 25 21:03:26 2017 +0000"
      },
      "message": "Merge \"Build crtbegin with clang too.\""
    },
    {
      "commit": "b348d5cda89d0f4a8306056dde1c0423887854d6",
      "tree": "2a9c140dc3166ebc22527373169734a9fa841582",
      "parents": [
        "4fce647a5bcb61680c9f865b05c9f43a4841b244"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Jul 24 16:53:11 2017 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Jul 25 11:54:33 2017 -0700"
      },
      "message": "Build crtbegin with clang too.\n\nIf _start_main is static, clang optimizes it out and then generates an\nundefined reference from the inline assembler, so let\u0027s explicitly tell\nthe compiler it\u0027s used.\n\nBug: N/A\nTest: ran tests\nChange-Id: Iba3d9c63abae9a0dc32f236b01783515f0190956\n"
    },
    {
      "commit": "086b1b5a22fdba8ace37919bfc4f27f9b27d78c2",
      "tree": "069e7f5721962a13f7b495bdefe8ef384f4de65b",
      "parents": [
        "b8115bdf4f9ec74f6bbc28f42f8e76a86a83fc00",
        "6cb06879323cb45440ca1c7b42a2cc754b3d50c6"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Tue Jul 25 18:05:42 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Jul 25 18:05:42 2017 +0000"
      },
      "message": "Merge \"Split our FORTIFY implementation into libc_fortify\""
    },
    {
      "commit": "6cb06879323cb45440ca1c7b42a2cc754b3d50c6",
      "tree": "6c57a6539009e2af358daa368f538e82da1593f2",
      "parents": [
        "248b5cb672a9eadde695edb7d73e9d1ed5cb0b7f"
      ],
      "author": {
        "name": "George Burgess IV",
        "email": "gbiv@google.com",
        "time": "Fri Jul 21 13:28:42 2017 -0700"
      },
      "committer": {
        "name": "George Burgess IV",
        "email": "gbiv@google.com",
        "time": "Mon Jul 24 14:20:16 2017 -0700"
      },
      "message": "Split our FORTIFY implementation into libc_fortify\n\nAs requested in the bug. This also rips __memcpy_chk out of memcpy.S,\nwhich lets us cut down on copypasta (all of the implementations look\nidentical).\n\nBug: 12231437\nTest: mma on aosp_{arm,arm64,mips,x86,x86_64} internal master;\ncheckbuild on bullhead internal master; CtsBionicTestCases on bullhead.\nNo new failures.\nChange-Id: I88c39ca166bacde0b692aa3063e743bb046a5d2f\n"
    },
    {
      "commit": "bff8da308ffee03645b7e9e435b5ec51d71cf39c",
      "tree": "5583c567e32a8a59da652b56b33ef005e6162e57",
      "parents": [
        "89ff49942b16a3aaf8bc65a42c2c03a956f5e9a0",
        "3a4c45499e9b67799fdfe4693e0a4fbbb5e955e2"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Jul 24 20:36:16 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Jul 24 20:36:16 2017 +0000"
      },
      "message": "Merge \"Replace fmemopen.\""
    },
    {
      "commit": "57ad09278f3a623da70c29a69fd232098fcc5abd",
      "tree": "0565a6f3aa95a8877fc11bfcc96463f97030c184",
      "parents": [
        "fd80e39546c3f8567be9e7a208fb07c32ef52657",
        "7532b3262797e964438e7ed50450d04ef33d85c6"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Jul 24 20:16:40 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Jul 24 20:16:40 2017 +0000"
      },
      "message": "Merge \"Replace killpg.\""
    },
    {
      "commit": "fd80e39546c3f8567be9e7a208fb07c32ef52657",
      "tree": "389c88a22e41362d329f54831f857d31066f01f5",
      "parents": [
        "248b5cb672a9eadde695edb7d73e9d1ed5cb0b7f",
        "20f3399956b691d79b3979d586d76d8180113f07"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Mon Jul 24 19:23:36 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Jul 24 19:23:36 2017 +0000"
      },
      "message": "Merge \"Switch to FreeBSD for wcsstr and wmemcpy.\""
    },
    {
      "commit": "3a4c45499e9b67799fdfe4693e0a4fbbb5e955e2",
      "tree": "e91cf7421899cec6afcd4ee04ce5ecd63e67fc4b",
      "parents": [
        "0d6485eca47f0e860486795b2da97679948fd5d5"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Jul 19 17:20:24 2017 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Jul 24 10:48:42 2017 -0700"
      },
      "message": "Replace fmemopen.\n\nA new implementation starting from the FreeBSD fmemopen rather than the\nOpenBSD one we used to use.\n\nThe tests were arrived at by translating each sentence in\nhttp://pubs.opengroup.org/onlinepubs/9699919799/functions/fmemopen.html,\nplus http://man7.org/linux/man-pages/man3/fmemopen.3.html for historical\nGNU bugs.\n\nBug: http://b/31304889\nTest: ran tests\nChange-Id: Id8b168c9ecde638e9cdedbc3b8a0982fc83c7048\n"
    },
    {
      "commit": "697f42afdb8606f5ba431e72db065692bf61ffff",
      "tree": "900725232ca9b11d2f415544bdaea867123fbf19",
      "parents": [
        "03e9c498d4909d1f791800cae0d59db63a348328"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Jul 14 17:00:05 2017 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Jul 14 17:00:05 2017 -0700"
      },
      "message": "Hide various mbstate implementation details.\n\n...by inlining them.\n\nAlso fix a couple of harmless bugs in passing. I\u0027ve added tests, but in\nboth cases I don\u0027t think it was actually possible to hit the bad behavior:\nwe\u0027d hit another test and fail immediately after in an externally\nindistinguishable way.\n\nBug: N/A\nTest: readelf\nChange-Id: I8466050b0bfe2b7b94c76b383cf10c1d9d28debd\n"
    },
    {
      "commit": "20f3399956b691d79b3979d586d76d8180113f07",
      "tree": "288c7548e672dfbd3cb1264a64145487d47423f7",
      "parents": [
        "3537331942cdebab5ab53104b852c997a9bc0be5"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Jul 13 09:45:00 2017 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Jul 13 09:45:00 2017 -0700"
      },
      "message": "Switch to FreeBSD for wcsstr and wmemcpy.\n\nAlmost all of our w* functions come from FreeBSD already. The one downside is\nthat we can\u0027t take all our w* functions from FreeBSD because FreeBSD handles\nlocales very differently from us.\n\nBug: N/A\nTest: ran tests\nChange-Id: I177b4332499992babd5d5afe5b3f469f8c4345a5\n"
    },
    {
      "commit": "2d585e0070f33ec86a5d5decf9642ee9f2501324",
      "tree": "c4a95ed3dde95f48b6141cc0c015ba1d8818f31c",
      "parents": [
        "ada33eb9b4ec9e9fe2a37c8dbe1aa68348aa66b1",
        "1a8b7f2d1ca7c605e8e0e6a707a8c4bc9839dcda"
      ],
      "author": {
        "name": "Dan Albert",
        "email": "danalbert@google.com",
        "time": "Thu Jul 13 08:34:57 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Jul 13 08:34:57 2017 +0000"
      },
      "message": "Merge changes from topic \u0027locale-android-support\u0027\n\n* changes:\n  Add a non-TLS slot implementation of locale.cpp.\n  Move non-locale.h APIs out of locale.cpp.\n"
    },
    {
      "commit": "e2fd01035ba85b906dbf0e6b6112b7f8ff52beef",
      "tree": "8bbe318fca314962ff32b5cd10eee318c440aa6e",
      "parents": [
        "82d746fb39465e78088aeb11a5dc178cf264d0c0"
      ],
      "author": {
        "name": "Dan Albert",
        "email": "danalbert@google.com",
        "time": "Tue Jul 11 14:27:07 2017 -0700"
      },
      "committer": {
        "name": "Dan Albert",
        "email": "danalbert@google.com",
        "time": "Wed Jul 12 12:41:47 2017 -0700"
      },
      "message": "Move non-locale.h APIs out of locale.cpp.\n\nlibandroid_support only needs the locale.h stuff.\n\nTest: make checkbuild\nBug: None\nChange-Id: I0c53fe9d2df4f9ff4b99771727034508bc89cb32\n"
    },
    {
      "commit": "7532b3262797e964438e7ed50450d04ef33d85c6",
      "tree": "182c0d46a964f6fad2cd220b4b5c4cb89dc4713c",
      "parents": [
        "3537331942cdebab5ab53104b852c997a9bc0be5"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Jul 11 15:00:17 2017 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Jul 11 15:00:17 2017 -0700"
      },
      "message": "Replace killpg.\n\nUpstream\u0027s killpg is diverging further from glibc behavior, so let\u0027s just fork.\n\nBug: N/A\nTest: ran tests\nChange-Id: I70a3543018bc0a5c0bbf019ac527043b90568fda\n"
    },
    {
      "commit": "0a0743f86454f8f50d04127beb614094f3b5a593",
      "tree": "388be22547813c653c147e3104abcff923dcab28",
      "parents": [
        "ddefae7ba92c40d60f2401e010e7789bee6f260d"
      ],
      "author": {
        "name": "Victor Khimenko",
        "email": "khim@google.com",
        "time": "Mon Jul 10 21:15:37 2017 +0200"
      },
      "committer": {
        "name": "Victor Khimenko",
        "email": "khim@google.com",
        "time": "Mon Jul 10 21:44:17 2017 +0200"
      },
      "message": "Move environ valiable into it\u0027s own file\n\nTest: build statically the example program below\n\n  char** environ;\n  int main() {\n  }\n\nChange-Id: I3f01652da1d5063d92ba7cbff7fb09bd0a89325c\n"
    },
    {
      "commit": "f4b1cbda4a6fa15b0223b952a343f87523b8578d",
      "tree": "44fb71a2252acb9f4c024eb779b6283b87ba2cc3",
      "parents": [
        "d411524609186dc6b243156e4df43617ab33d0f4"
      ],
      "author": {
        "name": "Stephen Crane",
        "email": "sjc@immunant.com",
        "time": "Tue May 09 14:27:43 2017 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Jun 21 23:53:46 2017 +0000"
      },
      "message": "Disable stack protector for __libc_preinit\n\n__libc_preinit sets up the stack protector global cookie value, and thus\ncannot intialize a stack protector cookie for itself in the function\nprologue. LTO compilation can inline functions requiring a stack\nprotector into __libc_preinit. This patch disables stack protection for\n__libc_preinit and forces all potentially inlined functions into a\nhelper that can have a stack protector.\n\nTest: run bionic-unit-tests\n\nChange-Id: I45911611190f216c91eb6feff722967214c5f99f\n"
    },
    {
      "commit": "5059939c87f4806a8c9f67cfbd1a4f9fe2d4e59c",
      "tree": "982bc3947088a422d6e51f05ee15afff6fb7e5cf",
      "parents": [
        "025fb33c9dbae35ce343d3f15cbf642518f82893"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu May 25 17:13:32 2017 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu May 25 19:17:55 2017 -0700"
      },
      "message": "Enable exporting the non-uapi scsi headers.\n\nCallers are supposed to #include \u003cscsi/sg.h\u003e but if we tell soong to add\nbionic/libc/kernel/android/ to the include path, the uapi headers in there\nwould be (unintentionally) accessible as either \u003clinux/name.h\u003e or\n\u003cuapi/linux/name.h\u003e.\n\nBug: N/A (hit while upgrading strace to 4.17)\nTest: builds\nChange-Id: I8d47dd51da688c38f747a255d401dfb2c209c805\n"
    },
    {
      "commit": "94072fbb4e42a195cd6cec97f9af15ff45cb84ee",
      "tree": "fe577acf1afd7e7be2372bf419537177da508011",
      "parents": [
        "4767bc4a6cebc2ad4c61cccdf92290e17227a792"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue May 23 11:03:58 2017 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue May 23 14:47:16 2017 -0700"
      },
      "message": "Switch to inline assembler in crtbegin.\n\nUsing __builtin_frame_address was clever, but didn\u0027t work for arm64 (for\nreasons which were never investigated) and the ChromeOS folks claim it\ncauses trouble for x86 with ARC++ (though without a reproduceable test case).\n\nNaked functions turn out to be quite unevenly supported: some architectures\ndo the right thing, others don\u0027t; some architectures warn, others don\u0027t (and\nthe warnings don\u0027t always match the platforms that _actually_ have problems).\n\nInline assembler also removes the guessing games: everyone knows what the\ncouple of instructions _ought_ to be, and now we don\u0027t have to reason about\nwhat the compiler will actually do (yet still keep the majority of the code\nin C).\n\nBug: N/A\nTest: builds, boots\nChange-Id: I14207ef50ca46b6eca273c3cb7509c311146a3ca\n"
    },
    {
      "commit": "94bd274551189c26e061aed7515f7c7332ee2a16",
      "tree": "a29714c155308d53045308aff4f156e274228f8d",
      "parents": [
        "ac58d33d343eba6a3370f541467f09802c48b24b"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Mon May 08 12:09:03 2017 -0700"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Mon May 15 12:44:58 2017 -0700"
      },
      "message": "Add support for cortex-a73.\n\nBug: 37647380\n\nTest: Built target with cortex-a73 for both 32 bit/64 bit.\nTest: Built target with cortex-a53.cortex-a57 for both 32 bit/64 bit.\nTest: Ran bionic unit tests, ran art target tests.\n\n(cherry picked from commit 6fca047b5379c2bf7b6b874a2b2f9cc44e1b01fa)\n\nChange-Id: I2c48e1bc7f4a3c4548d1c66f87eab19c8618a0b8\n"
    },
    {
      "commit": "7a3681e5b6c39bc2b3b62031ca5941dbf7bc4e63",
      "tree": "78c25e2a38b7efed8db770a623a5cbfb7eaab11d",
      "parents": [
        "ca5e0f49ca5df873a20c996755175b5c9c1e2ed9"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Mon Apr 24 17:48:32 2017 -0700"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Wed May 03 08:50:43 2017 -0700"
      },
      "message": "Move libc_log code into libasync_safe.\n\nThis library is used by a number of different libraries in the system.\nMake it easy for platform libraries to use this library and create\nan actual exported include file.\n\nChange the names of the functions to reflect the new name of the library.\n\nRun clang_format on the async_safe_log.cpp file since the formatting is\nall over the place.\n\nBug: 31919199\n\nTest: Compiled for angler/bullhead, and booted.\nTest: Ran bionic unit tests.\nTest: Ran the malloc debug tests.\nChange-Id: I8071bf690c17b0ea3bc8dc5749cdd5b6ad58478a\n"
    },
    {
      "commit": "2fad0d59278a86847bf58bfd8d7d2bf8b1467b3d",
      "tree": "2e0fa13829b911b76be301391650a71f7b18e986",
      "parents": [
        "82f7208ac0b4e31003ddfbad4a4e64e3e0e5550d"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Apr 27 16:26:55 2017 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Apr 27 16:26:55 2017 -0700"
      },
      "message": "Include the libc/kernel/android/scsi headers in the NDK.\n\nWe have some non-upstream (but Android common kernel) scsi headers to include\nin the NDK.\n\nBug: N/A\nTest: checked out/soong/ndk/sysroot\nChange-Id: If7611e1e554ada63f266ec99d95dfedb99562ae9\n"
    },
    {
      "commit": "04d99df80db386cad1e3f83f3d760920e6f61b32",
      "tree": "8d52e4795bda9c224b572bfb34938f8153c1f171",
      "parents": [
        "f568ccd34afddc2b4223b309109d533349d73749"
      ],
      "author": {
        "name": "Jake Weinstein",
        "email": "xboxlover360@gmail.com",
        "time": "Thu Aug 25 20:03:25 2016 -0400"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Thu Apr 13 11:18:56 2017 -0700"
      },
      "message": "libc: ARM: Add 32-bit Kryo memcpy\n\n* Memcpy is based on Scorpion due to Qualcomm\u0027s\n  128-bit cache line size optimizations.\n\n* PLDOFFSET and PLDSIZE are from the ARM64 Kryo memcpy routine.\n\nBelow are the results of the benchmark, tested on a OnePlus 3 with MSM8996.\n\nBefore:\nBM_string_memcpy/8                          1000k          8    0.934 GiB/s\nBM_string_memcpy/64                         1000k         11    5.785 GiB/s\nBM_string_memcpy/512                        1000k         25   19.918 GiB/s\nBM_string_memcpy/1024                         50M         42   23.938 GiB/s\nBM_string_memcpy/8Ki                          10M        473   17.291 GiB/s\nBM_string_memcpy/16Ki                          5M        565   28.976 GiB/s\nBM_string_memcpy/32Ki                       1000k       1105   29.631 GiB/s\nBM_string_memcpy/64Ki                       1000k       2194   29.864 GiB/s\n\nAfter:\nBM_string_memcpy/8                          1000k          6    1.145 GiB/s\nBM_string_memcpy/64                         1000k          7    8.560 GiB/s\nBM_string_memcpy/512                        1000k         18   27.370 GiB/s\nBM_string_memcpy/1024                         50M         33   30.340 GiB/s\nBM_string_memcpy/8Ki                          10M        266   30.770 GiB/s\nBM_string_memcpy/16Ki                          5M        553   29.599 GiB/s\nBM_string_memcpy/32Ki                       1000k       1121   29.219 GiB/s\nBM_string_memcpy/64Ki                       1000k       2208   29.678 GiB/s\n\nTest: make otapackage\nTest: Ran bionic unit tests on Pixel device. Verified memcpy wins on\nTest: Pixel device.\n\nChange-Id: Id7a9c37ef75a306dd5cf8d374d79d0fe83f8a3ba\n"
    },
    {
      "commit": "4d114f9e215fadc7d4f65f4d1ddccf95523ad6ee",
      "tree": "105cb4dfc9f71e59a0a7dae904b40c6c90cb607d",
      "parents": [
        "2be801302725ab10f7e1fb62ba663ef477f58c6d"
      ],
      "author": {
        "name": "Jake Weinstein",
        "email": "xboxlover360@gmail.com",
        "time": "Fri Apr 07 14:55:53 2017 -0400"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Wed Apr 12 14:58:29 2017 -0700"
      },
      "message": "libc: use Cortex-A7/A53 memset on Kryo\n\nTested on OnePlus 3 with MSM8996\n\nBefore (Krait):\nBM_string_memset/8                          1000k          7    1.071 GiB/s\nBM_string_memset/64                         1000k          9    6.720 GiB/s\nBM_string_memset/512                        1000k         19   26.699 GiB/s\nBM_string_memset/1024                       1000k         29   34.214 GiB/s\nBM_string_memset/8Ki                          10M        184   44.302 GiB/s\nBM_string_memset/16Ki                          5M        351   46.656 GiB/s\nBM_string_memset/32Ki                          5M        686   47.744 GiB/s\nBM_string_memset/64Ki                       1000k       1355   48.342 GiB/s\n\nAfter (A7/A53):\nBM_string_memset/8                          1000k          7    1.017 GiB/s\nBM_string_memset/64                         1000k          7    8.039 GiB/s\nBM_string_memset/512                        1000k         13   37.976 GiB/s\nBM_string_memset/1024                       1000k         21   47.595 GiB/s\nBM_string_memset/8Ki                          10M        150   54.354 GiB/s\nBM_string_memset/16Ki                         10M        285   57.336 GiB/s\nBM_string_memset/32Ki                          5M        555   59.016 GiB/s\nBM_string_memset/64Ki                       1000k       1097   59.720 GiB/s\n\nTest: make otapackage\nTest: Verified this wins in all dimensions on a Pixel device.\n\nChange-Id: I4cb72cc0363877de7c41d6f991149fda42fd0b4b\n"
    },
    {
      "commit": "21d4a9ac6b6203733acedde5534083eaadfad5a7",
      "tree": "f2b0dfc360f890801125ac7f21398ce6c5843e0a",
      "parents": [
        "faf7f3542a1b7c850450df158072f021537f40c1",
        "0e8616a37ab3af8567c130de8e83b968ffca79a6"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Wed Apr 12 18:15:51 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Apr 12 18:15:53 2017 +0000"
      },
      "message": "Merge \"Move localtime.c over to CachedProperty.\""
    },
    {
      "commit": "230a7a44ceb82db5d709cbe718dab95d8159633c",
      "tree": "ce414b3c49900025f15f6d73d059929b0a24c143",
      "parents": [
        "d517ac2dcde4afe9d7eead7b460367694c9ece01"
      ],
      "author": {
        "name": "Dan Willemsen",
        "email": "dwillemsen@google.com",
        "time": "Fri Apr 07 14:09:05 2017 -0700"
      },
      "committer": {
        "name": "Dan Willemsen",
        "email": "dwillemsen@google.com",
        "time": "Wed Apr 12 00:06:47 2017 +0000"
      },
      "message": "Mark CRT objects as vendor available\n\nThis will build separate copies of the CRT for vendor vs system when\nBOARD_VNDK_VERSION is set. We\u0027ll be able to change crtbrand / etc as\nneeded with #ifdef __ANDROID_VNDK__ and similar.\n\nBug: 36426473\nBug: 36079834\nTest: Put #ifdef __ANDROID_VNDK__ into crtbrand.S, see changes\nChange-Id: I7db0cccfe94d144f072e7cef23832884f3c066f0\n"
    },
    {
      "commit": "0e8616a37ab3af8567c130de8e83b968ffca79a6",
      "tree": "a7d0ce44b22d59d19c6ffe22882598b5b1402d67",
      "parents": [
        "2d389ffee98b6f480f4340ec408d37457e02fbd7"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Apr 11 14:44:51 2017 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Apr 11 14:44:51 2017 -0700"
      },
      "message": "Move localtime.c over to CachedProperty.\n\nSince localtime.c is C, this entails pulling our code out into its own\nC++ file, which we should probably have done years ago anyway.\n\nBug: N/A\nTest: ran tests, and manually tested via Settings\nChange-Id: Ifc787a553e8f739a87641a2d35321aca40a47286\n"
    },
    {
      "commit": "51a9bf16733595fcd7ffcde3cd3832262516a390",
      "tree": "f9c293c54697c4169cebeb36d696ee4bb6456991",
      "parents": [
        "df244d876a5da87161e550147cc03c4373b49ca6"
      ],
      "author": {
        "name": "Dan Willemsen",
        "email": "dwillemsen@google.com",
        "time": "Fri Apr 07 14:09:18 2017 -0700"
      },
      "committer": {
        "name": "Steven Moreland",
        "email": "smoreland@google.com",
        "time": "Tue Apr 11 15:15:30 2017 +0000"
      },
      "message": "Remove .(ll)ndk suffix from (ll)ndk_library\n\nSoong handles these automatically now.\n\nBug: 33241851\nTest: Android-aosp_arm.mk is the same before/after\nTest: build.ninja is the same before/after\nTest: build-aosp_arm.ninja is the same before/after\nMerged-In: Ibfe4cf5db732d9007b1cc12dbc523c427de1b23d\nChange-Id: Ibfe4cf5db732d9007b1cc12dbc523c427de1b23d\n"
    },
    {
      "commit": "b8f7fde4bdfba5a65ef5a88265fdb79403e8a699",
      "tree": "e98bbe6b0ad4cccccbe00d5f4c903ab66be95c3e",
      "parents": [
        "a3ed901ef82fae908858f08a62e3d04f769c26ce"
      ],
      "author": {
        "name": "Dan Willemsen",
        "email": "dwillemsen@google.com",
        "time": "Mon Mar 20 14:07:47 2017 -0700"
      },
      "committer": {
        "name": "Dan Willemsen",
        "email": "dwillemsen@google.com",
        "time": "Wed Apr 05 22:42:08 2017 +0000"
      },
      "message": "Add LLNDK stub libraries for the VNDK\n\nThe stub libraries are the same as the (equivalent version) NDK, but\nthey also contain symbols tagged with \u0027vndk\u0027. Except there are none of\nthose in Bionic currently.\n\nFor headers, the LLNDK/VNDK isn\u0027t using a sysroot like the NDK. Nor is\nit hardcoding an explicit source path list like the platform. Instead it\nruns the bionic/libc/include directory through versioner like the NDK,\nthen exports those generated headers and the kernel headers from the\nstub library like any other exported header. Except it uses -isystem\ninstead of -I due to export_headers_as_system.\n\nTest: aosp_arm; m -j\nTest: Enable BOARD_VNDK_VERSION on aosp_arm; m -j\nTest: Inspect out/soong/build.ninja before/after (w/o vndk)\nChange-Id: Ief58a73907a83053b408b1d4b62999cba470d61c\n"
    },
    {
      "commit": "a3ed901ef82fae908858f08a62e3d04f769c26ce",
      "tree": "9383b5708b728f2cfc1c7898c58a1a305842659b",
      "parents": [
        "07807a10a2dfa85a952ee8c06188d0bc9597c184"
      ],
      "author": {
        "name": "Dan Willemsen",
        "email": "dwillemsen@google.com",
        "time": "Tue Apr 04 15:51:26 2017 -0700"
      },
      "committer": {
        "name": "Dan Willemsen",
        "email": "dwillemsen@google.com",
        "time": "Tue Apr 04 15:52:13 2017 -0700"
      },
      "message": "Remove obsolete Android.mk comments\n\nTest: none\nChange-Id: I0419800d44a7918a4415baf840c7d30bf30a18ed\n"
    },
    {
      "commit": "07807a10a2dfa85a952ee8c06188d0bc9597c184",
      "tree": "1010d24db4a12c780043372860f28aae69540082",
      "parents": [
        "defecea27bbe2c3dd521dfb3054d270918178f53",
        "950a95836d5040e5d123a2128c85e8ac8b46588c"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Tue Apr 04 21:10:55 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Apr 04 21:10:55 2017 +0000"
      },
      "message": "Merge \"Add kryo support.\""
    },
    {
      "commit": "10ec9286ae843b0a84438699458ba17bff2f5602",
      "tree": "dec03457b63bc63468d1cf1f5afb1380aa59a089",
      "parents": [
        "4df5ca1e0254790d41f945352a93f5c783ea8de0"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Mon Apr 03 15:13:29 2017 -0700"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Mon Apr 03 16:00:10 2017 -0700"
      },
      "message": "Break android_set_abort_message out of libc_logging.\n\nlibc_logging is getting statically linked into the crash handler\nlibrary, resulting in two copies of the abort message code existing in\nprocesses, one in the linker, and one in the crash handler.\n\nMove android_set_abort_message to its own file to solve this.\n\nBug: http://b/36862204\nTest: /data/nativetest/debuggerd_test/debuggerd_test32\nChange-Id: Ie198c5a3bb07645aa43296915c9a6752693f14a9\n"
    },
    {
      "commit": "950a95836d5040e5d123a2128c85e8ac8b46588c",
      "tree": "8104c68ae420570acfdb0c3e2817d9bb85be6ee2",
      "parents": [
        "aa0b5054c52e10a9e4b5d5dd9daa90d707164af0"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Wed Mar 29 13:10:56 2017 -0700"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Mon Apr 03 10:30:55 2017 -0700"
      },
      "message": "Add kryo support.\n\nCurrently, using kryo is the same as using krait, but there are specialized\nroutines that are pending that will be used after this commit.\n\nBug: 36728278\n\nTest: Built and booted a sailfish using kryo.\nChange-Id: Id7510640673c31f7536367041212db6d96a564f0\n"
    },
    {
      "commit": "22805ea9b843f1b56932be9508d179438d23427e",
      "tree": "2504c07308e47a6c69b340b2f6433b42678ecf1f",
      "parents": [
        "840ae69408c9b6ca269bce4657b9696cc6720918"
      ],
      "author": {
        "name": "Dan Albert",
        "email": "danalbert@google.com",
        "time": "Wed Mar 22 15:28:05 2017 -0700"
      },
      "committer": {
        "name": "Dan Albert",
        "email": "danalbert@google.com",
        "time": "Mon Mar 27 13:06:45 2017 -0700"
      },
      "message": "Revert \"Revert \"Run the versioner as part of the build.\"\"\n\nThis reverts commit 69c7562f5983ed5bc1d330b1f44b5cf506efb60e.\n\nTest: make checkbuild\nChange-Id: Ie443029398c01b45e0a0317a8074808b064f35d4\n"
    },
    {
      "commit": "fcb877ac4b05e65f64b9b3199d71dfeaae299177",
      "tree": "cbeafec613f5f3d8439acb16483fae8ed38d5ddc",
      "parents": [
        "616b2d87eabee34559b12a3ddd3e057a1ad49879"
      ],
      "author": {
        "name": "Prashant Patil",
        "email": "prashant.patil@imgtec.com",
        "time": "Thu Mar 16 18:07:00 2017 +0530"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Mar 16 10:26:24 2017 -0700"
      },
      "message": "Add libc optimizations to bionic for MIPS\n\nTest: Used bionic tests available under bionic/tests folder.\n      Tested for mips32r1/mips32r2/mips64r6 on emulators.\n\nChange-Id: I589415ddc496df3f6067ae34cb33ca58b3a1f276\nSigned-off-by: Prashant Patil \u003cprashant.patil@imgtec.com\u003e\n"
    },
    {
      "commit": "926add15934f0b1d71874c85c3f1b3930e68a2fd",
      "tree": "c1b9ac4cb26192d937c95ce6206d5383e6465e67",
      "parents": [
        "5faa3166ce69d7ea710cee90e916f9d6611cbe07"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Mar 02 18:56:12 2017 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Mar 02 18:57:44 2017 -0800"
      },
      "message": "Generate both static and shared libseccomp_policy.\n\nAlso switch to Android.bp\n\nBug: N/A\nTest: builds\nChange-Id: I33697a40b30d071f8d07aa33e1fb2b0c6e8a9f6d\n"
    },
    {
      "commit": "4021909162c8371557baeff4520c1eddeba7318f",
      "tree": "dd13df817ff9920da84aeea0477b6b98fe884bdc",
      "parents": [
        "2a4d892c7f14d849b5f349528ed2b921b19f5645"
      ],
      "author": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Tue Feb 28 21:04:30 2017 +0000"
      },
      "committer": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Tue Feb 28 21:05:34 2017 +0000"
      },
      "message": "Revert \"Revert \"Revert \"Make libc.so global\"\"\"\n\nThis reverts commit 2a4d892c7f14d849b5f349528ed2b921b19f5645.\n\nBug: http://b/35417197\nBug: http://b/35338922\nBug: http://b/35700074\nTest: manual\nChange-Id: Ib99d23d46664f3efa5be70213aa093b505e38775\n"
    },
    {
      "commit": "2a4d892c7f14d849b5f349528ed2b921b19f5645",
      "tree": "4e010c7f493683d67d7d79d47923247ca0014a21",
      "parents": [
        "fec0e015ce0369b3ad710547f3d6af343b2cd5e1"
      ],
      "author": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Thu Feb 16 12:03:21 2017 -0800"
      },
      "committer": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Fri Feb 17 22:38:22 2017 +0000"
      },
      "message": "Revert \"Revert \"Make libc.so global\"\"\n\nThis reverts commit 65236d43e8e8ea2155c0d64e35f00b3c30b21147.\n\nBug: http://b/35417197\nBug: http://b/35338922\nTest: vogar --classpath out/target/common/obj/JAVA_LIBRARIES/core-tests_intermediates/classes.jack  --mode\u003ddevice --variant\u003dX32 dalvik.system.JniTest#testGetSuperclass\nChange-Id: Ibf3bb7396e7d11ebe95e2f9267d0fc4af3fbe8c5\n"
    },
    {
      "commit": "65236d43e8e8ea2155c0d64e35f00b3c30b21147",
      "tree": "720378e423a3c702358bb4341f93e8e9517d625f",
      "parents": [
        "879177c9e12df4efe9f17ff3536005c258f625e8"
      ],
      "author": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Tue Feb 14 19:03:26 2017 +0000"
      },
      "committer": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Tue Feb 14 19:03:26 2017 +0000"
      },
      "message": "Revert \"Make libc.so global\"\n\nThis reverts commit 879177c9e12df4efe9f17ff3536005c258f625e8.\n\nBug: http://b/26833548\nChange-Id: I23e0b34777d18e369063185da14c57994807da29\n"
    },
    {
      "commit": "879177c9e12df4efe9f17ff3536005c258f625e8",
      "tree": "8181ac3c2da150c73e001412e8f1a3fb6a365afb",
      "parents": [
        "2cb4dfbb8c71ccc7890ecfd792790d7f6842b5a8"
      ],
      "author": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Mon Feb 13 09:17:21 2017 -0800"
      },
      "committer": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Mon Feb 13 10:05:17 2017 -0800"
      },
      "message": "Make libc.so global\n\nThis is a way to avoid loading multiple libc.so\nwhen non-default namespace search path includes\n/system/lib. This is used by some art tests.\n\nBug: http://b/26833548\nTest: m -j32 test-art-target-run-test-004-JniTest\nChange-Id: I919d3a0560bd3c9ac19df21a235641a667f0f017\n"
    },
    {
      "commit": "dd91b32baf376d4ef84f4713bb758e1a0c892701",
      "tree": "26f4813ef507d198465d74db5fcc9ca1c3754dad",
      "parents": [
        "f201c704d64ea40432123a90489d5dc88d613213"
      ],
      "author": {
        "name": "mspector",
        "email": "mspector@google.com",
        "time": "Wed Feb 08 17:01:27 2017 -0800"
      },
      "committer": {
        "name": "mspector",
        "email": "mspector@google.com",
        "time": "Thu Feb 09 18:37:52 2017 -0800"
      },
      "message": "Removing the kuser_helper elf note from building\n\nThis change removes the kuser_helper note from building automatically\nwith any binary but leaves the note.\nAlso fixes a typo in the note.\n\nOriginal patch adding the note:\nIb8366e2a0810092b71381d57dee4bdaa56369a24\n\nBug: 34815073\nTest: Manual - Note is no longer added to binaries\nChange-Id: Ieb81f9d9127d1f8a522434a31c696d743238e2a5\n"
    },
    {
      "commit": "a187a6f12e4ce0314baba73e77aa3b1ea46a72d2",
      "tree": "2d02e20bce64241c2815e50b5a0b75746d510af3",
      "parents": [
        "1fedfedda8a2b75ed56669e28265f943312ec22f",
        "7484c21c4c352a2200d94939fabc10d1bd3f0723"
      ],
      "author": {
        "name": "David James",
        "email": "davidjames@google.com",
        "time": "Thu Feb 02 02:46:40 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Feb 02 02:46:40 2017 +0000"
      },
      "message": "Merge \"Revert \"Remove the global thread list.\"\""
    },
    {
      "commit": "7484c21c4c352a2200d94939fabc10d1bd3f0723",
      "tree": "fe089ec40970a76f11107534632b1fc5789660ed",
      "parents": [
        "b0e8c565a622b5519e03d4416b0b5b1a5f20d7f5"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Feb 02 02:41:38 2017 +0000"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Feb 02 02:41:38 2017 +0000"
      },
      "message": "Revert \"Remove the global thread list.\"\n\nThis reverts commit b0e8c565a622b5519e03d4416b0b5b1a5f20d7f5.\n\nBreaks swiftshader (http:/b/34883464).\n\nChange-Id: I7b21193ba8a78f07d7ac65e41d0fe8516940a83b\n"
    },
    {
      "commit": "9b9d4ebc8bbbdfe627d23f58084ec4ea0bd7a0cb",
      "tree": "b46d2d5dc0e00d024b7d07b1195d5b48141c5922",
      "parents": [
        "b88112dcfc7954f001e722bb274b110e253dae6e",
        "b0e8c565a622b5519e03d4416b0b5b1a5f20d7f5"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Feb 01 16:16:41 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Feb 01 16:16:41 2017 +0000"
      },
      "message": "Merge \"Remove the global thread list.\""
    },
    {
      "commit": "f8562c5f8f0a8df88bd864b8c64eeb9b8905b97d",
      "tree": "b5f9e89d8683da813350e680a1e19882473e8485",
      "parents": [
        "6a9e0c8f15dee1b1b7c5cd7f8e058c2b18683bbc"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Jan 26 16:48:57 2017 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Jan 27 16:19:59 2017 -0800"
      },
      "message": "Remove backwards compatibility for old system properties.\n\nNo-one is directly upgrading from pre-K to O...\n\nAlso move more implementation details out of the header file.\n\nBug: http://b/33926793\nTest: boots\nChange-Id: I7a0936acbb1cea8a3b2cd6797ec53ba7e4a050f3\n"
    },
    {
      "commit": "2e3d6a1d67f78ea37ceb5a082eefbb812c0a320e",
      "tree": "21a3d3b8c084f2c2c66c56cb2f183ec4ac8999e6",
      "parents": [
        "3f6d59977545d65f01bd218c7453c7149d7374a4"
      ],
      "author": {
        "name": "mspector",
        "email": "mspector@google.com",
        "time": "Tue Jan 24 21:51:51 2017 -0800"
      },
      "committer": {
        "name": "mspector",
        "email": "mspector@google.com",
        "time": "Wed Jan 25 17:33:05 2017 -0800"
      },
      "message": "Adding kuser_helper on note to all arm32 binaries.\n\nA kernel change is going in for 64bit arm to disable kuser_helper vector\npages for 32bit processes.  This change adds a special elf note to\nall arm32 binaries built with bionic.  This note tells the kernel to\nload the kuser_helper vector page for the process.\n\nBug: 33689037\nTest: Manual - Phone boots, 32bit binaries have the notes, 64bit\nbinaries do not.\nChange-Id: Ib8366e2a0810092b71381d57dee4bdaa56369a24\n"
    },
    {
      "commit": "35bbed802085e81e268c1198333aa71d26d34109",
      "tree": "9f195438423944be9b2c722179686e606b16bb8e",
      "parents": [
        "98d200899bbce14e676154435c1a521f98d0c6ba"
      ],
      "author": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Tue Jan 17 18:16:07 2017 -0800"
      },
      "committer": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Tue Jan 17 18:31:33 2017 -0800"
      },
      "message": "Declare dependency on android_filesystem_config.h\n\nandroid_filesystem_config.h comes from a directory outside bionic/libc\nso it can\u0027t be referenced directly, add it as a source file through\na filegroup module.\n\nBug: 34283327\nTest: builds\nTest: libc rebuilds after touch system/core/include/private/android_filesystem_config.h\nChange-Id: I90f6b7b25b70842b8619d558074449f13e6e6b03\n"
    },
    {
      "commit": "940d460f59e566f2d84ea3e114074a50996e76b3",
      "tree": "e8e782b4af97446e3938460330631fa4c3b56caa",
      "parents": [
        "74e1fe1cc04f11b05fdc653a992b72c1aa3ff2b5",
        "3f6eee9793e4c41c7f4b15a723c777ae67fb1e51"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Jan 10 01:15:29 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Jan 10 01:15:30 2017 +0000"
      },
      "message": "Merge \"Revert \"Revert \"move android_ids into bionic\"\"\""
    },
    {
      "commit": "b0e8c565a622b5519e03d4416b0b5b1a5f20d7f5",
      "tree": "8362f2754276b72e79a652885be7379127ca6e07",
      "parents": [
        "fb07c36bc061db4ca5d8348ff6bc1e60b6c53191"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Jan 04 14:12:54 2017 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Sat Jan 07 14:16:46 2017 -0800"
      },
      "message": "Remove the global thread list.\n\nAnother release, another attempt to fix this bug.\n\nThis change affects pthread_detach, pthread_getcpuclockid,\npthread_getschedparam/pthread_setschedparam, pthread_join, and pthread_kill:\ninstead of returning ESRCH when passed an invalid pthread_t, they\u0027ll now SEGV.\n\nNote that this doesn\u0027t change behavior as much as you might think: the old\nlookup only held the global thread list lock for the duration of the lookup,\nso there was still a race between that and the dereference in the caller,\ngiven that callers actually need the tid to pass to some syscall or other,\nand sometimes update fields in the pthread_internal_t struct too.\n\nWe can\u0027t check thread-\u003etid against 0 to see whether a pthread_t is still\nvalid because a dead thread gets its thread struct unmapped along with its\nstack, so the dereference isn\u0027t safe.\n\nTaking the affected functions one by one:\n\n* pthread_getcpuclockid and pthread_getschedparam/pthread_setschedparam\n  should be fine. Unsafe calls to those seem highly unlikely.\n\n* Unsafe pthread_detach callers probably want to switch to\n  pthread_attr_setdetachstate instead, or using pthread_detach(pthread_self())\n  from the new thread\u0027s start routine rather than doing the detach in the\n  parent.\n\n* pthread_join calls should be safe anyway, because a joinable thread won\u0027t\n  actually exit and unmap until it\u0027s joined. If you\u0027re joining an\n  unjoinable thread, the fix is to stop marking it detached. If you\u0027re\n  joining an already-joined thread, you need to rethink your design.\n\n* Unsafe pthread_kill calls aren\u0027t portably fixable. (And are obviously\n  inherently non-portable as-is.) The best alternative on Android is to\n  use pthread_gettid_np at some point that you know the thread to be alive,\n  and then call kill/tgkill directly. That\u0027s still not completely safe\n  because if you\u0027re too late, the tid may have been reused, but then your\n  code is inherently unsafe anyway.\n\nIf we find too much code is still broken, we can come back and disable\nthe global thread list lookups for anything targeting \u003e\u003d O and then have\nanother go at really removing this in P...\n\nBug: http://b/19636317\nTest: N6P boots, bionic tests pass\nChange-Id: Ia92641212f509344b99ee2a9bfab5383147fcba6\n"
    },
    {
      "commit": "3f6eee9793e4c41c7f4b15a723c777ae67fb1e51",
      "tree": "8dae7fc7d418fdf69d34057f8b80add179eeb351",
      "parents": [
        "77cb68d9f2621639ec7f4e1b124ceeee5c80a66a"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Dec 13 23:47:25 2016 +0000"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Dec 13 23:47:25 2016 +0000"
      },
      "message": "Revert \"Revert \"move android_ids into bionic\"\"\n\nThis reverts commit 77cb68d9f2621639ec7f4e1b124ceeee5c80a66a.\n\nChange-Id: Ibc9f775c4cd418be90fd8a6f192dd72ca5dff09a\n"
    },
    {
      "commit": "8b3e812684d3a2169b4eca0a115692bcf2bbdfff",
      "tree": "b00b35cb5a6c1e8e4ffba03321438f95b04f9a52",
      "parents": [
        "9438a648eba3739cc02b675086df69c41c118d2d",
        "372f19e9e27c1333c0fc1e83b53d365051e81612"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Tue Dec 13 23:11:27 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Dec 13 23:11:27 2016 +0000"
      },
      "message": "Merge \"libc: ARM64: update memset/strlen/memcpy/memmove to newlib/cortex-strings\""
    },
    {
      "commit": "50ae6dde5b1d5b94f06f50c0d25e7dc7dcd3e726",
      "tree": "01396721e9e9ac797ecb3f49e70e6262e261084f",
      "parents": [
        "901de13c37912286db015b6f9113e39be46ce04d",
        "77cb68d9f2621639ec7f4e1b124ceeee5c80a66a"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Tue Dec 13 00:31:25 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Dec 13 00:31:25 2016 +0000"
      },
      "message": "Merge \"Revert \"move android_ids into bionic\"\""
    },
    {
      "commit": "77cb68d9f2621639ec7f4e1b124ceeee5c80a66a",
      "tree": "ed8d084df93ed051a0688432dac858a6987f381e",
      "parents": [
        "1a13db5b2675759316a8529873c5d29831a9ba32"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Dec 12 22:11:37 2016 +0000"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Dec 12 22:11:37 2016 +0000"
      },
      "message": "Revert \"move android_ids into bionic\"\n\nThis reverts commit 1a13db5b2675759316a8529873c5d29831a9ba32.\n\nChange-Id: I7f571b3a9d542694d16fb9cf1131ef9e59d330ea\n"
    },
    {
      "commit": "ded6c91acc562f0923bb0c6946fba4ea41c0e764",
      "tree": "9df10c348eb8fe30b7b8a8b131aa041f50e6ab4b",
      "parents": [
        "227894a754eb11cb1203c359192d59654b01b93e",
        "1a13db5b2675759316a8529873c5d29831a9ba32"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Sat Dec 10 00:13:04 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Sat Dec 10 00:13:05 2016 +0000"
      },
      "message": "Merge \"move android_ids into bionic\""
    },
    {
      "commit": "fc0d48078a162f50d36965b8c018fed1d766516c",
      "tree": "3841a2762b9fc2851945fed86124f318610f7e39",
      "parents": [
        "53cad4bedac6a8d74b7f3650977a893a8c394e81"
      ],
      "author": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Tue Dec 06 11:10:09 2016 -0800"
      },
      "committer": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Tue Dec 06 11:15:24 2016 -0800"
      },
      "message": "loader: stop linking libdl/c/m into the loader\n\nThis is to prevent situations when libgcc.a calls into incorrect\nimplementation of dl_iterate_phdr.\n\nBug: http://b/27106625\nTest: build \u0026\u0026 run bionic-unit-tests --getst_filter\u003ddl*:Dl*\nChange-Id: I4cba8c4a156f91f17ba3d95c39cb80f9b70c9d8f\n"
    },
    {
      "commit": "68ddf5cad39de9d43b9f3b0f14e85153ce07fe52",
      "tree": "acb2ced64adb06f38c960c70ca87d53de96acdc7",
      "parents": [
        "f347046f2dcc1900224370bb9a4f8580a25c2a16",
        "4bf55226623801fab4751bc0736a07e044d00b49"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Nov 30 23:06:26 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Nov 30 23:06:26 2016 +0000"
      },
      "message": "Merge \"Abort harder.\""
    },
    {
      "commit": "1a13db5b2675759316a8529873c5d29831a9ba32",
      "tree": "8dae7fc7d418fdf69d34057f8b80add179eeb351",
      "parents": [
        "fa1a85d0031c1846f7c2a6137c614f6a12dd2279"
      ],
      "author": {
        "name": "William Roberts",
        "email": "william.c.roberts@intel.com",
        "time": "Fri Apr 08 13:44:19 2016 -0700"
      },
      "committer": {
        "name": "William Roberts",
        "email": "william.c.roberts@intel.com",
        "time": "Wed Nov 30 12:54:08 2016 -0800"
      },
      "message": "move android_ids into bionic\n\nGenerate the android_ids array and include into the\nbuild.\n\nTest: The bionic is built and that core AIDs work as\nexpected with commands like chown, mkdir and init services\nand builtins.\nBug: 27999086\nChange-Id: Ib575bf85326c91801c5674db475dcb9cf44c00dc\nSigned-off-by: William Roberts \u003cwilliam.c.roberts@intel.com\u003e\n"
    },
    {
      "commit": "f563ae89be76fbe43a0299ed17485abd06927b6a",
      "tree": "e7474c908f4c8fe55845f8f2f98c28e855fb7d6e",
      "parents": [
        "04a3b24d7e11cf330e3bb637641966ce951cb387",
        "063e86ace8df5e00f69d99f6d9d138a7ab17df1f"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Wed Nov 30 19:43:29 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Nov 30 19:43:30 2016 +0000"
      },
      "message": "Merge \"Ship all the UAPI bits.\""
    },
    {
      "commit": "4bf55226623801fab4751bc0736a07e044d00b49",
      "tree": "38365d7202df1459e15a0eae01a1e1144f0177ea",
      "parents": [
        "bd734f07167b9e24cd292e669717795f83d10157"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Nov 29 16:59:26 2016 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Nov 29 22:02:25 2016 -0800"
      },
      "message": "Abort harder.\n\nSome PoS internal system can\u0027t cope with more than 4 stack frames,\nso the fact that our abort(3) implementation takes 4 frames by itself\nmakes it useless.\n\nRe-reading POSIX, it only says \"behaves as if\", so the previous\nimplementation chain wasn\u0027t mandatory and we can just go straight to\ncalling tgkill...\n\nBefore:\n\n     #00 pc 0000000000069be4  /system/lib64/libc.so (tgkill+8)\n     #01 pc 0000000000066d50  /system/lib64/libc.so (pthread_kill+64)\n     #02 pc 0000000000028110  /system/lib64/libc.so (raise+24)\n     #03 pc 000000000001d4ec  /system/lib64/libc.so (abort+52)\n\nAfter:\n\n     #00 pc 0000000000069bc8  /system/lib64/libc.so (tgkill+8)\n     #01 pc 000000000001d4c8  /system/lib64/libc.so (abort+80)\n     #02 pc 0000000000001494  /system/xbin/crasher64 (_ZL9do_actionPKc+872)\n     #03 pc 00000000000010e0  /system/xbin/crasher64 (main+88)\n\nThis is less useful on 32-bit ARM because there there\u0027s an extra trampoline\nfrom an assembler abort(3) implementation, so you\u0027ll still only get one\nmeaningful stack frame. But every other architecture will now get two!\n\nBut wait!\n\nIt turns out that the assembler hack isn\u0027t needed any more. Here we are\nunwinding just fine all the way through the 32-bit ARM crasher:\n\nBefore (with direct call to tgkill but still using the assembler):\n\n     #00 pc 00049e7c  /system/lib/libc.so (tgkill+12)\n     #01 pc 00019c6f  /system/lib/libc.so (__libc_android_abort+50)\n     #02 pc 000181f8  /system/lib/libc.so (abort+4)\n     #03 pc 00001025  /system/xbin/crasher (_ZL9do_actionPKc+656)\n     #04 pc 00017721  /system/lib/libc.so (__libc_init+48)\n     #05 pc 00000b38  /system/xbin/crasher (_start+96)\n\nAfter:\n\n     #00 pc 00049e6c  /system/lib/libc.so (tgkill+12)\n     #01 pc 00019c5f  /system/lib/libc.so (abort+50)\n     #02 pc 00001025  /system/xbin/crasher (_ZL9do_actionPKc+656)\n     #03 pc 00017721  /system/lib/libc.so (__libc_init+48)\n     #04 pc 00000b38  /system/xbin/crasher (_start+96)\n\n(As you can see, the fact that we see __libc_init rather than main was true\nwith the assembler stub too, so that\u0027s not a regression even if it does seem\nodd...)\n\nBug: N/A\nTest: ran crasher64\nChange-Id: I9dd5b214c495604c8b502c7ec0de3631080d8c29\n"
    },
    {
      "commit": "609880c12f009bba9bca696df1d6796eb4aba5ad",
      "tree": "1f56652db13d03ea145fb4ffc8724018eb581744",
      "parents": [
        "3b6b2f7c2d922888e1644355b6cb03bef363b691",
        "8f0e42fda6e5c19c3f06d8ba022501f6f480313b"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Wed Nov 30 05:49:03 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Nov 30 05:49:03 2016 +0000"
      },
      "message": "Merge \"Fix getpriority/setpriority types.\""
    },
    {
      "commit": "b99b6762b44f50bb3aa6d9ee4bce527ab7c71065",
      "tree": "52d27f52520749bb1ad67a5f17fe02785409bfb4",
      "parents": [
        "bd734f07167b9e24cd292e669717795f83d10157",
        "7ec52b12efc1c4ed9cd83ba8c95fab5bbf39aaf4"
      ],
      "author": {
        "name": "Dan Willemsen",
        "email": "dwillemsen@google.com",
        "time": "Wed Nov 30 05:32:06 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Nov 30 05:32:06 2016 +0000"
      },
      "message": "Merge \"Enable libc/libdl/libm/linker for host bionic\""
    },
    {
      "commit": "8f0e42fda6e5c19c3f06d8ba022501f6f480313b",
      "tree": "66b46d97df20982bf1c86dbbea9bab952aba3170",
      "parents": [
        "11b362d284b49e070813cd459584ea3dabb20b1e"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Nov 29 15:10:29 2016 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Nov 29 15:14:11 2016 -0800"
      },
      "message": "Fix getpriority/setpriority types.\n\nBug: N/A\nTest: builds\nChange-Id: Ica099bae04a0260871783452811a54672094ba4a\n"
    },
    {
      "commit": "bd734f07167b9e24cd292e669717795f83d10157",
      "tree": "792553a647477a2a57612c45afaac7df43c80752",
      "parents": [
        "86841573ed240e113adba82e97d586d568b9a8b2",
        "a57ca0da69ab9a3f870a584ba1ddab9af432c639"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Nov 29 23:05:31 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Nov 29 23:05:31 2016 +0000"
      },
      "message": "Merge \"Use icu4c to implement \u003cwctype.h\u003e.\""
    },
    {
      "commit": "7ec52b12efc1c4ed9cd83ba8c95fab5bbf39aaf4",
      "tree": "091ac4e81ecc619f8116a3f229ad10f8c47e017d",
      "parents": [
        "11b362d284b49e070813cd459584ea3dabb20b1e"
      ],
      "author": {
        "name": "Dan Willemsen",
        "email": "dwillemsen@google.com",
        "time": "Mon Nov 28 17:02:25 2016 -0800"
      },
      "committer": {
        "name": "Dan Willemsen",
        "email": "dwillemsen@google.com",
        "time": "Tue Nov 29 21:09:05 2016 +0000"
      },
      "message": "Enable libc/libdl/libm/linker for host bionic\n\nDisables debuggerd integration unless building for android.\n\nBug: 31559095\nTest: Diff out/soong/build.ninja before/after, only change is moving\n      linker\u0027s libdebuggerd_client static lib to the beginning of the\n      list.\nTest: lunch aosp_arm64-eng; mmma -j bionic\nChange-Id: I62e725f7a9b98b7fe31637d0a835fd5846b0aff0\n"
    },
    {
      "commit": "a57ca0da69ab9a3f870a584ba1ddab9af432c639",
      "tree": "1e26c4f0e54f3db93ce18f04f49076de6cb4bdee",
      "parents": [
        "a5c16983a65e2169174a0e77a54c0ce650f87b48"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Nov 17 18:18:08 2016 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Nov 29 19:19:30 2016 +0000"
      },
      "message": "Use icu4c to implement \u003cwctype.h\u003e.\n\nPretty useless, because the POSIX APIs are useless for actually\ninternationalization, but it lets us put this to bed for good.\n\nBug: http://b/18492914\nTest: bionic tests\nChange-Id: I4dd0aff66c44b5547039be3ffea806c865b9014a\n"
    },
    {
      "commit": "063e86ace8df5e00f69d99f6d9d138a7ab17df1f",
      "tree": "575cb992c6eacdf2bc947bfbfb05a4abd297c5f6",
      "parents": [
        "1eb0ecb5960a11b04bc36fdf85894e00ce1a1897"
      ],
      "author": {
        "name": "Dan Albert",
        "email": "danalbert@google.com",
        "time": "Tue Nov 29 11:09:12 2016 -0800"
      },
      "committer": {
        "name": "Dan Albert",
        "email": "danalbert@google.com",
        "time": "Tue Nov 29 11:17:58 2016 -0800"
      },
      "message": "Ship all the UAPI bits.\n\nTest: make ndk\nBug: None\nChange-Id: I24507846fb62b5844e06d7a424497a5ffc0357d1\n"
    },
    {
      "commit": "86841573ed240e113adba82e97d586d568b9a8b2",
      "tree": "a581beccee52a1fdfd1005090779ddbd27ba0912",
      "parents": [
        "11b362d284b49e070813cd459584ea3dabb20b1e",
        "fc8e688c322a28803b62eb5bff3c842a440bb2b5"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Nov 29 19:16:08 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Nov 29 19:16:09 2016 +0000"
      },
      "message": "Merge \"Implement \u003clanginfo.h\u003e.\""
    },
    {
      "commit": "ecebb49ac636b90b3db48b7375c26c07c95fd104",
      "tree": "ed9e333921aeb6de3a82e3f32c8317ca7bdf9cb3",
      "parents": [
        "1eb0ecb5960a11b04bc36fdf85894e00ce1a1897"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Mon Nov 28 11:09:49 2016 -0800"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Mon Nov 28 12:49:36 2016 -0800"
      },
      "message": "Add cortex-a7 specific routines.\n\nTest: Changed angler target to use cortex-a7 and I compiled.\nTest: Booted this version on angler and ran bionic-unit-tests.\n\nChange-Id: Ice7f6ea38a2569582161a8e659d7877918c1a45a\n"
    },
    {
      "commit": "372f19e9e27c1333c0fc1e83b53d365051e81612",
      "tree": "81030a0622b9bf7af53e669bd78bca9dfbad1171",
      "parents": [
        "a5c16983a65e2169174a0e77a54c0ce650f87b48"
      ],
      "author": {
        "name": "Jake Weinstein",
        "email": "xboxlover360@gmail.com",
        "time": "Thu Nov 17 16:01:25 2016 -0500"
      },
      "committer": {
        "name": "Jake Weinstein",
        "email": "xboxlover360@gmail.com",
        "time": "Mon Nov 28 19:35:12 2016 +0000"
      },
      "message": "libc: ARM64: update memset/strlen/memcpy/memmove to newlib/cortex-strings\n\n* Bionic benchmarks results at the bottom\n\n* This is a squash of the following commits:\n\nlibc: ARM64: optimize memset.\n\n This is an optimized memset for AArch64.  Memset is split into 4 main\n cases: small sets of up to 16 bytes, medium of 16..96 bytes which are\n fully unrolled.  Large memsets of more than 96 bytes align the\n destination and use an unrolled loop processing 64 bytes per\n iteration.  Memsets of zero of more than 256 use the dc zva\n instruction, and there are faster versions for the common ZVA sizes 64\n or 128.  STP of Q registers is used to reduce codesize without loss of\n performance.\n\nChange-Id: I0c5b5ec5ab8a1fd0f23eee8fbacada0be08e841f\n\nlibc: ARM64: improve performance in strlen\n\nChange-Id: Ic20f93a0052a49bd76cd6795f51e8606ccfbf11c\n\nlibc: ARM64: Optimize memcpy.\n\n This is an optimized memcpy for AArch64.  Copies are split into 3 main\n cases: small copies of up to 16 bytes, medium copies of 17..96 bytes\n which are fully unrolled.  Large copies of more than 96 bytes align\n the destination and use an unrolled loop processing 64 bytes per\n iteration.  In order to share code with memmove, small and medium\n copies read all data before writing, allowing any kind of overlap.  On\n a random copy test memcpy is 40.8% faster on A57 and 28.4% on A53.\n\nChange-Id: Ibb9483e45bbc0e8ca3d5ce98a31c55dfd8a5ac28\n\nlibc: AArch64: Tune memcpy\n\n* Further tuning for performance.\n\nChange-Id: Id08eaab885f9743fa7575077924a947c1b88e4ff\n\nlibc: ARM64: optimize memmove for Cortex-A53\n\n* Sadly does not work on Denver or Kryo, so can\u0027t go to generic\n\n This is an optimized memmove for AArch64.  All copies of up to 96\n bytes and all backward copies are done by the new memcpy.  The only\n remaining case is large forward copies which are done in the same way\n as the memcpy loop, but copying from the end rather than the start.\n\nTested on the Nextbit Robin with MSM8992 (Snapdragon 808):\n\nBefore\nBM_string_memcmp/8                          1000k         27    0.286 GiB/s\nBM_string_memcmp/64                           50M         20    3.053 GiB/s\nBM_string_memcmp/512                          20M        126    4.060 GiB/s\nBM_string_memcmp/1024                         10M        234    4.372 GiB/s\nBM_string_memcmp/8Ki                        1000k       1726    4.745 GiB/s\nBM_string_memcmp/16Ki                        500k       3711    4.415 GiB/s\nBM_string_memcmp/32Ki                        200k       8276    3.959 GiB/s\nBM_string_memcmp/64Ki                        100k      16351    4.008 GiB/s\nBM_string_memcpy/8                          1000k         13    0.612 GiB/s\nBM_string_memcpy/64                         1000k          8    7.187 GiB/s\nBM_string_memcpy/512                          50M         38   13.311 GiB/s\nBM_string_memcpy/1024                         20M         86   11.858 GiB/s\nBM_string_memcpy/8Ki                           5M        620   13.203 GiB/s\nBM_string_memcpy/16Ki                       1000k       1265   12.950 GiB/s\nBM_string_memcpy/32Ki                        500k       2977   11.004 GiB/s\nBM_string_memcpy/64Ki                        500k       8003    8.188 GiB/s\nBM_string_memmove/8                         1000k         11    0.684 GiB/s\nBM_string_memmove/64                        1000k         16    3.855 GiB/s\nBM_string_memmove/512                         50M         57    8.915 GiB/s\nBM_string_memmove/1024                        20M        117    8.720 GiB/s\nBM_string_memmove/8Ki                          2M        853    9.594 GiB/s\nBM_string_memmove/16Ki                      1000k       1731    9.462 GiB/s\nBM_string_memmove/32Ki                       500k       3566    9.189 GiB/s\nBM_string_memmove/64Ki                       500k       7708    8.501 GiB/s\nBM_string_memset/8                          1000k         16    0.487 GiB/s\nBM_string_memset/64                         1000k         16    3.995 GiB/s\nBM_string_memset/512                          50M         37   13.489 GiB/s\nBM_string_memset/1024                         50M         58   17.405 GiB/s\nBM_string_memset/8Ki                           5M        451   18.160 GiB/s\nBM_string_memset/16Ki                          2M        883   18.554 GiB/s\nBM_string_memset/32Ki                       1000k       2181   15.022 GiB/s\nBM_string_memset/64Ki                        500k       4563   14.362 GiB/s\nBM_string_strlen/8                          1000k          8    0.965 GiB/s\nBM_string_strlen/64                         1000k         16    3.855 GiB/s\nBM_string_strlen/512                          20M         92    5.540 GiB/s\nBM_string_strlen/1024                         10M        167    6.111 GiB/s\nBM_string_strlen/8Ki                        1000k       1237    6.620 GiB/s\nBM_string_strlen/16Ki                       1000k       2765    5.923 GiB/s\nBM_string_strlen/32Ki                        500k       6135    5.341 GiB/s\nBM_string_strlen/64Ki                        200k      13168    4.977 GiB/s\n\nAfter\nBM_string_memcmp/8                          1000k         21    0.369 GiB/s\nBM_string_memcmp/64                         1000k         28    2.272 GiB/s\nBM_string_memcmp/512                          20M        128    3.983 GiB/s\nBM_string_memcmp/1024                         10M        234    4.375 GiB/s\nBM_string_memcmp/8Ki                        1000k       1732    4.728 GiB/s\nBM_string_memcmp/16Ki                        500k       3485    4.701 GiB/s\nBM_string_memcmp/32Ki                        500k       7031    4.660 GiB/s\nBM_string_memcmp/64Ki                        200k      14296    4.584 GiB/s\nBM_string_memcpy/8                          1000k          5    1.458 GiB/s\nBM_string_memcpy/64                         1000k          7    8.952 GiB/s\nBM_string_memcpy/512                          50M         36   13.907 GiB/s\nBM_string_memcpy/1024                         20M         80   12.750 GiB/s\nBM_string_memcpy/8Ki                           5M        572   14.307 GiB/s\nBM_string_memcpy/16Ki                       1000k       1165   14.053 GiB/s\nBM_string_memcpy/32Ki                        500k       3141   10.430 GiB/s\nBM_string_memcpy/64Ki                        500k       7008    9.351 GiB/s\nBM_string_memmove/8                           50M          7    1.074 GiB/s\nBM_string_memmove/64                        1000k          9    6.593 GiB/s\nBM_string_memmove/512                         50M         37   13.502 GiB/s\nBM_string_memmove/1024                        20M         80   12.656 GiB/s\nBM_string_memmove/8Ki                          5M        573   14.281 GiB/s\nBM_string_memmove/16Ki                      1000k       1168   14.018 GiB/s\nBM_string_memmove/32Ki                      1000k       2825   11.599 GiB/s\nBM_string_memmove/64Ki                       500k       6548   10.008 GiB/s\nBM_string_memset/8                          1000k          7    1.038 GiB/s\nBM_string_memset/64                         1000k          8    7.151 GiB/s\nBM_string_memset/512                        1000k         29   17.272 GiB/s\nBM_string_memset/1024                         50M         53   18.969 GiB/s\nBM_string_memset/8Ki                           5M        424   19.300 GiB/s\nBM_string_memset/16Ki                          2M        846   19.350 GiB/s\nBM_string_memset/32Ki                       1000k       2028   16.156 GiB/s\nBM_string_memset/64Ki                        500k       4514   14.517 GiB/s\nBM_string_strlen/8                          1000k          7    1.120 GiB/s\nBM_string_strlen/64                         1000k         16    3.918 GiB/s\nBM_string_strlen/512                          50M         64    7.894 GiB/s\nBM_string_strlen/1024                         20M        104    9.815 GiB/s\nBM_string_strlen/8Ki                           5M        664   12.337 GiB/s\nBM_string_strlen/16Ki                       1000k       1291   12.682 GiB/s\nBM_string_strlen/32Ki                       1000k       2940   11.143 GiB/s\nBM_string_strlen/64Ki                        500k       6440   10.175 GiB/s\n\nChange-Id: I635bd2798a755256f748b2af19b1a56fb85a40c6\n"
    },
    {
      "commit": "fc8e688c322a28803b62eb5bff3c842a440bb2b5",
      "tree": "afd7c15b513b9ed246f7b1cbb34de3004c5e53e0",
      "parents": [
        "a5c16983a65e2169174a0e77a54c0ce650f87b48"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Nov 18 16:27:29 2016 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Sat Nov 19 11:46:54 2016 -0800"
      },
      "message": "Implement \u003clanginfo.h\u003e.\n\nPOSIX locale only, as usual.\n\nThe GNU YESSTR and NOSTR extensions return the empty string in the C locale,\nso I haven\u0027t bothered supporting them.\n\nBug: http://b/1401872\nTest: bionic tests\nChange-Id: I6846839e4f9f1812344ed5dce0b93f83c0c20eb3\n"
    },
    {
      "commit": "4ce94d297eaa1f41ce3db20d70bedaa432238c84",
      "tree": "fdd78bb848983f270b7644b914f7a891ee86c1d3",
      "parents": [
        "cd9ce19e9ce34db6201bdb054c40c3b9e766d2d8"
      ],
      "author": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Tue Nov 15 13:15:43 2016 -0800"
      },
      "committer": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Tue Nov 15 15:35:31 2016 -0800"
      },
      "message": "Don\u0027t pack relocations in libc.so\n\nIc9125cc1bc4c9ba9eb20d030de72e3ce1fb86fa6 disabled relocation packing\nin libc.so, but the flag was dropped when we switched to Android.bp\nin Ib0ba2d28bff88483b505426ba61606da314e03ab.\n\nBug: 20645321\nBug: 20655855\nBug: 32750616\nTest: builds\nTest: inspect out/build-aosp_angler.ninja\nTest: run app that crashes with packed libc.so\nChange-Id: Ib0630f2e342afa543bb88303fec8f9695ac583e9\n"
    },
    {
      "commit": "a170d9bfc5fd34097a184bb0ca4d2b459fd93bd1",
      "tree": "272823099dddc33188abc094c4902f8dd274e55d",
      "parents": [
        "98d655ce964a9c5ca8d80b54fd88f1fbb2dbb212"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Thu Nov 10 16:08:29 2016 -0800"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Thu Nov 10 17:02:45 2016 -0800"
      },
      "message": "Revert \"Revert \"Attempt to use arc4random where getauxval(AT_RANDOM) is used.\"\"\n\nThis reverts commit 60d052dda600f26fdb6180ac1a2c53e97df5a58a.\n\nBug: http://b/27729263\nChange-Id: I7f32dc9f9a1f21fda3213f10da940821e1bdd63f\n"
    },
    {
      "commit": "9259265fc2331c819d3b460ee18010b49315349a",
      "tree": "9e71d822c301a2e985686f16b53d0e1cf577124e",
      "parents": [
        "c30862fdbc99eaf4c3859e915846e2ef316b1a47"
      ],
      "author": {
        "name": "Dan Albert",
        "email": "danalbert@google.com",
        "time": "Thu Oct 20 01:42:54 2016 -0700"
      },
      "committer": {
        "name": "Dan Albert",
        "email": "danalbert@google.com",
        "time": "Thu Oct 20 11:52:05 2016 -0700"
      },
      "message": "Add license to ndk_headers modules.\n\nTest: make ndk\nBug: None\nChange-Id: I0e9a39def2be9cd81369843906f6d7c180d17045\n"
    },
    {
      "commit": "df31aff4e98437e47fe88090d8116632b80c4f43",
      "tree": "694bfdc4682b1b035838d444d7a11e57db5f729c",
      "parents": [
        "e35872605b2cd8ebadb7984a93ee38c42aafdffd"
      ],
      "author": {
        "name": "Dan Albert",
        "email": "danalbert@google.com",
        "time": "Thu Oct 06 15:50:41 2016 -0700"
      },
      "committer": {
        "name": "Dan Albert",
        "email": "danalbert@google.com",
        "time": "Thu Oct 06 15:50:41 2016 -0700"
      },
      "message": "Migrate libstdc++ to ndk_library.\n\nTest: make checkbuild\nBug: http://b/30465923\nChange-Id: I3b75b4e7fa652c83846c5978f9908e8b32d43aa7\n"
    },
    {
      "commit": "7b29495d0a13794a30e90a65460def2bbb9739a6",
      "tree": "1789af07752f7d9b6d5b5e73fb3b1f3d256fe4e3",
      "parents": [
        "6a5f7f5873cd0f03ec0cea101752c567d744cbfc"
      ],
      "author": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Thu Sep 29 14:08:13 2016 -0700"
      },
      "committer": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Thu Sep 29 14:37:30 2016 -0700"
      },
      "message": "Update escaping in Android.bp files\n\nStrings like cflags in Android.bp files are parsed by blueprint,\nwritten to build.ninja files, parsed by ninja, and then passed to\n/bin/sh -c.  This had resulted in a combination of blueprint\n(\\\"), ninja ($$), and shell (\\$) escaping being necessary.\n\nSoong has been updated to automatically handle ninja and shell\nescaping, remove extra escaping from Android.bp files.\n\nBug: 31221587\nTest: m -j\nChange-Id: Ib58a51dee8d22296b69ec21768ba6a49dd60e980\n"
    },
    {
      "commit": "bae16ef1bb84890c9ac8b1aacb26ab562a8cc628",
      "tree": "a148d1dd73e1f31caf4d211c279a42a0491d667e",
      "parents": [
        "a39f5d8b95297c1c3af3989946c55d126dd42e98"
      ],
      "author": {
        "name": "Dan Albert",
        "email": "danalbert@google.com",
        "time": "Wed Sep 14 17:15:48 2016 -0700"
      },
      "committer": {
        "name": "Dan Albert",
        "email": "danalbert@google.com",
        "time": "Wed Sep 14 17:16:33 2016 -0700"
      },
      "message": "Add missing uapi header module.\n\nTest: make checkbuild tests\nBug: http://b/30465923\nChange-Id: I4000a9f7aa7ede03dfe799cea7c890bd5dcda575\n"
    },
    {
      "commit": "4238a35007be1e12fabcc9add67ca9fb28a57c30",
      "tree": "474cf278ba1d6721491d90d9ab1d4ef6f9190d07",
      "parents": [
        "31d7037f2ae06f767dfeb69486721b0ecaa7d668"
      ],
      "author": {
        "name": "Dan Albert",
        "email": "danalbert@google.com",
        "time": "Tue Jun 28 11:18:05 2016 -0700"
      },
      "committer": {
        "name": "Dan Albert",
        "email": "danalbert@google.com",
        "time": "Tue Sep 13 14:16:14 2016 -0700"
      },
      "message": "Add modules for NDK headers and libraries.\n\nTest: make checkbuild\nBug: http://b/27533932\nChange-Id: I285e483ba9fb80cc3baf0d025c85344e5b79a08b\n"
    },
    {
      "commit": "7f0849fd113691e62af0400989936d3eff151e37",
      "tree": "166fa5afeed341e2685091c89d9d8418acb66e5d",
      "parents": [
        "a2b947e0a5ff4106e36f8110232131dab1356c25"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Aug 26 16:17:17 2016 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Sep 07 15:01:54 2016 -0700"
      },
      "message": "Fix sscanf/wcstod parsing of NaNs.\n\nThe parsefloat routines -- which let us pass NaNs and infinities on to\nstrto(f|d|ld) -- come from NetBSD.\n\nAlso fix LP64\u0027s strtold to return a NaN, and fix all the architectures\nto return quiet NaNs.\n\nAlso fix wcstof/wcstod/wcstold to use parsefloat so they support hex\nfloats.\n\nLots of new tests.\n\nBug: http://b/31101647\nChange-Id: Id7d46ac2d8acb8770b5e8c445e87cfabfde6f111\n"
    },
    {
      "commit": "60d052dda600f26fdb6180ac1a2c53e97df5a58a",
      "tree": "2c4dc3b5b8835af4d02f477df021fbc4e9eb9edd",
      "parents": [
        "78a52f19bb207d1c736f1d5362e01f338d78645f"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Fri Sep 02 05:48:11 2016 +0000"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Fri Sep 02 05:48:11 2016 +0000"
      },
      "message": "Revert \"Attempt to use arc4random where getauxval(AT_RANDOM) is used.\"\n\nThis reverts commit 78a52f19bb207d1c736f1d5362e01f338d78645f.\n\nChange-Id: Ia72501ad0b81e894d67e5ce59b597397c11acfa5\n"
    },
    {
      "commit": "78a52f19bb207d1c736f1d5362e01f338d78645f",
      "tree": "8c2a9be3f66f3f6e82c752683a4dab2619fa5eb2",
      "parents": [
        "5faef47e438d20600655e2f5ef473c2d63cbf2c0"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Fri Jun 24 17:14:14 2016 -0700"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Wed Aug 31 18:01:05 2016 -0700"
      },
      "message": "Attempt to use arc4random where getauxval(AT_RANDOM) is used.\n\nWhen arc4random can get entropy (which is true for basically everyone\nbut init on kernels that don\u0027t support getrandom), use it instead of\nAT_RANDOM.\n\nBug: http://b/29622562\nChange-Id: I6932803af2c477e65562ff531bd959f199fad1df\n"
    },
    {
      "commit": "e19c672a0667d80b7f170fca0d2fc3a76f0e6e40",
      "tree": "bb306b8d3fea15b742ea4a1e633c7e08870b0b00",
      "parents": [
        "18c31d7f4c93309a0f316412fcc6a829e41eaaae"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Aug 26 16:15:57 2016 +0000"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Aug 26 16:15:57 2016 +0000"
      },
      "message": "Revert \"Switch back to the BSD exec for now.\"\n\nThis reverts commit 18c31d7f4c93309a0f316412fcc6a829e41eaaae.\n\n63615066d9f0b0b1c653c91a9b305e6c292c835a fixed the bug.\n\nChange-Id: I1d59c4be6ad1a05b23dce0198737f0789d7e034a\n"
    }
  ],
  "next": "18c31d7f4c93309a0f316412fcc6a829e41eaaae"
}
