)]}'
{
  "log": [
    {
      "commit": "b83bf14a352269135d3e2fe783414c3b6e1d0ac5",
      "tree": "3e3b5604f28445915e5011af96bacf8e6021f1aa",
      "parents": [
        "1423bb849879f3f126cb1e6dcb279da5360ef5fc"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Mar 22 11:01:25 2018 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Mar 22 13:59:02 2018 -0700"
      },
      "message": "Fortify ppoll64.\n\nI\u0027ve deliberately not bothered with the GCC implementation because we\u0027ll\nhave removed GCC from the NDK before anyone gets to use this.\n\nBug: http://b/72493232\nTest: ran tests\nChange-Id: Icfc2a3b214739ab53aa41bacacc11b5c67498fb4\n"
    },
    {
      "commit": "1423bb849879f3f126cb1e6dcb279da5360ef5fc",
      "tree": "8246f6aab6d8f12eed4e24e96fd4f633e78c123e",
      "parents": [
        "861ff85a19c07f5434b966e50d7ff607c86b931d",
        "48a69742fef07075c112acf821040af06c969d98"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Mar 21 17:01:41 2018 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Mar 21 17:01:41 2018 +0000"
      },
      "message": "Merge \"timer_create: use SIG_SETMASK restore the signal mask.\""
    },
    {
      "commit": "c6b5bcd182edef34f058827882b1908f890cc4cd",
      "tree": "63b9b787f9434c2424f0c2957eb8ce668cb9bd69",
      "parents": [
        "0bc4772ee5e9cbf772227732135fd13e125571a9"
      ],
      "author": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Mon Mar 05 14:14:44 2018 -0800"
      },
      "committer": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Tue Mar 20 18:41:22 2018 -0700"
      },
      "message": "Add _monotonic_np versions of timed wait functions\n\nAs a follow up to Ibba98f5d88be1c306d14e9b9366302ecbef6d534, where we\nadded a work around to convert the CLOCK_REALTIME timeouts to\nCLOCK_MONOTONIC for pthread and semaphore timed wait functions, we\u0027re\nintroducing a set of _monotonic_np versions of each of these functions\nthat wait on CLOCK_MONOTONIC directly.\n\nThe primary motivation here is that while the above work around helps\nfor 3rd party code, it creates a dilemma when implementing new code\nthat would use these functions: either one implements code with these\nfunctions knowing there is a race condition possible or one avoids\nthese functions and reinvent their own waiting/signaling mechanisms.\nNeither are satisfactory, so we create a third option to use these\nAndroid specific _monotonic_np functions that completely remove the\nrace condition while keeping the rest of the interface.\n\nSpecifically this adds the below functions:\npthread_mutex_timedlock_monotonic_np()\npthread_cond_timedwait_monotonic_np()\npthread_rwlock_timedrdlock_monotonic_np()\npthread_rwlock_timedwrlock_monotonic_np()\nsem_timedwait_monotonic_np()\n\nNote that pthread_cond_timedwait_monotonic_np() previously existed and\nwas removed since it\u0027s possible to initialize a condition variable to\nuse CLOCK_MONOTONIC.  It is added back for a mix of reasons,\n1) Symmetry with the rest of the functions we\u0027re adding\n2) libc++ cannot easily take advantage of the new initializer, but\n   will be able to use this function in order to wait on\n   std::steady_clock\n3) Frankly, it\u0027s a better API to specify the clock in the waiter function\n   than to specify the clock when the condition variable is\n   initialized.\n\nBug: 73951740\nTest: new unit tests\nChange-Id: I23aa5c204e36a194237d41e064c5c8ccaa4204e3\n"
    },
    {
      "commit": "48a69742fef07075c112acf821040af06c969d98",
      "tree": "0713f4883c6d6d30295eafd69c35f11be7c58af9",
      "parents": [
        "9d641d518624f00e156bb9464ba271cc2034db1c"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Mar 20 17:58:11 2018 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Mar 20 17:58:11 2018 -0700"
      },
      "message": "timer_create: use SIG_SETMASK restore the signal mask.\n\nBug: http://b/73144101\nTest: ran tests\nChange-Id: I9adf3a512c120ef2280ad469ad11366222d61463\n"
    },
    {
      "commit": "9651fdf93ae2c33fa38a6c5c5005b8596e716789",
      "tree": "e0e9554bd1e79d1232aa1055562b48c1031841a7",
      "parents": [
        "35e620cf98d133ba6e40f7713c858c40bb825a4b"
      ],
      "author": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Wed Mar 14 12:02:21 2018 -0700"
      },
      "committer": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Thu Mar 15 10:44:30 2018 -0700"
      },
      "message": "Check using destroyed mutexes.\n\nFor apps built for Android \u003c P, return EBUSY.\nFor apps built for Android \u003e\u003d P, abort.\n\nThis is to keep old apps work, and help debugging\napps built for \u003e\u003d P.\n\nBug: http://b/74632097\nTest: run bionic-unit-tests.\nTest: run bionic-benchmark.\n\nChange-Id: I5271565a1a6ad12678f85d558a7f862a2b7aab4b\n"
    },
    {
      "commit": "435e669776829fb73ba4bc05a5aa6fcdc6675471",
      "tree": "aeb9fcd5283e73bd7473a1f1c875cac4ab9e7604",
      "parents": [
        "0a2060c090e8b33045236fa0f836903994210c2b",
        "71ba5899ae5857a6510f0fa05039dccee73bcc6a"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Mar 09 18:08:00 2018 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Mar 09 18:08:00 2018 +0000"
      },
      "message": "Merge \"Rewrite system(3) to use posix_spawn(3).\""
    },
    {
      "commit": "832f4907f0bd244aef90955d2b00aac53f1eed6e",
      "tree": "0d0ebe94545d165b8cb05ec8d4439bd36fbe3aa7",
      "parents": [
        "0a8d5f3eb8f4087b307f237943a19ae36b094ced",
        "f55dbc05169ebfb67a4380741a94360b794f5ad9"
      ],
      "author": {
        "name": "Jerry Zhang",
        "email": "zhangjerry@google.com",
        "time": "Wed Mar 07 01:28:26 2018 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Mar 07 01:28:26 2018 +0000"
      },
      "message": "Merge \"Sign extend offset for pwritev/preadv.\""
    },
    {
      "commit": "f55dbc05169ebfb67a4380741a94360b794f5ad9",
      "tree": "9d914f407075dce81e2185d48f0399d9b632989a",
      "parents": [
        "af8d54a7d715bd16bee279a87f42f8604b6b0a46"
      ],
      "author": {
        "name": "Jerry Zhang",
        "email": "zhangjerry@google.com",
        "time": "Tue Mar 06 15:27:07 2018 -0800"
      },
      "committer": {
        "name": "Jerry Zhang",
        "email": "zhangjerry@google.com",
        "time": "Tue Mar 06 15:39:44 2018 -0800"
      },
      "message": "Sign extend offset for pwritev/preadv.\n\nKernel expects a 64 bit offset, so if a\nuser\u0027s offset is 32 bit, the wrapper will\ndrop the sign. To fix, sign extend the\n32 bit value before doing the syscall.\n\nBug: 31225071\nTest: pwritev02 32 bit passes\nChange-Id: Ie272601662c2c35b0e8d8fc3823c9063c2f73e64\n"
    },
    {
      "commit": "71ba5899ae5857a6510f0fa05039dccee73bcc6a",
      "tree": "9d34769766ce10c95ecb32bc5ec25949007a0048",
      "parents": [
        "0a8d5f3eb8f4087b307f237943a19ae36b094ced"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Feb 07 12:44:45 2018 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Mar 05 17:20:12 2018 -0800"
      },
      "message": "Rewrite system(3) to use posix_spawn(3).\n\nWe saw crashes from pthread_exit+debuggerd on LP32\n(https://issuetracker.google.com/72291624), and it seems like the\nequivalent problem should exist with system(3). I fixed posix_spawn(3)\nas part of that bug, so the easiest fix is probably to reuse that.\n\nBug: http://b/72470344\nTest: ran tests\nChange-Id: I05f838706f2b4a14ac3ee21292833e6c8579b0d4\n"
    },
    {
      "commit": "6fcba93b17d52c22bf00211b8bf1524ef61bbcab",
      "tree": "9492683d6366cd184c990f3790f53ec24ef3070c",
      "parents": [
        "a9050686c44c23a17d9e1c619d18991ede3e33f9"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Fri Feb 09 13:38:32 2018 -0800"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Tue Feb 27 14:12:30 2018 -0800"
      },
      "message": "Filter out reserved signals in functions that take sigset_t.\n\nPrevent processes from blocking libc-reserved signals by filtering them\nout.\n\nBug: http://b/73144101\nTest: 32/64-bit bionic-unit-tests-glibc\nTest: 32/64-bit bionic-unit-tests on taimen\nChange-Id: Ibadcaa7f668ed8be885cc61b67fb4b611fce8b17\n"
    },
    {
      "commit": "7ae39129e12b12bfc5cef54432c9598e7d4dfc7e",
      "tree": "cc8cbbb3ab4813748e868f02c025cc247b7d685d",
      "parents": [
        "9c85408d953ea543cc58ea2c1c48b2c65390e834"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Feb 26 16:49:43 2018 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Feb 26 16:59:37 2018 -0800"
      },
      "message": "Move sigprocmask into its own file.\n\nOtherwise clang inlines it into pthread_sigmask(3), which breaks libsigchain.\n\nBug: http://b/73344857\nTest: ran tests, plus the app this broke\nChange-Id: Ie4a1dc8f9c6ba58d1a2fa69aeff961c70b74767d\n"
    },
    {
      "commit": "ee8e3dd67c910907115c7cef87be3d898d71a05d",
      "tree": "022d9c97d9bdc95c34dbf0052b8dcf9ce394bc46",
      "parents": [
        "44c7b6ad0ac277a8ed3ee2278f6c1ee23f130ab5"
      ],
      "author": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Wed Feb 21 15:01:22 2018 -0800"
      },
      "committer": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Wed Feb 21 15:10:17 2018 -0800"
      },
      "message": "Remove non-trivial constructors/destructors from SystemProperties\n\nWith the goal of disallowing exit time destructors, SystemProperties\u0027s\nnon-trivial destructor needs to be removed.  This means replacing the\nunion hack with yet another hack as we don\u0027t want to allocate anything\ndespite relying on some polymorphism.\n\nBug: 73485611\nTest: boot bullhead\nChange-Id: I64223714c9b26c9724bfb8f3e2b0168e47b56bc8\n"
    },
    {
      "commit": "44c7b6ad0ac277a8ed3ee2278f6c1ee23f130ab5",
      "tree": "fb4a4f1583d3523d9344c3b630daafc01df05b5a",
      "parents": [
        "d27a3d7853bcbf537ccaf440228a469e154f72ad",
        "5fe73268f3813144ed7ae29d5b91c26ae8b2f0ca"
      ],
      "author": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Wed Feb 21 04:41:21 2018 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Feb 21 04:41:21 2018 +0000"
      },
      "message": "Merge changes Ibcd45e9b,I1ff5c0fa\n\n* changes:\n  Do not munmap in MmapFile::~MmapFile\n  Build bionic/tests with cpp_std experimental.\n"
    },
    {
      "commit": "5fe73268f3813144ed7ae29d5b91c26ae8b2f0ca",
      "tree": "5b421af08544f44b179ae53585ec604b9fed88cf",
      "parents": [
        "60ddedff0b34f0058780b8cdbdeacef667526d08"
      ],
      "author": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Tue Feb 20 15:40:59 2018 -0800"
      },
      "committer": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Tue Feb 20 16:02:13 2018 -0800"
      },
      "message": "Do not munmap in MmapFile::~MmapFile\n\nHaving any destructor with a global variable in bionic is causing\nsome issues. Since we don\u0027t actually need to munmap in this case, we\nremove the destructor to work around that issue.\n\nA small class is used to still munmap during tests.\n\nBug: 73485611\nTest: bionic unit tests\nChange-Id: Ibcd45e9b1ab22d187ecfc2738bb87244250d81ea\n"
    },
    {
      "commit": "cb4d42173e008217ecb75ef7669d1c41be6ae0c7",
      "tree": "89b605ab10eaecfeed80a39389a95b053c66ae87",
      "parents": [
        "d5172fced0f88114e21086db5defaee64371de32"
      ],
      "author": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Tue Feb 20 15:50:04 2018 -0800"
      },
      "committer": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Tue Feb 20 15:50:04 2018 -0800"
      },
      "message": "Fix mmap leak in MmapFile\n\nIf the mmap\u0027ed file doesn\u0027t end in a new line, previously we\u0027d leak\nthe mmap\u0027ed region.  This change now munmap\u0027s the region.\n\nTest: unit tests\nChange-Id: If28d3d9a6b1b9c54123beecb3bbbe8ed984ca81d\n"
    },
    {
      "commit": "665ce210fab00911321829e6e190405ef18e5032",
      "tree": "69b8621dfae13859842cc9a2f64f409fe16040cd",
      "parents": [
        "38a78728c343f6398763ae8d7e3e8202b927a056",
        "3376c23daceddd603478347c00163f39e7c9e1ee"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Feb 15 01:26:17 2018 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Feb 15 01:26:17 2018 +0000"
      },
      "message": "Merge \"Add remaining _l function stubs.\""
    },
    {
      "commit": "3376c23daceddd603478347c00163f39e7c9e1ee",
      "tree": "d8a6f5383a285783630af07f03e11a5a06677b10",
      "parents": [
        "3374d0cabb973ff2b73ad8cd909389bdeed18658"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Feb 13 23:14:12 2018 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Feb 13 23:14:12 2018 -0800"
      },
      "message": "Add remaining _l function stubs.\n\nBug: http://b/65595804\nTest: ran tests\nChange-Id: I3bea3af20b354d1f0d3e05fd35421a9045f29020\n"
    },
    {
      "commit": "2d1e1011cfe01716573e79c66c03a7d9f6cb2c86",
      "tree": "638e26e848a26608d6b2344fe2fe4975bdf034a6",
      "parents": [
        "af8d54a7d715bd16bee279a87f42f8604b6b0a46",
        "cbc80ba9d839675a0c4891e2ab33f39ba51b04b2"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Wed Feb 14 02:53:37 2018 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Feb 14 02:53:37 2018 +0000"
      },
      "message": "Merge \"Switch the rest of our internal headers to #pragma once.\""
    },
    {
      "commit": "cbc80ba9d839675a0c4891e2ab33f39ba51b04b2",
      "tree": "0b24e6123c94bd3e61d94fd6eca6a3b9cc9b074e",
      "parents": [
        "3374d0cabb973ff2b73ad8cd909389bdeed18658"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Feb 13 14:26:29 2018 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Feb 13 14:27:17 2018 -0800"
      },
      "message": "Switch the rest of our internal headers to #pragma once.\n\nWe\u0027ve been using #pragma once for new internal files, but let\u0027s be more bold.\n\nBug: N/A\nTest: builds\nChange-Id: I7e2ee2730043bd884f9571cdbd8b524043030c07\n"
    },
    {
      "commit": "db478a627482c73c52df9e3929fe7a39f03e4eeb",
      "tree": "15fcd3caeea9269e5e3eefb881ec25bade966bcb",
      "parents": [
        "3374d0cabb973ff2b73ad8cd909389bdeed18658"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Wed Feb 07 18:42:14 2018 -0800"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Tue Feb 13 13:37:30 2018 -0800"
      },
      "message": "Implement malloc hooks.\n\nUse the malloc debug framework to implement the malloc debug hooks\nsince it can introduce a performance issue.\n\nAlso, modify the bionic/tests/utils.h slightly to dump an error message\nwhen the exe failed.\n\nBug: 30561479\n\nTest: Ran malloc hook unit tests.\nTest: Ran malloc debug unit tests.\nTest: Enabled malloc hooks and ran bionic unit tests and verified no\nTest: unexpected failures.\nTest: Enabled malloc debug and malloc hooks and verified malloc debug wins.\nTest: Enabled malloc debug using env, property, and property with name\nTest: still works.\n\nChange-Id: Ib50046a0493c5c2050cf831befb812310bdcc249\n(cherry picked from commit d6a1dc23796696f73f483943534d4c5c4b312d39)\n"
    },
    {
      "commit": "ab8c86159738a774ca99a5b3311e5e3b81fc8ce9",
      "tree": "a35165b08fe9fcd81d936d5a3ae2eadee6e2dc48",
      "parents": [
        "4362da80760ef76af310280e70fddb6b6d3d043f",
        "6034ef85d86675d063d6b1920e85e4c471b95904"
      ],
      "author": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Mon Feb 12 16:27:20 2018 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Feb 12 16:27:20 2018 +0000"
      },
      "message": "Merge \"Add ability to read /etc/passwd and /etc/group\""
    },
    {
      "commit": "4362da80760ef76af310280e70fddb6b6d3d043f",
      "tree": "1c82e79065e631ec1739f588025154696469d253",
      "parents": [
        "6fa9bddbc7188aeb20d6faa4da2e62c12f5a5af2",
        "90242350053e6fd2c03640d3f9b37864d18c414d"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Sat Feb 10 02:30:37 2018 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Sat Feb 10 02:30:37 2018 +0000"
      },
      "message": "Merge \"Remove __overloadable/__RENAME_CLANG\""
    },
    {
      "commit": "6034ef85d86675d063d6b1920e85e4c471b95904",
      "tree": "717a7dfe7c2778a81919f04cccd1cbaf43f9297d",
      "parents": [
        "4cd3550d50cb14efe3d86ab9732ce75def5b85bd"
      ],
      "author": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Fri Feb 02 16:10:07 2018 -0800"
      },
      "committer": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Thu Feb 08 12:38:57 2018 -0800"
      },
      "message": "Add ability to read /etc/passwd and /etc/group\n\nAdd the capability to read /etc/passwd and /etc/group for getpw* and\ngetgr* functions.\n\nBug: 27999086\nTest: pwd, grp, grp_pwd_file unit tests\nTest: Read in custom users/groups from /etc/{passwd,group}\nChange-Id: Idc1f054af8a7ca34743a90493495f0ccc775a0d8\n"
    },
    {
      "commit": "aac0dd98913a4ef5527916cf562cc835f0176d59",
      "tree": "e2c12930dc5e974e2b519979b8da4f7c117058e1",
      "parents": [
        "1a5737a48f0d9bd3159482c24424416a3aeeabcb",
        "87c6aac6d2d63ad46778dc38727f229bd4f45898"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Thu Feb 08 07:47:21 2018 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Feb 08 07:47:21 2018 +0000"
      },
      "message": "Merge \"Don\u0027t use SA_RESTORER if it is not defined\""
    },
    {
      "commit": "87c6aac6d2d63ad46778dc38727f229bd4f45898",
      "tree": "0cf702adc123e070d4963cc9838c45fdc2b721f0",
      "parents": [
        "be6fbae74fc3048647caadd58a9eaad81245e934"
      ],
      "author": {
        "name": "Goran Jakovljevic",
        "email": "goran.jakovljevic@mips.com",
        "time": "Wed Feb 07 11:05:54 2018 +0100"
      },
      "committer": {
        "name": "Goran Jakovljevic",
        "email": "goran.jakovljevic@mips.com",
        "time": "Wed Feb 07 16:56:33 2018 +0100"
      },
      "message": "Don\u0027t use SA_RESTORER if it is not defined\n\nThis is a follow up to I47b0560a30aa33a9b1f1978dfb7f84d2e3d389b8.\nThis fixes MIPS32 build.\n\nTest: successful build and boot aosp_mips-eng\nChange-Id: Ia5b245f5536d8fd037f1798bbdf6215c5f059045\n"
    },
    {
      "commit": "cae21a9b53a10f0cba79bf6783c4a5af16228fed",
      "tree": "c60c6622d2b80f9ad4ae5a990b7fb3439f16444b",
      "parents": [
        "be6fbae74fc3048647caadd58a9eaad81245e934"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Mon Feb 05 18:14:55 2018 -0800"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Wed Feb 07 06:57:14 2018 -0800"
      },
      "message": "Add aligned_alloc to libc.\n\nBug: 72969374\n\nTest: Bionic unit tests pass.\nTest: Malloc debug unit tests pass.\nChange-Id: I235985bbc638855d94249c97c98f14ab2924bda0\n(cherry picked from commit d69ee59594088c0d92ba9273188ef53ea5e6cd6a)\n"
    },
    {
      "commit": "be6fbae74fc3048647caadd58a9eaad81245e934",
      "tree": "d38a3b6da4bc70dbfb4792bc356ba9764f5ec2f7",
      "parents": [
        "fe44c3cde05cac4eacba261cff407c3f9e9b8772",
        "c11fb66739abb9346793c4267cf1437aa8896a6e"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Wed Feb 07 03:19:12 2018 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Feb 07 03:19:12 2018 +0000"
      },
      "message": "Merge \"Inline __libc_arc4random_has_unlimited_entropy.\""
    },
    {
      "commit": "fe44c3cde05cac4eacba261cff407c3f9e9b8772",
      "tree": "b9711407cb69339a17d7a9fc049c12e17413d935",
      "parents": [
        "177429cb8db80496a5fe65430253b37d254dc66f",
        "11f607641000993a90ef774bfab18347052094d6"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Feb 06 23:41:46 2018 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Feb 06 23:41:46 2018 +0000"
      },
      "message": "Merge \"Make sigaction consistent about SA_RESTORER and sa_restorer\""
    },
    {
      "commit": "c11fb66739abb9346793c4267cf1437aa8896a6e",
      "tree": "dd7e857806c36a201dabf6f86dcb85afb2ef3ebb",
      "parents": [
        "a70089163ca09a983772dd2a8daa17e47f8ede53"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Feb 05 17:28:51 2018 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Feb 06 15:35:15 2018 -0800"
      },
      "message": "Inline __libc_arc4random_has_unlimited_entropy.\n\nThe name is misleading anyway.\n\nBug: http://b/67015565\nTest: boots\nChange-Id: Ic765e376d84e1ca474d3324eab32e14ea1ae9712\n"
    },
    {
      "commit": "90242350053e6fd2c03640d3f9b37864d18c414d",
      "tree": "86bd08eae994cc61618b28520cab3ea1b423493e",
      "parents": [
        "2bf1d3dae262f92dbc964be467060dc6a24787af"
      ],
      "author": {
        "name": "George Burgess IV",
        "email": "gbiv@google.com",
        "time": "Tue Feb 06 12:51:31 2018 -0800"
      },
      "committer": {
        "name": "George Burgess IV",
        "email": "gbiv@google.com",
        "time": "Tue Feb 06 13:35:56 2018 -0800"
      },
      "message": "Remove __overloadable/__RENAME_CLANG\n\nNow that we have a clang that supports transparent overloads, we can\nkill all of this cruft, and restore our upstream sources to their\nuntouched glory. Woohoo!\n\nBug: 12231437\nTest: Built aosp_marlin; no obvious patch-related aosp_mips issues.\nChange-Id: I520a19d014f12137f80e43f973dccd6711c571cd\n"
    },
    {
      "commit": "a325151da0dec4d488a9e1cc93a29a561dd00578",
      "tree": "210b9c4879315ce41089b7f1dd3db705bf628297",
      "parents": [
        "a70089163ca09a983772dd2a8daa17e47f8ede53",
        "211c4d35f2a6bea0a3ff1bb1215ec5df9a6115b5"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Feb 06 01:12:35 2018 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Feb 06 01:12:35 2018 +0000"
      },
      "message": "Merge \"Rewrite getentropy.\""
    },
    {
      "commit": "11f607641000993a90ef774bfab18347052094d6",
      "tree": "9acfa2f2965a78ca994bfa5aa8c56b06b4d39653",
      "parents": [
        "a026108ec10c0b711add1e5fb920710ced4a9046"
      ],
      "author": {
        "name": "Evgeny Eltsin",
        "email": "eaeltsin@google.com",
        "time": "Mon Feb 05 13:33:35 2018 +0100"
      },
      "committer": {
        "name": "Evgeny Eltsin",
        "email": "eaeltsin@google.com",
        "time": "Mon Feb 05 22:08:25 2018 +0100"
      },
      "message": "Make sigaction consistent about SA_RESTORER and sa_restorer\n\nBug: http://b/72493232\nTest: bionic-unit-tests --gtest_filter\u003d*signal.sigaction*\nChange-Id: Ia9fceb478498d09c8f2f6222d6a81725e1f6eb23\n"
    },
    {
      "commit": "211c4d35f2a6bea0a3ff1bb1215ec5df9a6115b5",
      "tree": "711bb56de3483b6dff3aef90109038f40435e612",
      "parents": [
        "12d96ed7f59d1e463df581ad6ec7ccfc87d9ef5d"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Feb 02 15:10:32 2018 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Feb 05 12:57:22 2018 -0800"
      },
      "message": "Rewrite getentropy.\n\nThe error handling was a mess, resulting in an infinite loop\n(and a test timeout) if you actually took the /dev/urandom\nfallback. I\u0027m also unconvinced that the getrandom(2) path was correct\nbecause of the various reasons why we might get a short count back\n(http://man7.org/linux/man-pages/man2/getrandom.2.html). In this version,\nthe two paths look very similar except for the getrandom(2) failure case,\nwhere it\u0027s now much clearer that we just give up so that we can boot\n(http://b/33059407).\n\nBug: http://b/33059407\nBug: http://b/67015565\nTest: ran tests on hikey and a ICS Galaxy Nexus\nChange-Id: Ie715d59b46f7a70bae66943c316168838787b40d\n"
    },
    {
      "commit": "a026108ec10c0b711add1e5fb920710ced4a9046",
      "tree": "481b943639b90a725b8469d5ab367ff679103e8f",
      "parents": [
        "b82dcc6fa70a31f6014b069fb97c4a25faebea2c",
        "2dec3d7021fca57721ca7cd973d63ef817557aee"
      ],
      "author": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Sat Feb 03 02:03:47 2018 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Sat Feb 03 02:03:47 2018 +0000"
      },
      "message": "Merge \"Avoid abort when calling pthread_mutex_destroy more than once.\""
    },
    {
      "commit": "2dec3d7021fca57721ca7cd973d63ef817557aee",
      "tree": "138d1d646af52de9a7c10f05fa143649883489a4",
      "parents": [
        "5a00ba7c1c5d563b58255257898fe0a5903933eb"
      ],
      "author": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Fri Feb 02 15:45:24 2018 -0800"
      },
      "committer": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Fri Feb 02 15:45:24 2018 -0800"
      },
      "message": "Avoid abort when calling pthread_mutex_destroy more than once.\n\nBug: http://b/72878088\nTest: run bionic-unit-tests.\nChange-Id: I0c3a6c5a625d187d5f32ec8c821cfdd5e807a671\n"
    },
    {
      "commit": "b82dcc6fa70a31f6014b069fb97c4a25faebea2c",
      "tree": "a5990c3e25acd17d3d8e1ac7425e92e73b9e0f31",
      "parents": [
        "ed95f37bc89ab40c54b67bfc57a6fae16fc77e7a",
        "5a00ba7c1c5d563b58255257898fe0a5903933eb"
      ],
      "author": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Fri Feb 02 19:44:51 2018 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Feb 02 19:44:51 2018 +0000"
      },
      "message": "Merge \"Support priority inheritance mutex in 32-bit programs.\""
    },
    {
      "commit": "5a00ba7c1c5d563b58255257898fe0a5903933eb",
      "tree": "083ed71cdeb769c6de53fd333ca249ff77ab8f3d",
      "parents": [
        "2e2a8930e5f9eb2d9ea4fdb61f746c6f2e2048ac"
      ],
      "author": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Fri Jan 26 17:32:31 2018 -0800"
      },
      "committer": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Thu Feb 01 16:01:46 2018 -0800"
      },
      "message": "Support priority inheritance mutex in 32-bit programs.\n\nAdd fast path calling PIMutexTryLock() in pthread_mutex_lock.\nAdd trace for pi mutex waiting.\n\nBug: http://b/29177606\nTest: run bionic-unit-tests.\nTest: run bionic-benchmarks.\n\nChange-Id: I30b6436692d5ea6b63ca9905df745edb843b5528\n"
    },
    {
      "commit": "3e235911c9cf5062adbb73efb53fe5ed712d7c53",
      "tree": "cdd84807bba4a7d0b0fd947555b2edaa2618df95",
      "parents": [
        "b44bd827abf2b870ebf4a0f6b126098a46bf42ec"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Feb 01 14:21:51 2018 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Feb 01 14:45:15 2018 -0800"
      },
      "message": "Add `struct sigaction64` and `sigaction64`.\n\nBug: http://b/72493232\nTest: ran tests\nChange-Id: I47b0560a30aa33a9b1f1978dfb7f84d2e3d389b8\n"
    },
    {
      "commit": "5905d6f8797056ca4178d42bf1220b6692e557a5",
      "tree": "222848ae0ced32fcf2028a2c6502b4a763c83830",
      "parents": [
        "d435d256da57fdf4278b3198720d881f3edcf452"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Jan 30 15:09:51 2018 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Jan 30 18:47:16 2018 -0800"
      },
      "message": "Add `sigset64_t` and accompanying functions.\n\nThis doesn\u0027t address `struct sigaction` and `sigaction`. That will\ncome later.\n\nBug: http://b/72493232\nTest: ran tests\nChange-Id: I4134346757ce3a4dac6feae413361cec16223386\n"
    },
    {
      "commit": "4cd3550d50cb14efe3d86ab9732ce75def5b85bd",
      "tree": "42e8d4bf48c35810a65a428f2ccf7d917e0e5d01",
      "parents": [
        "4a0797c9d6b7c335b2baf63468ad3f63fc5e2533",
        "2cb5f7f578ec682c2bf628f29ffe21de8ccbc917"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Tue Jan 30 01:17:47 2018 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Jan 30 01:17:47 2018 +0000"
      },
      "message": "Merge \"Move static variable out of should_trace().\""
    },
    {
      "commit": "6dafb4ac781fea2950180048ce903d2a6bbeda39",
      "tree": "610f24970a195ec6e235790651a0eb3285aaf9b9",
      "parents": [
        "2e2a8930e5f9eb2d9ea4fdb61f746c6f2e2048ac"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Jan 26 17:47:56 2018 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Jan 26 17:47:56 2018 -0800"
      },
      "message": "Move all the short \u003csignal.h\u003e functions together.\n\nBug: N/A\nTest: ran tests\nChange-Id: Ie5509e4108efcd5d403227ce99bef2b61c79f757\n"
    },
    {
      "commit": "97d1c75ca5125f8e1dc6db32af1d22807fca1950",
      "tree": "7edc0c869e5c31db62125f0bb3b67bd249f74e32",
      "parents": [
        "b96b02e50b9fedefca6df44b259c0f7d5d403553",
        "4b1c6e73850d2e77c6d05a2f7dad8e3e8c928103"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Fri Jan 26 23:07:49 2018 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Jan 26 23:07:49 2018 +0000"
      },
      "message": "Merge \"Better handling of sigset_t on LP32.\""
    },
    {
      "commit": "4b1c6e73850d2e77c6d05a2f7dad8e3e8c928103",
      "tree": "685c224a8f997ec868c9c0a93e194fe2ae2d8eb8",
      "parents": [
        "73871ad09be8a8259171d606c4e3e3cf08d4733c"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Jan 24 18:54:38 2018 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Jan 26 13:04:57 2018 -0800"
      },
      "message": "Better handling of sigset_t on LP32.\n\nThe main motivation here is that the sigprocmask in pthread_exit wasn\u0027t\nactually blocking the real-time signals, and debuggerd (amongst other\nthings) is using them. I wasn\u0027t able to write a test that actually won\nthat race but I did write an equivalent one for posix_spawn.\n\nThis also fixes all the uses of sigset_t where the sigset_t isn\u0027t\nexposed to the outside (which we can\u0027t easily fix because it would be\nan ABI change).\n\nBug: https://issuetracker.google.com/72291624\nTest: ran tests\nChange-Id: Ib6eebebc5a7b0150079f1cb79593247917dcf750\n"
    },
    {
      "commit": "2cb5f7f578ec682c2bf628f29ffe21de8ccbc917",
      "tree": "9628aa10b187d7d6abc5be6688df9daa2c36df8a",
      "parents": [
        "40517761dc7c69a704285e61a51bd3b76046fcdf"
      ],
      "author": {
        "name": "Wei Li",
        "email": "sirius.liwei@huawei.com",
        "time": "Fri Jan 26 15:00:32 2018 +0800"
      },
      "committer": {
        "name": "Jinguang Dong",
        "email": "dongjinguang@huawei.com",
        "time": "Fri Jan 26 17:01:55 2018 +0800"
      },
      "message": "Move static variable out of should_trace().\n\nStatic variable initialization calls pthread_mutex_lock() and may lead to\ndeadlock if should_trace() is called in pthread_mutex_lock context.\n\nHere is a stack of blocked init process:\n__cxa_guard_acquire -\u003e\nshould_trace        -\u003e\nbionic_trace_begin  -\u003e\n__pthread_mutex_lock_with_timeout -\u003e\n__cxa_guard_release -\u003e\nshould_trace        -\u003e\nbionic_trace_begin  -\u003e\n__pthread_mutex_lock_with_timeout -\u003e\nmutex::lock        -\u003e\nLogMessage::~LogMessage\n......\nSo we need to move it out\n\nTest: 1 Compiled and booted.\n      2 Reboot pressure test for more than 30000 times.\n\nChange-Id: I8d97745161f1aa8942b63338208ea74830768ae1\nSigned-off-by: Wei Li \u003csirius.liwei@huawei.com\u003e\nSigned-off-by: Jinguang Dong \u003cdongjinguang@huawei.com\u003e\n"
    },
    {
      "commit": "6b9c85b36d2e69b45d780e6a0b27d64909311a7e",
      "tree": "eff21cc7000bc125f5c91f0d90819fd778be371f",
      "parents": [
        "73871ad09be8a8259171d606c4e3e3cf08d4733c"
      ],
      "author": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Tue Jan 23 12:56:18 2018 -0800"
      },
      "committer": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Wed Jan 24 16:11:07 2018 -0800"
      },
      "message": "Support priority inheritance mutex in 64bit programs.\n\nBug: http://b/29177606\nTest: run bionic-unit-tests on walleye.\nTest: run bionic-unit-tests-glibc on host.\nChange-Id: Iac349284aa73515f384e7509445f87434757f59e\n"
    },
    {
      "commit": "5cec377f49d6429b19895eb632225cd757ea611e",
      "tree": "bcd08fe1e6b656a5a4e235a225fbe88feb54a112",
      "parents": [
        "0d63a3c233040af004cc470d5f76547f3adc0148"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Jan 19 15:45:23 2018 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Jan 19 15:56:12 2018 -0800"
      },
      "message": "Address a bunch of clang-tidy complaints.\n\nThere were a bunch more unreasonable/incorrect ones, but these ones\nseemed legit. Nothing very interesting, though.\n\nBug: N/A\nTest: ran tests, benchmarks\nChange-Id: If66971194d4a7b4bf6d0251bedb88e8cdc88a76f\n"
    },
    {
      "commit": "f1515f64087e4635a7f53d0e1725240f91a0c4b1",
      "tree": "7a9924fa106ddd80aed09d9bf7eee0b576dfda57",
      "parents": [
        "25a3087d6dde58e126c5ecb1033319ff333fcc59"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Jan 12 15:20:28 2018 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Jan 12 15:20:28 2018 -0800"
      },
      "message": "Clean up the time(2) implementation.\n\nThis is also slightly faster for the no VDSO case (56ns vs 66ns).\n\nBug: N/A\nTest: ran tests, benchmarks\nChange-Id: I2b0edd06ee6942eb57c32678279278a53ca5ee9b\n"
    },
    {
      "commit": "4473ccd5b002b70b04fbcfb1e7e1b93aec7f86d2",
      "tree": "1789fb1df0c8befc8a678f3704d6f11445acfdd4",
      "parents": [
        "b1e90d29ac22cf9c33662bf11a8b63b7f8f5d37a"
      ],
      "author": {
        "name": "Mark Salyzyn",
        "email": "salyzyn@google.com",
        "time": "Mon Dec 04 13:51:29 2017 -0800"
      },
      "committer": {
        "name": "Mark Salyzyn",
        "email": "salyzyn@google.com",
        "time": "Thu Jan 11 15:46:11 2018 +0000"
      },
      "message": "bionic: add vdso time()\n\ntime() can be a hot call, and it currently uses __vdso_gettimeofday,\nwhich is already pretty fast (~3 times faster than the syscall),\nbut with a __vdso_time call it is ~3 times even faster, in part\nbecause __vdso_time does not require interlocking with updates,\nand the read for just the seconds is atomic.  __vdso_time is\nalways available, whereas __vdso_gettimeofday is gated on access\nto the physical timers.  arm improvement is compelling (x10),\nx86 improvement is even more pronounced (x100).\n\n[TL;DR]\n\nw/vdso32 kernel patches, locked cores to MAX, little cores only.\n\nBEFORE:\n\nhikey960 vdso (aarch64):\n\n----------------------------------------------------------------------\nBenchmark                               Time           CPU Iterations\n----------------------------------------------------------------------\nBM_time_clock_gettime                  48 ns         48 ns   15414753\nBM_time_clock_gettime_syscall         175 ns        175 ns    4062031\nBM_time_clock_gettime_REALTIME         44 ns         44 ns   15897875\nBM_time_clock_gettime_BOOTTIME         47 ns         47 ns   14307903\nBM_time_clock_gettime_TAI             210 ns        210 ns    3341372\nBM_time_clock_gettime_unsupported     100 ns        100 ns    7030649\nBM_time_gettimeofday                   47 ns         47 ns   14969643\nBM_time_gettimeofday_syscall          163 ns        163 ns    4283542\nBM_time_time                           59 ns         59 ns   11815385\n\nhikey960 vdso32 (aarch32):\n\n----------------------------------------------------------------------\nBenchmark                               Time           CPU Iterations\n----------------------------------------------------------------------\nBM_time_clock_gettime                  90 ns         90 ns    7572898\nBM_time_clock_gettime_syscall         251 ns        251 ns    2763442\nBM_time_clock_gettime_REALTIME         81 ns         80 ns    8699536\nBM_time_clock_gettime_BOOTTIME         97 ns         97 ns    7256667\nBM_time_clock_gettime_TAI             272 ns        272 ns    2570419\nBM_time_clock_gettime_unsupported     160 ns        160 ns    4379819\nBM_time_gettimeofday                   73 ns         73 ns    9608922\nBM_time_gettimeofday_syscall          200 ns        199 ns    3527957\nBM_time_time                          123 ns        123 ns    5651095\n\nx86_64 (glibc):\n\n--------------------------------------------------------------------\nBenchmark                             Time           CPU Iterations\n--------------------------------------------------------------------\nBM_time_clock_gettime                  21 ns         21 ns   28873070\nBM_time_clock_gettime_syscall         224 ns        224 ns    3095370\nBM_time_clock_gettime_REALTIME         17 ns         17 ns   42083086\nBM_time_clock_gettime_BOOTTIME        239 ns        239 ns    2924015\nBM_time_clock_gettime_TAI             236 ns        236 ns    2961423\nBM_time_clock_gettime_unsupported     221 ns        221 ns    3357696\nBM_time_gettimeofday                 22 ns         22 ns   27975154\nBM_time_gettimeofday_syscall        238 ns        238 ns    2882032\nBM_time_time                          2 ns          2 ns  340354885\nBM_time_time_syscall                207 ns        207 ns    3383073\n\nimx7d_pico IOT nyc (w/arm,cpu-registers-not-fw-configured) (armv7a):\n(virtual timers)\n\nBenchmark                           Time(ns)    CPU(ns) Iterations\n------------------------------------------------------------------\nBM_time_clock_gettime                     20        477    1489362\nBM_time_clock_gettime_syscall             20        487    1458333\nBM_time_clock_gettime_REALTIME            19        464    1400000\nBM_time_clock_gettime_BOOTTIME            29        700    1000000\nBM_time_clock_gettime_TAI                 29        690    1000000\nBM_time_clock_gettime_unsupported          9        227    3043478\nBM_time_gettimeofday                      18        444    1555556\nBM_time_gettimeofday_syscall              19        456    1555556\nBM_time_time                              21        497    1166667\n\nimx7d_pico IOT nyc (wo/arm,cpu-registers-not-fw-configured) (armv7a):\n(physical timers)\n\nBenchmark                           Time(ns)    CPU(ns) Iterations\n------------------------------------------------------------------\nBM_time_clock_gettime                      6        144    4666667\nBM_time_clock_gettime_syscall             20        486    1400000\nBM_time_clock_gettime_REALTIME             6        136    5000000\nBM_time_clock_gettime_BOOTTIME             6        153    4375000\nBM_time_clock_gettime_TAI                 31        760    1000000\nBM_time_clock_gettime_unsupported         10        233    3043478\nBM_time_gettimeofday                       6        140    5000000\nBM_time_gettimeofday_syscall              19        450    1555556\nBM_time_time                               9        203    3500000\n\nAFTER:\n\nhikey960 vdso (aarch64):\n\n--------------------------------------------------------------------\nBenchmark                             Time           CPU Iterations\n--------------------------------------------------------------------\nBM_time_clock_gettime                48 ns         48 ns   15414753\nBM_time_clock_gettime_syscall       175 ns        175 ns    4062031\nBM_time_clock_gettime_REALTIME       44 ns         44 ns   15897875\nBM_time_clock_gettime_BOOTTIME       47 ns         47 ns   14307903\nBM_time_clock_gettime_TAI           210 ns        210 ns    3341372\nBM_time_clock_gettime_unsupported   100 ns        100 ns    7030649\nBM_time_gettimeofday                 47 ns         47 ns   14975314\nBM_time_gettimeofday_syscall        164 ns        164 ns    4278797\nBM_time_time                         16 ns         16 ns   42932165\n\nhikey960 vdso32 (aarch32):\n\n--------------------------------------------------------------------\nBenchmark                             Time           CPU Iterations\n--------------------------------------------------------------------\nBM_time_clock_gettime                90 ns         90 ns    7572898\nBM_time_clock_gettime_syscall       251 ns        251 ns    2763442\nBM_time_clock_gettime_REALTIME       81 ns         80 ns    8699536\nBM_time_clock_gettime_BOOTTIME       97 ns         97 ns    7256667\nBM_time_clock_gettime_TAI           272 ns        272 ns    2570419\nBM_time_clock_gettime_unsupported   160 ns        160 ns    4379819\nBM_time_gettimeofday                 73 ns         73 ns    9596230\nBM_time_gettimeofday_syscall        199 ns        199 ns    3575428\nBM_time_time                         35 ns         35 ns   19798801\n\nimx7d_pico IOT nyc (w/arm,cpu-registers-not-fw-configured) (armv7a):\n\nBenchmark                           Time(ns)    CPU(ns) Iterations\n------------------------------------------------------------------\nBM_time_clock_gettime                     20        477    1489362\nBM_time_clock_gettime_syscall             20        487    1458333\nBM_time_clock_gettime_REALTIME            19        464    1400000\nBM_time_clock_gettime_BOOTTIME            29        700    1000000\nBM_time_clock_gettime_TAI                 29        690    1000000\nBM_time_clock_gettime_unsupported          9        227    3043478\nBM_time_gettimeofday                      18        444    1555556\nBM_time_gettimeofday_syscall              19        456    1555556\nBM_time_time                               2         50   11666667\n\nimx7d_pico IOT nyc (wo/arm,cpu-registers-not-fw-configured) (armv7a):\n\nBenchmark                           Time(ns)    CPU(ns) Iterations\n------------------------------------------------------------------\nBM_time_clock_gettime                      6        144    4666667\nBM_time_clock_gettime_syscall             20        486    1400000\nBM_time_clock_gettime_REALTIME             6        136    5000000\nBM_time_clock_gettime_BOOTTIME             6        153    4375000\nBM_time_clock_gettime_TAI                 31        760    1000000\nBM_time_clock_gettime_unsupported         10        233    3043478\nBM_time_gettimeofday                       6        140    5000000\nBM_time_gettimeofday_syscall              19        450    1555556\nBM_time_time                               2         50   10000000\n\nTest: bionic-unit-tests --gtest_filter\u003dtime.time\n      taskset F bionic-benchmarks --bionic_xml\u003dvdso.xml \\\n          --benchmark_filter\u003d\u0027BM_time_(time*|clock_gettime*|gettimeofday*)\u0027\nBug: 63737556\nChange-Id: I81b088a12ca41a6c4733d46c5477527777138efa\n"
    },
    {
      "commit": "06016f226efe7aff2736643cb8e719c513948ecc",
      "tree": "9966630fba35664dc74ac357c43dc81257115410",
      "parents": [
        "581723ebc7acdbf8b095b44928dac3d0767382fa"
      ],
      "author": {
        "name": "dimitry",
        "email": "dimitry@google.com",
        "time": "Fri Jan 05 11:39:28 2018 +0100"
      },
      "committer": {
        "name": "dimitry",
        "email": "dimitry@google.com",
        "time": "Wed Jan 10 10:24:06 2018 +0100"
      },
      "message": "Fix dlclose for libraries with thread_local dtors\n\nIntroduce new flag to mark soinfo as TLS_NODELETE when\nthere are thread_local dtors associated with dso_handle\nbelonging to it.\n\nTest: bionic-unit-tests --gtest_filter\u003ddl*\nTest: bionic-unit-tests-glibc --gtest_filter\u003ddl*\nBug: https://github.com/android-ndk/ndk/issues/360\nChange-Id: I724ef89fc899788f95c47e6372c38b3313f18fed\n"
    },
    {
      "commit": "cb239bda6569c48efd3925bb87682fc0efa077fd",
      "tree": "becb3004fc64eee97b8dd3af604787b8a8eaa161",
      "parents": [
        "2c5f914584704878d6d1e0225304bd48844329e3"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Dec 20 17:37:11 2017 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Dec 21 17:44:22 2017 -0800"
      },
      "message": "Simplify atoi*/strto* for signed integers.\n\nMake the cost of strto\u003csigned\u003e closer to the cost of strto\u003cunsigned\u003e\nby removing an `if` from the inner loop. Previously a signed conversion\ncost 10ns more than an unsigned one.\n\nAfter:\n\n  BM_inttypes_strtoimax         81 ns         81 ns    8603362\n  BM_inttypes_strtoumax         78 ns         78 ns    8967174\n  BM_stdlib_strtol              81 ns         81 ns    8685537\n  BM_stdlib_strtoll             81 ns         81 ns    8685481\n  BM_stdlib_strtoul             78 ns         78 ns    8962569\n  BM_stdlib_strtoull            78 ns         78 ns    8972023\n\nBug: N/A\nTest: ran tests, benchmarks\nChange-Id: I72dd5499427b6a940bd94c4d6f727f7efe134d7e\n"
    },
    {
      "commit": "1133fecde3899183b5c0edee9c92736ad878a290",
      "tree": "00c55fa5d1a6971e5cbf47d4c6d84112c5c9165c",
      "parents": [
        "9dc37b9439063df2b0db6d1b3a37b491bc3cd427"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Dec 19 16:30:55 2017 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Dec 19 16:37:01 2017 -0800"
      },
      "message": "Use inline ctype functions for ato*/strto* and scanf.\n\nThis also let us remove the `unsigned char` casts, since we define our\ninlines to work for all values.\n\nBefore:\n\n  Benchmark                      Time           CPU Iterations\n  -------------------------------------------------------------\n  BM_inttypes_strtoimax        112 ns        112 ns    6222193\n  BM_inttypes_strtoumax        104 ns        104 ns    6725010\n  BM_stdlib_strtol             113 ns        113 ns    6195861\n  BM_stdlib_strtoll            113 ns        113 ns    6195633\n  BM_stdlib_strtoul            105 ns        105 ns    6691394\n  BM_stdlib_strtoull           105 ns        105 ns    6690695\n\n  BM_stdio_scanf_d                    504 ns        503 ns    1385224\n  BM_stdio_scanf_maps                1900 ns       1898 ns     369260\n  BM_stdio_scanf_maps_baseline       1030 ns       1030 ns     678832\n  BM_stdio_scanf_s                    433 ns        432 ns    1619086\n\nAfter:\n\n  BM_inttypes_strtoimax         91 ns         91 ns    7718194\n  BM_inttypes_strtoumax         82 ns         82 ns    8508052\n  BM_stdlib_strtol              92 ns         92 ns    7674694\n  BM_stdlib_strtoll             91 ns         91 ns    7639228\n  BM_stdlib_strtoul             83 ns         82 ns    8500304\n  BM_stdlib_strtoull            82 ns         82 ns    8504929\n\n  BM_stdio_scanf_d                    465 ns        465 ns    1507891\n  BM_stdio_scanf_maps                1836 ns       1836 ns     381082\n  BM_stdio_scanf_maps_baseline        846 ns        845 ns     830881\n  BM_stdio_scanf_s                    419 ns        419 ns    1671979\n\nBug: N/A\nTest: ran tests, benchmarks\nChange-Id: I44681daf16c4328b060770cf11fc0633157c427f\n"
    },
    {
      "commit": "9dc37b9439063df2b0db6d1b3a37b491bc3cd427",
      "tree": "875c7be62c7bdb0bcfa8be79350e6b053d825603",
      "parents": [
        "811a1dd8680ccc0c052651cb30ecf6416613c627",
        "1921dce886c8ea17fb7958b59a18a71b6dc7ff96"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Dec 20 00:05:57 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Dec 20 00:05:57 2017 +0000"
      },
      "message": "Merge \"Refactor the ato* and strto* family.\""
    },
    {
      "commit": "1921dce886c8ea17fb7958b59a18a71b6dc7ff96",
      "tree": "7e28abec7cf31f9e06ebe79472e35a8b12af5ed2",
      "parents": [
        "721a5305e24b69b68ecc9431526f32131abc8f6c"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Dec 19 10:27:27 2017 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Dec 19 13:55:54 2017 -0800"
      },
      "message": "Refactor the ato* and strto* family.\n\nThere are no meaningful changes here, just a minimal conversion to two\nC++ templates to make further changes easier.\n\nBug: N/A\nTest: ran tests, benchmarks\nChange-Id: I958fbf17a85f19dd8f17bfb4bbb9314d220daa3b\n"
    },
    {
      "commit": "e275d6d72db1868056a204e8483a7346a28cb8d6",
      "tree": "3191e33ca242518f7d486c6b37212c7f682498b0",
      "parents": [
        "721a5305e24b69b68ecc9431526f32131abc8f6c"
      ],
      "author": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Mon Dec 11 23:31:33 2017 -0800"
      },
      "committer": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Mon Dec 18 15:17:55 2017 -0800"
      },
      "message": "Split properties into their own class to make testing better\n\nReinitializing system properties can result in crashes later in the\nprogram, and is generally not recommended or even supported.  This\nchange moves the actual logic for system properties into a class that\ncan be tested in isolation, without reinitializing the actual system\nproperty area used in libc.\n\nBug: 62197783\nTest: boot devices, ensure properties work\nTest: system property unit tests and benchmarks\nChange-Id: I9ae6e1b56c62f51a4d3fdb5b62b8926cef545649\n"
    },
    {
      "commit": "b9d5a87b1b63095d7ad7a3d87d8d110d1662fcaa",
      "tree": "98b230bc67779a8da0d8fc085c4f2b32f8c8502f",
      "parents": [
        "59a6ee963f96eedf01df7db1e57397ff71852b15",
        "96bbc5ca87b0cfbcab3bd9e5fc49b71420bf3c08"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Fri Dec 15 17:41:27 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Dec 15 17:41:27 2017 +0000"
      },
      "message": "Merge \"Use treble_linker_namespace instead of treble.\""
    },
    {
      "commit": "96bbc5ca87b0cfbcab3bd9e5fc49b71420bf3c08",
      "tree": "1980633e8aa554996f4c16a85e0e976bf34d80fe",
      "parents": [
        "78b40e8fe1f37de319344c92d8e6e1eb595c1067"
      ],
      "author": {
        "name": "Steven Moreland",
        "email": "smoreland@google.com",
        "time": "Wed Dec 13 14:11:26 2017 -0800"
      },
      "committer": {
        "name": "Steven Moreland",
        "email": "smoreland@google.com",
        "time": "Wed Dec 13 14:11:26 2017 -0800"
      },
      "message": "Use treble_linker_namespace instead of treble.\n\nMore specific. Treble is being removed.\n\nBug: 62019611\nTest: manual\nChange-Id: I94c21c6a5cb6a258bfb36a0b7da23abdc73a67fb\n"
    },
    {
      "commit": "79249b0897016cdcd1344f4c5e8876fbf433de3e",
      "tree": "6b7a479b3a82507a0070777d1be3e6fa73b78cc3",
      "parents": [
        "6f9c35ded294ca7b0b8f9042f705cbfca1ec8518"
      ],
      "author": {
        "name": "Mark Salyzyn",
        "email": "salyzyn@google.com",
        "time": "Tue Nov 07 08:19:20 2017 -0800"
      },
      "committer": {
        "name": "Mark Salyzyn",
        "email": "salyzyn@google.com",
        "time": "Thu Dec 07 09:41:48 2017 -0800"
      },
      "message": "bionic: add vdso clock_getres\n\nclock_getres() should not be a hot call, nevertheless it is\n~6-7 times faster for supported clock ids if it uses\n__vdso_clock_getres if available.  There is a 3% performance\npenalty for unsupported clock ids via __vdso_clock_getres with\nrespect to a direct syscall.\n\n[TL;DR]\n\nw/vdso32 kernel patches, locked cores to MAX, little cores only.\n\nBEFORE:\n\nhikey960 vdso (aarch64):\n\n----------------------------------------------------------------------\nBenchmark                               Time           CPU Iterations\n----------------------------------------------------------------------\nBM_time_clock_getres                  126 ns        126 ns    5577874\nBM_time_clock_getres_syscall          127 ns        127 ns    5505016\nBM_time_clock_getres_REALTIME         126 ns        126 ns    5574682\nBM_time_clock_getres_BOOTTIME         126 ns        126 ns    5575237\nBM_time_clock_getres_TAI              126 ns        126 ns    5576810\nBM_time_clock_getres_unsupported      128 ns        128 ns    5480189\n\nhikey960 vdso32 (aarch32):\n\n----------------------------------------------------------------------\nBenchmark                               Time           CPU Iterations\n----------------------------------------------------------------------\nBM_time_clock_getres                  199 ns        199 ns    3508708\nBM_time_clock_getres_syscall          220 ns        220 ns    3184676\nBM_time_clock_getres_REALTIME         199 ns        199 ns    3509697\nBM_time_clock_getres_BOOTTIME         199 ns        199 ns    3513551\nBM_time_clock_getres_TAI              200 ns        199 ns    3512412\nBM_time_clock_getres_unsupported      196 ns        196 ns    3575609\n\nx86_64 (glibc):\n\n---------------------------------------------------------------------\nBenchmark                              Time           CPU Iterations\n---------------------------------------------------------------------\nBM_time_clock_getres                 252 ns        252 ns    2370263\nBM_time_clock_getres_syscall         215 ns        215 ns    3287497\nBM_time_clock_getres_REALTIME        214 ns        214 ns    3294228\nBM_time_clock_getres_BOOTTIME        213 ns        213 ns    3277519\nBM_time_clock_getres_TAI             213 ns        213 ns    3294991\nBM_time_clock_getres_unsupported     206 ns        206 ns    3450654\n\nimx7d_pico IOT nyc (w/arm,cpu-registers-not-fw-configured) (armv7a):\n(Virtual Timers)\n\nBenchmark                           Time(ns)    CPU(ns) Iterations\n------------------------------------------------------------------\nBM_time_clock_getres                      16        345    2000000\nBM_time_clock_getres_syscall              16        339    2121212\nBM_time_clock_getres_REALTIME             17        350    2058824\nBM_time_clock_getres_BOOTTIME             17        345    2000000\nBM_time_clock_getres_TAI                  16        350    2000000\nBM_time_clock_getres_unsupported          13        284    2500000\n\nAFTER:\n\nhikey960 vdso (aarch64):\n\n---------------------------------------------------------------------\nBenchmark                              Time           CPU Iterations\n---------------------------------------------------------------------\nBM_time_clock_getres                  18 ns         18 ns   37880389\nBM_time_clock_getres_syscall         127 ns        127 ns    5520029\nBM_time_clock_getres_REALTIME         18 ns         18 ns   37879962\nBM_time_clock_getres_BOOTTIME         19 ns         18 ns   37878361\nBM_time_clock_getres_TAI             131 ns        131 ns    5368484\nBM_time_clock_getres_unsupported      97 ns         97 ns    7182864\n\nhikey960 vdso32 (aarch32):\n\n---------------------------------------------------------------------\nBenchmark                              Time           CPU Iterations\n---------------------------------------------------------------------\nBM_time_clock_getres                  36 ns         36 ns   19205240\nBM_time_clock_getres_syscall         212 ns        212 ns    3297100\nBM_time_clock_getres_REALTIME         36 ns         36 ns   19219109\nBM_time_clock_getres_BOOTTIME         36 ns         36 ns   19222490\nBM_time_clock_getres_TAI             206 ns        206 ns    3402868\nBM_time_clock_getres_unsupported     159 ns        159 ns    4409492\n\nimx7d_pico IOT nyc (wo/arm,cpu-registers-not-fw-configured) (armv7a):\n(Physical Timers)\n\nBenchmark                           Time(ns)    CPU(ns) Iterations\n------------------------------------------------------------------\nBM_time_clock_getres                       2         48   14000000\nBM_time_clock_getres_syscall              14        335    2058824\nBM_time_clock_getres_REALTIME              2         49   14583333\nBM_time_clock_getres_BOOTTIME              2         48   14000000\nBM_time_clock_getres_TAI                  14        350    2058824\nBM_time_clock_getres_unsupported           8        203    3500000\n\nTest: taskset F \\\n        /data/benchmarktest{64}/bionic-benchmarks/bionic-benchmarks \\\n        --bionic_xml\u003dvdso.xml --benchmark_filter\u003dBM_time_clock_getres*\nBug: 63737556\nChange-Id: I80c0a5106625d76720287f715fcf145d2aad1705\n"
    },
    {
      "commit": "c1f6219c32543cb1d6701b13eb53b82abe1e0a12",
      "tree": "81b7c1c2135335afdedb85a0669980d73dec57c6",
      "parents": [
        "d5e486cc88296ab71d09dff01df0230caa5012ae",
        "a6714d106b6dbab6cf994c8a4e1eff601a17d772"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Dec 05 17:09:17 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Dec 05 17:09:17 2017 +0000"
      },
      "message": "Merge \"Make our fortify FD_ISSET const, and expose the fd_mask type.\""
    },
    {
      "commit": "a6714d106b6dbab6cf994c8a4e1eff601a17d772",
      "tree": "ad5552dd505ed68b35f9aff8d91f3b8d17192872",
      "parents": [
        "fdacec1d4237373354d10c5a400c9c7a3a975285"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Dec 04 14:16:38 2017 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Dec 04 14:16:38 2017 -0800"
      },
      "message": "Make our fortify FD_ISSET const, and expose the fd_mask type.\n\nBug: http://b/70171464\nTest: ran tests\nChange-Id: Ifbee29d9888ce7cf76b99844dd9700128256a486\n"
    },
    {
      "commit": "b8facf2aca530df01914f07c2c0693ff4319daaa",
      "tree": "3d6d0ed7d5fa4c64b5e511045e0e53017f964463",
      "parents": [
        "bfd06f63e538681beeb9ec67bccd994ad9cd5bdf"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Mon Dec 04 13:46:36 2017 -0800"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Mon Dec 04 13:47:17 2017 -0800"
      },
      "message": "Reformat SIGRTMIN comments.\n\nTest: none\nChange-Id: Ief1f0c06c17df6704863c8c7176941447f2e28f4\n"
    },
    {
      "commit": "7bfacaabf250d8aed5de82e8091b3251bd8dd53f",
      "tree": "d7f131953ebc2112db639e19dad7f152faa7f155",
      "parents": [
        "0a25aa60a2a7cc6b681dd2e31321000cedbff77e"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Nov 28 19:58:00 2017 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Nov 29 18:36:38 2017 -0800"
      },
      "message": "Fix posix_spawn signal defaulting.\n\nAdd a new stress test, and fix the code to pass it. We need to ensure that\nwe reset signal handlers for caught signals before unblocking signals in\nthe child, we need to ensure that this happens even if you haven\u0027t passed\na pthread_spawn_attr_t, and we need to ensure that this happens if you\npass in an empty sigdefault set.\n\nBug: http://b/68707996\nTest: ran tests\nChange-Id: I348e9b17b1bdf221591da42c0ada133d98471d66\n"
    },
    {
      "commit": "9591df5294527616686c9a99f14a5d94572f637c",
      "tree": "43d8ffa8dac23e0712b7ce2bbb5e2386d74ff851",
      "parents": [
        "b7d6df2b61f7941e24d362105a43950da6f2da05"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Nov 27 20:30:25 2017 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Nov 28 09:09:01 2017 -0800"
      },
      "message": "Fix vdso system call fallback failures.\n\nWhen a vdso call falls back to making a regular system call, the inline\ncode for the system call doesn\u0027t know about errno and just leaves the\nusual kernel result to be translated. Add the missing translation.\n\nAlso fix the defaults for non-vdso systems so we actually take the\nfallback path (and so avoid unintentionally doing the errno translation\ntwice in those cases).\n\nBug: http://b/69626243\nTest: ran new tests from http://b/63737556\nChange-Id: If379632ea2e059e3d3bc3ff41bf3608dc05fb0a3\n"
    },
    {
      "commit": "8c75675ec69a65faf9bd422b4df19588151da95d",
      "tree": "5387aeb938fc6e6c49bdecf6c87bc3559710e5d3",
      "parents": [
        "e0dfad45047ed5276b40f126f199b312fb1ea498",
        "baed51ee3a13dae4b87b11870bdf7f10bdc9efc1"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Nov 16 21:46:49 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Nov 16 21:46:49 2017 +0000"
      },
      "message": "Merge \"Change ARG_MAX/_SC_ARG_MAX back to a constant.\""
    },
    {
      "commit": "c3f1b6a23d41d95b45cf66c57323939c3450d196",
      "tree": "3df7a9080cc0dc479874b8ab6e9f8f732ba6316e",
      "parents": [
        "de5f9a1c54eebd1b66a5dfeaffbe3e703e76c86e",
        "2b8ab4b5da58105432081ed8302a4364583c2279"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Nov 16 00:08:31 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Nov 16 00:08:31 2017 +0000"
      },
      "message": "Merge \"Simplify the posix_spawn sigdefault logic.\""
    },
    {
      "commit": "baed51ee3a13dae4b87b11870bdf7f10bdc9efc1",
      "tree": "7c04199156be4e1e7101b2c57cd4fa558baadcda",
      "parents": [
        "de5f9a1c54eebd1b66a5dfeaffbe3e703e76c86e"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Nov 15 15:14:35 2017 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Nov 15 15:14:35 2017 -0800"
      },
      "message": "Change ARG_MAX/_SC_ARG_MAX back to a constant.\n\nAs per the lkml thread https://lkml.org/lkml/2017/11/1/946.\n\nBug: http://b/65818597\nTest: ran tests\nChange-Id: I7a0610e6903e6761f2b31416e2f5017bd7a60659\n"
    },
    {
      "commit": "4362f897f73f95b5b9e48f2b758b5800f1cc83a2",
      "tree": "c02e8677078fba76d19b08d95427af4391cc329e",
      "parents": [
        "315dd896deae928f3e64f94d75cd20566cc95183"
      ],
      "author": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Tue Nov 14 08:50:43 2017 -0800"
      },
      "committer": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Wed Nov 15 10:31:49 2017 -0800"
      },
      "message": "Only use uids and gids for which we\u0027ve allocated AIDs\n\nCurrently, getpwnam, getpwent, etc return successfully for any uid\nfrom AID_APP_START (10000) to AID_USER_OFFSET (100000) for each user.\nThis is not correct however, as only specific ranges above\nAID_APP_START are reserved as valid ranges.  This change corrects this.\n\nThis is particularly important as the newly added AID_OVERFLOWUID is\n65534, which is above AID_APP_START but not in any reserved range,\ncollided with the faulty returned values.\n\nBug: 69119022\nBug: 69128408\nTest: pwd/grp bionic unit tests\nChange-Id: I3dae97a90597915fa30a88fe27cda88b107e9c35\n"
    },
    {
      "commit": "2b8ab4b5da58105432081ed8302a4364583c2279",
      "tree": "f145d820aaf468b3bc77df03370731a892edc5d5",
      "parents": [
        "40a5cfa8d11c7a36c546eb9acff19975a99450ce"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Nov 14 22:31:43 2017 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Nov 14 22:31:43 2017 -0800"
      },
      "message": "Simplify the posix_spawn sigdefault logic.\n\nI don\u0027t think there\u0027s any observable difference, but this is certainly\nsimpler.\n\nBug: http://b/68707996\nTest: ran tests\nChange-Id: Id9e1a7d40533c90d073ebf391a72bbdfe79627de\n"
    },
    {
      "commit": "fd44b9f8d89ce4f33ff39d7f340a5ed08029d21c",
      "tree": "24268cde0a4afd99c6500691f949687c65ce5985",
      "parents": [
        "0793e3dd07b8ecb5bd0a0e91740f68f42f4f7e60"
      ],
      "author": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Wed Nov 08 14:01:00 2017 -0800"
      },
      "committer": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Tue Nov 14 08:50:52 2017 -0800"
      },
      "message": "Split system_properties.cpp into its component pieces\n\nsystem_properties.cpp is a little bit unmanageable in its current\nform, and is overdue for a refactoring into more clearly defined\ncomponents.\n\nOf particular interest, is creating of a Contexts interface that\nhandles mapping of system property name -\u003e SEContext and its\nassociated prop_area, and creating two classes that implement the\ncurrent and legacy functionality.  This is needed as there will likely\nbe a third even newer way to do this mapping.\n\nBug: 36001741\nTest: boot bullhead, system property unit tests\nChange-Id: Ie75ec6fea1a95f90813918f54669d533e51327c6\n"
    },
    {
      "commit": "38f01e05ef7f7ef18a43339436fba645d123b838",
      "tree": "e6dbb0977a34d052056e935d86bd3cdcc9473188",
      "parents": [
        "dfece7a3ee1b8a11abea3f55bf44df21ebc4bc79"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Oct 27 15:28:54 2017 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Oct 27 15:40:15 2017 -0700"
      },
      "message": "Preserve historical pthread_create scheduler behavior better.\n\nAt the cost of two flag bits for what POSIX thinks should be a boolean\nchoice, plus somewhat confusing behavior from pthread_attr_getinheritsched\ndepending on when you call it/what specific scheduler attributes you\u0027ve\nset in the pthread_attr_t, we can emulate the old behavior exactly and\nprevent annoying SELinux denial spam caused by calls to sched_setscheduler.\n\nBug: http://b/68391226\nTest: adb logcat on boot contains no sys_nice avc denials\nChange-Id: I4f759c2c4fd1d80cceb0912d7da09d35902e2e5e\n"
    },
    {
      "commit": "fa432524a66e5797874ef50e4ede95ded4cee199",
      "tree": "63ae5385f8966b7dd107ed3e73b1d1043b8cb708",
      "parents": [
        "ae7483db2a6a93c0cb0c0eebc26f64b23168c6d3"
      ],
      "author": {
        "name": "dimitry",
        "email": "dimitry@google.com",
        "time": "Wed Oct 25 13:07:45 2017 +0200"
      },
      "committer": {
        "name": "dimitry",
        "email": "dimitry@google.com",
        "time": "Fri Oct 27 10:01:46 2017 +0200"
      },
      "message": "Mark __BIONIC_WEAK_FOR_NATIVE_BRIDGE symbols\n\nTo make it easier for Native Bridge implementations\nto override these symbols.\n\nBug: http://b/67993967\nTest: make\nChange-Id: I4c53e53af494bca365dd2b3305ab0ccc2b23ba44\n"
    },
    {
      "commit": "343d1c49535b4d33b383f34d03a3ca1d2681c442",
      "tree": "673eac1fbf229e1dc03ffe241cf944da90ca0222",
      "parents": [
        "8ae3fe2c50ccb16617fb1d28bd8bda7352528853"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Oct 26 18:22:43 2017 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Oct 26 18:25:19 2017 -0700"
      },
      "message": "Don\u0027t allow LIBC_DEBUG_MALLOC_OPTIONS to cross security boundaries.\n\nBug: http://b/68003719\nTest: LIBC_DEBUG_MALLOC_OPTIONS\u003disbad1 MALLOC_CONF\u003disbad2 su 0 /system/bin/sh -c \u0027/system/bin/echo opt\u003d$LIBC_DEBUG_MALLOC_OPTIONS conf\u003d$MALLOC_CONF\u0027\nChange-Id: I796cc21b230a96cb0ed87d02ddcb1706a7749a90\n"
    },
    {
      "commit": "8ae3fe2c50ccb16617fb1d28bd8bda7352528853",
      "tree": "c42fd934ad68cd1838f9f976fe7692976d2338eb",
      "parents": [
        "d10d03ebd6647239806bd4da6149eaa169890ad7",
        "cc3d04f03ac0c3d60d00ae021f41f3610bb3b3eb"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Fri Oct 27 01:03:32 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Oct 27 01:03:32 2017 +0000"
      },
      "message": "Merge \"Add null checks to \u003cdirent.h\u003e functions.\""
    },
    {
      "commit": "cc3d04f03ac0c3d60d00ae021f41f3610bb3b3eb",
      "tree": "83fc235a8357f5b12802ccc3538dd14d38cef456",
      "parents": [
        "c6291b081d2089ba7a16d7777fb2713d828d537f"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Oct 26 15:38:06 2017 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Oct 26 16:16:33 2017 -0700"
      },
      "message": "Add null checks to \u003cdirent.h\u003e functions.\n\nMove all the new checks over to the existing __fortify_fatal.\n\nBug: http://b/67455242\nTest: ran tests\nChange-Id: Idb899c58c32d52d3b423caf1a91feb7defcba9b3\n"
    },
    {
      "commit": "374848a16e7d4ed2394474bf5298cbe4ddab265a",
      "tree": "74e9d08c5e26a69e16eba303fa0d17968dc396d1",
      "parents": [
        "c6291b081d2089ba7a16d7777fb2713d828d537f"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Oct 26 12:54:32 2017 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Oct 26 12:56:21 2017 -0700"
      },
      "message": "The main thread should just INHERIT its scheduler attributes.\n\nExplicitly setting SCHED_OTHER/0 was causing SELinux denials:\n\n  02-08 09:58:05.430   661   661 I auditd  : type\u003d1400 audit(0.0:20): avc: denied { sys_nice } for comm\u003d\"grep\" capability\u003d23 scontext\u003du:r:init-qcom-devstart-sh:s0 tcontext\u003du:r:init-qcom-devstart-sh:s0 tclass\u003dcapability permissive\u003d0\n  02-08 09:58:05.430   662   662 I auditd  : type\u003d1400 audit(0.0:21): avc: denied { sys_nice } for comm\u003d\"sed\" capability\u003d23 scontext\u003du:r:init-qcom-devstart-sh:s0 tcontext\u003du:r:init-qcom-devstart-sh:s0 tclass\u003dcapability permissive\u003d0\n\nAlso use public pthread API rather than modifying the main thread\u0027s\npthread_attr_t directly.\n\nBug: http://b/68328561\nTest: strace -f -e true\nChange-Id: I65b7ab3ce285a2901a6eaacb243000c780883c3a\n"
    },
    {
      "commit": "c8a2612ffc13a31aaedec26a45cdceb6fa8199cb",
      "tree": "8c12929cde798f3a49dfe0d9a59085d8b205f0b6",
      "parents": [
        "048e18045d6e7bcaf0870d8bb7cb671214c9ad50",
        "8aecba7aa6b7f7b92f69c0d3febef59fdb135f87"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Oct 26 16:12:04 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Oct 26 16:12:04 2017 +0000"
      },
      "message": "Merge \"Implement pthread_attr_getinheritsched/pthread_attr_setinheritsched.\""
    },
    {
      "commit": "8aecba7aa6b7f7b92f69c0d3febef59fdb135f87",
      "tree": "fd3d9743a0e282dcbb2a8b2b51906f7da3a84468",
      "parents": [
        "435e6384de8f9e35b8878b1ccda5bb5686c15207"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Oct 17 15:34:41 2017 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Oct 25 14:28:42 2017 -0700"
      },
      "message": "Implement pthread_attr_getinheritsched/pthread_attr_setinheritsched.\n\nHistorically, Android defaulted to EXPLICIT but with a special case\nbecause SCHED_NORMAL/priority 0 was awkward. Because the code couldn\u0027t\nactually tell whether SCHED_NORMAL/priority 0 was a genuine attempt to\nexplicitly set those attributes (because the parent thread is SCHED_FIFO,\nsay) or just because the pthread_attr_t was left at its defaults.\n\nNow we support INHERIT, we could call sched_getscheduler to see whether\nwe actually need to call sched_setscheduler, but since the major cost\nis the fixed syscall overhead, we may as well just conservatively\ncall sched_setscheduler and let the kernel decide whether it\u0027s a\nno-op. (Especially because we\u0027d then have to add both sched_getscheduler\nand sched_setscheduler to any seccomp filter.)\n\nPlatform code (or app code that only needs to support \u003e\u003d P) can actually\nadd a call to pthread_attr_setinheritsched to say that they just want\nto inherit (if they know that none of their threads actually mess with\nscheduler attributes at all), which will save them a sched_setscheduler\ncall except in the doubly-special case of SCHED_RESET_ON_FORK (which we\ndo handle).\n\nAn alternative would be \"make pthread_attr_setschedparams and\npthread_attr_setschedprio set EXPLICIT and change the platform default\nto INHERIT\", but even though I can only think of weird pathological\nexamples where anyone would notice that change, that behavior -- of\npthread_attr_setschedparams/pthread_attr_setschedprio overriding an\nearlier call to pthread_attr_setinheritsched -- isn\u0027t allowed by POSIX\n(whereas defaulting to EXPLICIT is).\n\nIf we have a lot of trouble with this change in the app compatibility\ntesting phase, though, we\u0027ll want to reconsider this decision!\n\n -*-\n\nThis change also removes a comment about setting the scheduler attributes\nin main_thread because we\u0027d have to actually keep them up to date,\nand it\u0027s not clear that doing so would be worth the trouble.\n\nAlso make async_safe_format_log preserve errno so we don\u0027t have to be\nso careful around it.\n\nBug: http://b/67471710\nTest: ran tests\nChange-Id: Idd026c4ce78a536656adcb57aa2e7b2c616eeddf\n"
    },
    {
      "commit": "1d01fe8980d332a85f730bf2d2fef9dcf707c041",
      "tree": "41814512a8be716ba9ee7129beed7b1e85a9a23f",
      "parents": [
        "2e998d37ce5be9833c595bc97549793a81459ed4"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Oct 23 10:07:55 2017 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Oct 23 10:07:55 2017 -0700"
      },
      "message": "Fix LP32 large pid detection.\n\nBug: http://b/68046352\nTest: ran tests\nChange-Id: I89cb99173ca77e9457e677187430b61cedb55c04\n"
    },
    {
      "commit": "8f348a0cce048fc929b4ce0b850147cd7c737497",
      "tree": "0cb146fad1312d7b0f04bf8882ba122f1f6ec2d8",
      "parents": [
        "4075e21ba8ba79af1aa7feab6b1166f00f2e7566",
        "5c6a7bf0dc821bcaa49d5289f01360f8dd78aa86"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Fri Oct 20 18:40:17 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Oct 20 18:40:17 2017 +0000"
      },
      "message": "Merge \"Remove some legacy declarations from \u003cmath.h\u003e.\""
    },
    {
      "commit": "ac29d9f3b9636818773d60df18eb17e79783f774",
      "tree": "b21bb54cdb9432056d9f83ffc8c80aea317ccdcd",
      "parents": [
        "1b6de8788918f806efd812b743dcc0bbdd232392",
        "fa386e0d1eb52478f11b7232d280919245c1616c"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Thu Oct 19 21:49:29 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Oct 19 21:49:29 2017 +0000"
      },
      "message": "Merge \"Add POSIX swab.\""
    },
    {
      "commit": "5c6a7bf0dc821bcaa49d5289f01360f8dd78aa86",
      "tree": "3c535768b792308647f3c7294d72799b2b70fb4d",
      "parents": [
        "ab9dc08bdd60d3709e1bce555625d923b32812be"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Oct 19 13:56:28 2017 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Oct 19 14:15:31 2017 -0700"
      },
      "message": "Remove some legacy declarations from \u003cmath.h\u003e.\n\nThese are still needed for backwards compatibility with code built by old\nversions of the NDK, but we don\u0027t need to pollute the headers with them.\n\nAlso lose the hand-written code for these. The compiler-generated code\nis either the same or better, and no new code is calling these functions\nanyway.\n\nBug: N/A\nTest: ran tests\nChange-Id: Ib01ad9805034433e0105aec882608cc8e6526f78\n"
    },
    {
      "commit": "1b6de8788918f806efd812b743dcc0bbdd232392",
      "tree": "a4b03d1cd2d338ba354a95a80ca7b30d8ee9196e",
      "parents": [
        "0fe734817fe79c80169ebafd5600a3311105203d",
        "b6d2b87d2d93eae0267f3c86017d5ebbc3cdb2f5"
      ],
      "author": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Thu Oct 19 19:53:07 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Oct 19 19:53:07 2017 +0000"
      },
      "message": "Merge \"Make __libc_init_main_thread and android_set_abort_message weak\""
    },
    {
      "commit": "b6d2b87d2d93eae0267f3c86017d5ebbc3cdb2f5",
      "tree": "b8ba0b16f41f42c3d5a78250ca5bd3c4c6df4eaf",
      "parents": [
        "ab9dc08bdd60d3709e1bce555625d923b32812be"
      ],
      "author": {
        "name": "dimitry",
        "email": "dimitry@google.com",
        "time": "Wed Oct 18 15:15:54 2017 +0200"
      },
      "committer": {
        "name": "dimitry",
        "email": "dimitry@google.com",
        "time": "Thu Oct 19 18:18:23 2017 +0200"
      },
      "message": "Make __libc_init_main_thread and android_set_abort_message weak\n\nBug: http://b/67672033\nBug: http://b/67934730\nTest: make \u0026\u0026 flash and boot angler.\nTest: run bionic-unit-tests\nChange-Id: Ibf47f00dd7fae19014f56c857eb9712711363029\n"
    },
    {
      "commit": "4d215aad85cd9cba3e815eafb8c56eb5218eafb1",
      "tree": "9f987f65dfaa1dd321541189ea63c23b70c70cbc",
      "parents": [
        "ab9dc08bdd60d3709e1bce555625d923b32812be"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Oct 18 15:54:56 2017 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Oct 18 16:26:17 2017 -0700"
      },
      "message": "Add POSIX fexecve.\n\nI\u0027m skeptical about the usefulness of this, but it\u0027s in POSIX, it\u0027s\nin glibc (but not iOS), and it is used in some internal source (test\nrunners and container code).\n\nBug: N/A\nTest: ran tests\nChange-Id: I92c5398f2a679b21a33fba92bc8e67e3ae2eb76f\n"
    },
    {
      "commit": "fa386e0d1eb52478f11b7232d280919245c1616c",
      "tree": "fcfb7d65c39ec91e1b1ec5bedeefe806861d21c4",
      "parents": [
        "ab9dc08bdd60d3709e1bce555625d923b32812be"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Oct 18 13:34:32 2017 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Oct 18 13:34:32 2017 -0700"
      },
      "message": "Add POSIX swab.\n\nSurprisingly to me, there are actual uses of `swab` in the codebases\nI have available to search, including one with a #ifndef __ANDROID__\naround it.\n\nBug: N/A\nTest: ran tests\nChange-Id: Ic91b78ae22bb65c346cb46dd38916f48d979abe0\n"
    },
    {
      "commit": "dff08ced5685a0d1adb0ef875a15caca99556e1e",
      "tree": "9b84626d5a3f8dec14c36ad7a42221b0e11a6f5a",
      "parents": [
        "bf886f621b7c5fb4f690fe182f42640410a32d5c"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Oct 16 09:58:45 2017 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Oct 17 09:14:05 2017 -0700"
      },
      "message": "Add pthread_setschedprio.\n\nBug: http://b/26204555\nTest: ran tests\nChange-Id: Ic34062b9b6036a1ce2642a069514bab48a893338\n"
    },
    {
      "commit": "bf886f621b7c5fb4f690fe182f42640410a32d5c",
      "tree": "25e230e68d945e0e7eb221bb4c7a1acfd3089fd5",
      "parents": [
        "1ef6a6ad1a9708b79fc7c45296ddfa890d645064",
        "5033918092f27179b0c2bbe3babceaed509d4935"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Oct 17 16:03:54 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Oct 17 16:03:54 2017 +0000"
      },
      "message": "Merge \"Complete \u003cnetdb.h\u003e.\""
    },
    {
      "commit": "0e0e370154ea478c9d7102061cbb62d9bfea6c1d",
      "tree": "8a39ea9040d36a498bfb15815d16aa49f1bc06bb",
      "parents": [
        "a0f6dc577e1bf63e199599d8dc79311a3083aec2"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Thu Oct 12 13:34:42 2017 -0700"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Mon Oct 16 21:31:37 2017 -0700"
      },
      "message": "Add libc_nopthread.\n\nAdd a static library containing the non-pthread dependent parts of\nlibc.\n\nBug: http://b/64400027\nTest: sailfish boots\nTest: bionic-unit-tests32/64, no new failures\nTest: bionic-unit-tests-static32/64, no new failures\nChange-Id: I93dc3811acddad7936d11b369b98cefd945ee2d5\n"
    },
    {
      "commit": "5033918092f27179b0c2bbe3babceaed509d4935",
      "tree": "77f5a0f1eb5fec80dc7bc6a297eed66af83713b9",
      "parents": [
        "a27bfd4131441a24fcfe6b5b3cf1cf9469be6719"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Oct 13 17:52:01 2017 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Sun Oct 15 10:37:51 2017 -0700"
      },
      "message": "Complete \u003cnetdb.h\u003e.\n\nAdd all the missing \u003cnetdb.h\u003e functions.\n\nAlso fix getservbyport to handle a null protocol correctly.\n\nAlso fix getservbyname/getservbyport to not interfere with getservent.\n\nAlso fix endservent to reset getservent iteration.\n\nAlso reduce unnecessary differences from upstream NetBSD sethostent.c.\n\nThe servent implementation is still horrific, and we should\nprobably support protoent too so that debugging tools can use\ngetprotobyname/getprotobynumber.\n\nBug: N/A\nTest: ran tests\nChange-Id: I639108c46df0a768af297cf3bbce857cb1bef9d9\n"
    },
    {
      "commit": "c972ea7da0501d3082f06f65869776c786c19fca",
      "tree": "36a2c69a6fdca4c4da71da08cfc08e5e4cfcf395",
      "parents": [
        "9db0e013b195fb09831a17699e32bd1f40da823e"
      ],
      "author": {
        "name": "Dan Albert",
        "email": "danalbert@google.com",
        "time": "Fri Oct 13 14:32:43 2017 -0700"
      },
      "committer": {
        "name": "Dan Albert",
        "email": "danalbert@google.com",
        "time": "Fri Oct 13 14:38:55 2017 -0700"
      },
      "message": "Fix missing includes, again.\n\nTest: mma\nBug: None\nChange-Id: I17f07e51ebb425ebbcd2cd48e2aa173ab728c498\n"
    },
    {
      "commit": "01bb7bf6fb6b5b43c4b1ff00be79b64f01015691",
      "tree": "3142e44a0c79f3c15b1cb2286051ffec9be34f8b",
      "parents": [
        "b49ac81c8e7e4e0c6e931f97551236792e69d2be",
        "14e3ff9f09fdd52db43628ccd6f39a6d3fb41740"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Oct 12 21:02:54 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Oct 12 21:02:54 2017 +0000"
      },
      "message": "Merge \"Implement \u003cspawn.h\u003e.\""
    },
    {
      "commit": "a08f704e2a35aaa1173c762db037caa8aa166ba8",
      "tree": "050ad559f6855803a4a548a41e846b5ae0020dc1",
      "parents": [
        "36f7b8b7891f0af56eb61e7d32cc8cedb5ded8de",
        "8a311631edc0c6212d4f9c50854956d2233aea40"
      ],
      "author": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Thu Oct 12 00:22:57 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Oct 12 00:22:57 2017 +0000"
      },
      "message": "Merge \"Allow read-only system properties to have arbitrary lengths\""
    },
    {
      "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": "1c78cb0fee257cdee13acceaee3de88e40d77e1b",
      "tree": "c6bf25c41c4e4d863871f4a7cc191542ffbe89f1",
      "parents": [
        "983c2da84cdcd0171b7f726b78990cabd0a58f49"
      ],
      "author": {
        "name": "Dan Albert",
        "email": "danalbert@google.com",
        "time": "Wed Oct 11 11:25:25 2017 -0700"
      },
      "committer": {
        "name": "Dan Albert",
        "email": "danalbert@google.com",
        "time": "Wed Oct 11 11:25:52 2017 -0700"
      },
      "message": "Add missing includes.\n\nTest: mma\nBug: None\nChange-Id: I0221b213e08d07cc5ac0b704a86e98ae8c0f456f\n"
    },
    {
      "commit": "8a311631edc0c6212d4f9c50854956d2233aea40",
      "tree": "885d3feb21fc2545d9830aaa819e4f24236722fd",
      "parents": [
        "983c2da84cdcd0171b7f726b78990cabd0a58f49"
      ],
      "author": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Mon Oct 09 13:49:17 2017 -0700"
      },
      "committer": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Tue Oct 10 15:52:25 2017 -0700"
      },
      "message": "Allow read-only system properties to have arbitrary lengths\n\nWe need to be able to store build fingerprints that are over 92 characters\nlong, which is the current restriction for system property value\nlength.\n\nIncreasing the value maximum across the board has plenty of caveats,\nparticularly that an allocator would be required to handle\ndeallocation when replacing long property values with short values.\nThere is also no compelling reasons to do this.\n\nBut, increasing the length of simply read-only properties, such as the\nbuild fingerprint, has less caveats as there will never be a\ndeallocation of these strings.\n\nThis change uses spare bits in the top of serial (only spare for\nread-only properties) to indicate if a property is \u0027long\u0027 or not.  The\ninformation required to access these \u0027long\u0027 properties is stored in a\nunion where the legacy property value is located.  An error message is\nretained for legacy callers.\n\nThe new property is readable via __system_property_read_callback() and\nmost importantly android::base::GetProperty and higher level (Java,\n`getprop`) callers.  All code should move to these higher level\nfunctions as much as possible.\n\nBug: 23102347\nBug: 34954705\nTest: bionic unit tests\nChange-Id: Ia85e0d979b92afff601cc52b39114379617a0c64\n"
    },
    {
      "commit": "3dacc4764220fc5e7969e4281f5cfca8f2082241",
      "tree": "59cf0da278f1f1c0bdbdd9f8158342ab7359ba9b",
      "parents": [
        "e387c2f08841ac0f6578e903ab21b54d01f3266e",
        "a613d0df5c682617380728a7d151483de05a4f92"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Fri Oct 06 22:20:54 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Oct 06 22:20:54 2017 +0000"
      },
      "message": "Merge \"Add a legacy inline for mmap64.\""
    },
    {
      "commit": "e387c2f08841ac0f6578e903ab21b54d01f3266e",
      "tree": "ee40a87bb99b95e38e95a505e7084d6b695c21c9",
      "parents": [
        "7181e53cfed1ae9c877a6aacb7da6c48165e91f9",
        "93ea09f65c59585c082797bbfa4f4c7778d6e8b9"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Fri Oct 06 17:08:34 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Oct 06 17:08:34 2017 +0000"
      },
      "message": "Merge \"Add directives to force stop unwinding.\""
    },
    {
      "commit": "a613d0df5c682617380728a7d151483de05a4f92",
      "tree": "5a73110db954e5fc92116ad0930ed83495607729",
      "parents": [
        "3e8584d4a7d617289e8a954711ba895415d781c4"
      ],
      "author": {
        "name": "Dan Albert",
        "email": "danalbert@google.com",
        "time": "Thu Oct 05 16:39:33 2017 -0700"
      },
      "committer": {
        "name": "Dan Albert",
        "email": "danalbert@google.com",
        "time": "Thu Oct 05 23:41:47 2017 -0700"
      },
      "message": "Add a legacy inline for mmap64.\n\nWhile this was never an inline, this function alone has caused most of\nthe bug reports related to _FILE_OFFSET_BITS\u003d64. Providing an inline\nfor it should allow a lot more code to build with _FILE_OFFSET_BITS\u003d64\nwhen targeting pre-L.\n\nTest: make checkbuild\nTest: built trivial cc_binary for LP32 against API 14 with\n      _FILE_OFFSET_BITS\u003d64 set\nBug: lots\nChange-Id: I8479d34af4da358c11423bee43d45b59e9d4143e\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": "3a8f75d8b052611c08ef17ecf625b8021f4e0229",
      "tree": "a41055f8209868da748f5118a24df528d1f07a9e",
      "parents": [
        "42f3bd0ffc3f0f0e3191c679ea4276f7f1882a00"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Oct 05 10:33:18 2017 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Oct 05 10:33:18 2017 -0700"
      },
      "message": "POSIX clock cleanup.\n\nThe newest of these clocks was added in Linux 2.6.12, so no need for runtime\nchecks.\n\nAdd CTS tests that we can actually use the various clocks.\n\nBug: http://b/67458266\nTest: ran tests\nChange-Id: I3cfd7982043d6f8d4ebdc2b29e8722334f443ce5\n"
    },
    {
      "commit": "c51a404b1acba3305d777da8cb950b74460c34ba",
      "tree": "e8fc29560cd5306cd156fa182b52dec2c25ca4c9",
      "parents": [
        "6e6e1abb89913463778ae7559dd6b70049c52216"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Sep 22 09:29:29 2017 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Sep 22 13:08:50 2017 -0700"
      },
      "message": "All architectures have AT_SYSINFO_EHDR now.\n\nBug: N/A\nTest: builds\nChange-Id: Ibc894be98ed0781c8b991ffadff34f616b934aa7\n"
    }
  ],
  "next": "53dc9dd70155fd75af744cbebecc563658c69818"
}
