)]}'
{
  "log": [
    {
      "commit": "697f42afdb8606f5ba431e72db065692bf61ffff",
      "tree": "900725232ca9b11d2f415544bdaea867123fbf19",
      "parents": [
        "03e9c498d4909d1f791800cae0d59db63a348328"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Jul 14 17:00:05 2017 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Jul 14 17:00:05 2017 -0700"
      },
      "message": "Hide various mbstate implementation details.\n\n...by inlining them.\n\nAlso fix a couple of harmless bugs in passing. I\u0027ve added tests, but in\nboth cases I don\u0027t think it was actually possible to hit the bad behavior:\nwe\u0027d hit another test and fail immediately after in an externally\nindistinguishable way.\n\nBug: N/A\nTest: readelf\nChange-Id: I8466050b0bfe2b7b94c76b383cf10c1d9d28debd\n"
    },
    {
      "commit": "3f03579589259ecdc1b15e7914aca31c8b0dc1de",
      "tree": "93a367ac59d0a11e4028ed8e9bfe06be0e6cfa58",
      "parents": [
        "2d585e0070f33ec86a5d5decf9642ee9f2501324"
      ],
      "author": {
        "name": "Dan Albert",
        "email": "danalbert@google.com",
        "time": "Thu Jul 13 10:29:20 2017 -0700"
      },
      "committer": {
        "name": "Dan Albert",
        "email": "danalbert@google.com",
        "time": "Thu Jul 13 10:29:20 2017 -0700"
      },
      "message": "Move wchar _l functions out of wchar.cpp.\n\nWe don\u0027t need these in libandroid_support, but we do need the other\nparts of wchar.cpp, and they\u0027re not really related.\n\nTest: make checkbuild\nBug: None\nChange-Id: I40f3089b034abfd4873e81c0b6216a7cfd977d8d\n"
    },
    {
      "commit": "2d585e0070f33ec86a5d5decf9642ee9f2501324",
      "tree": "c4a95ed3dde95f48b6141cc0c015ba1d8818f31c",
      "parents": [
        "ada33eb9b4ec9e9fe2a37c8dbe1aa68348aa66b1",
        "1a8b7f2d1ca7c605e8e0e6a707a8c4bc9839dcda"
      ],
      "author": {
        "name": "Dan Albert",
        "email": "danalbert@google.com",
        "time": "Thu Jul 13 08:34:57 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Jul 13 08:34:57 2017 +0000"
      },
      "message": "Merge changes from topic \u0027locale-android-support\u0027\n\n* changes:\n  Add a non-TLS slot implementation of locale.cpp.\n  Move non-locale.h APIs out of locale.cpp.\n"
    },
    {
      "commit": "1a8b7f2d1ca7c605e8e0e6a707a8c4bc9839dcda",
      "tree": "865093640ef73c41a8d8aa98423e83107f2d60e0",
      "parents": [
        "e2fd01035ba85b906dbf0e6b6112b7f8ff52beef"
      ],
      "author": {
        "name": "Dan Albert",
        "email": "danalbert@google.com",
        "time": "Wed Jul 12 13:47:42 2017 -0700"
      },
      "committer": {
        "name": "Dan Albert",
        "email": "danalbert@google.com",
        "time": "Wed Jul 12 13:47:42 2017 -0700"
      },
      "message": "Add a non-TLS slot implementation of locale.cpp.\n\nlibandroid_support shouldn\u0027t be using Bionic\u0027s TLS slot. Add a\nthread_local based implementation. We can\u0027t use the thread_local\nimplementation in bionic because the linker needs this and pthread\nthread-locals (which is how thread_local is implemented) doesn\u0027t work\nthat early.\n\nTest: make checkbuild\nTest: adb shell /data/nativetest/bionic-unit-tests/bionic-unit-tests\nBug: https://github.com/android-ndk/ndk/issues/300\nChange-Id: I7dcbf554ade2264d541d722fa3f86df04926e67a\n"
    },
    {
      "commit": "e2fd01035ba85b906dbf0e6b6112b7f8ff52beef",
      "tree": "8bbe318fca314962ff32b5cd10eee318c440aa6e",
      "parents": [
        "82d746fb39465e78088aeb11a5dc178cf264d0c0"
      ],
      "author": {
        "name": "Dan Albert",
        "email": "danalbert@google.com",
        "time": "Tue Jul 11 14:27:07 2017 -0700"
      },
      "committer": {
        "name": "Dan Albert",
        "email": "danalbert@google.com",
        "time": "Wed Jul 12 12:41:47 2017 -0700"
      },
      "message": "Move non-locale.h APIs out of locale.cpp.\n\nlibandroid_support only needs the locale.h stuff.\n\nTest: make checkbuild\nBug: None\nChange-Id: I0c53fe9d2df4f9ff4b99771727034508bc89cb32\n"
    },
    {
      "commit": "73d17e7720983d4aee5ebe5d2910bcc3fcb8e1b8",
      "tree": "850d0f0d0835daf0ff12b8678cee0fd2efd8ecb7",
      "parents": [
        "e76ff925df7d0b9aef84fe230c7497ff6a8fbba4",
        "0a0743f86454f8f50d04127beb614094f3b5a593"
      ],
      "author": {
        "name": "Victor Khimenko",
        "email": "khim@google.com",
        "time": "Mon Jul 10 22:33:54 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Jul 10 22:33:54 2017 +0000"
      },
      "message": "Merge \"Move environ valiable into it\u0027s own file\""
    },
    {
      "commit": "0a0743f86454f8f50d04127beb614094f3b5a593",
      "tree": "388be22547813c653c147e3104abcff923dcab28",
      "parents": [
        "ddefae7ba92c40d60f2401e010e7789bee6f260d"
      ],
      "author": {
        "name": "Victor Khimenko",
        "email": "khim@google.com",
        "time": "Mon Jul 10 21:15:37 2017 +0200"
      },
      "committer": {
        "name": "Victor Khimenko",
        "email": "khim@google.com",
        "time": "Mon Jul 10 21:44:17 2017 +0200"
      },
      "message": "Move environ valiable into it\u0027s own file\n\nTest: build statically the example program below\n\n  char** environ;\n  int main() {\n  }\n\nChange-Id: I3f01652da1d5063d92ba7cbff7fb09bd0a89325c\n"
    },
    {
      "commit": "1449974d27473399a1fe25c2d28253908a57e382",
      "tree": "99ab00407ff51e8db4318365f31eabc9feb942af",
      "parents": [
        "f45bc14d5497c30bd43e22d025e3b88812b2baa4"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Jul 05 12:00:29 2017 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Jul 05 12:00:29 2017 -0700"
      },
      "message": "Make inline tcsetattr definition match constants.\n\nBefore this change we have the old NDK inline termios functions with the\nmodern constants. Unfortunately the old NDK inline functions relied on\nhacking the constants. Fix things by sharing the implementation between\nthe platform and the NDK headers.\n\nBug: https://github.com/android-ndk/ndk/issues/441\nTest: ran tests\nChange-Id: I2773634059530bc954167f29c4783413a2294d5a\n"
    },
    {
      "commit": "705910094d07ddfc5a3b7a4baab58b0a94bcc691",
      "tree": "f503093f7f1675566233ac00bda745b8a9bcf714",
      "parents": [
        "82d746fb39465e78088aeb11a5dc178cf264d0c0"
      ],
      "author": {
        "name": "George Burgess IV",
        "email": "gbiv@google.com",
        "time": "Tue Jun 27 16:23:45 2017 -0700"
      },
      "committer": {
        "name": "George Burgess IV",
        "email": "gbiv@google.com",
        "time": "Wed Jun 28 15:03:15 2017 -0700"
      },
      "message": "bionic: fix assorted static analyzer warnings\n\nWarnings:\n\nbionic/libc/bionic/fts.c:722:5: warning: Null passed to a callee that\nrequires a non-null 1st parameter\n\nbionic/libc/bionic/sched_cpualloc.c:34:25: warning: Result of \u0027malloc\u0027\nis converted to a pointer of type \u0027cpu_set_t\u0027, which is incompatible\nwith sizeof operand type \u0027unsigned long\u0027\n\nbionic/linker/linker_main.cpp:315:7: warning: Access to field \u0027e_type\u0027\nresults in a dereference of a null pointer (loaded from variable\n\u0027elf_hdr\u0027)\n\nbionic/linker/linker_main.cpp:493:66: warning: Access to field \u0027e_phoff\u0027\nresults in a dereference of a null pointer (loaded from variable\n\u0027elf_hdr\u0027)\n\nbionic/linker/linker_main.cpp:90:14: warning: Access to field \u0027next\u0027\nresults in a dereference of a null pointer (loaded from variable \u0027prev\u0027)\n\nBug: None\nTest: mma; analyzer warnings are gone. CtsBionicTestCases pass.\nChange-Id: I699a60c2c6f64c50b9ea06848a680c98a8abb44a\n"
    },
    {
      "commit": "f4b1cbda4a6fa15b0223b952a343f87523b8578d",
      "tree": "44fb71a2252acb9f4c024eb779b6283b87ba2cc3",
      "parents": [
        "d411524609186dc6b243156e4df43617ab33d0f4"
      ],
      "author": {
        "name": "Stephen Crane",
        "email": "sjc@immunant.com",
        "time": "Tue May 09 14:27:43 2017 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Jun 21 23:53:46 2017 +0000"
      },
      "message": "Disable stack protector for __libc_preinit\n\n__libc_preinit sets up the stack protector global cookie value, and thus\ncannot intialize a stack protector cookie for itself in the function\nprologue. LTO compilation can inline functions requiring a stack\nprotector into __libc_preinit. This patch disables stack protection for\n__libc_preinit and forces all potentially inlined functions into a\nhelper that can have a stack protector.\n\nTest: run bionic-unit-tests\n\nChange-Id: I45911611190f216c91eb6feff722967214c5f99f\n"
    },
    {
      "commit": "d7c52625f2da8322b4f0adb4c67674f0d66e619a",
      "tree": "a885e0530cb1a26a5a1fd0dee7477ef02dcb4833",
      "parents": [
        "b1b7eda11e4f66b608ae66945ddf87cbe31ecb47"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Jun 20 14:26:56 2017 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Jun 20 14:58:16 2017 -0700"
      },
      "message": "Shave another uninteresting stack frame off aborts.\n\nWith this, stack frame 0 is the abort, not tgkill.\n\narm:\n\n     #00 pc 0001a41c  /system/lib/libc.so (abort+63)\n\narm64:\n\n     #00 pc 000000000001d75c  /system/lib64/libc.so (abort+120)\n\nAlso \"include what you use\" for \u003csys/syscall.h\u003e.\n\nBug: N/A\nTest: ran `crasher abort` and `crasher64 abort`\nChange-Id: I6517ac67b39b4133e890d52efc115071c812958b\n"
    },
    {
      "commit": "e2d4663b27285baceb81f6f68c4721b805512070",
      "tree": "576ac47e0800c6b2d56eaa02effd705911100bab",
      "parents": [
        "a09953e1a8df604d4c2c5f5b3b4c86e5b97694bf"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Jun 15 10:36:43 2017 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Jun 15 10:37:26 2017 -0700"
      },
      "message": "Move a \u003cwchar.h\u003e implementation detail into the implementation.\n\nNo other C library expose these, and I couldn\u0027t find any callers.\n\nBug: http://b/62531921\nTest: builds\nChange-Id: I4a3505bc0897286a4036c48066b98d16665b573a\n"
    },
    {
      "commit": "7f6bcc478083e25627838cb5de7e8efbc9468a55",
      "tree": "cc4895cd8c88e88c8c938f6a8ac7b76480706932",
      "parents": [
        "87d1df9f70016725ce100860fdc847a76322636d",
        "e452cb1ff30b3539dc66a18e9b59fe5e8d337ecc"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Wed Jun 14 00:44:31 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Jun 14 00:44:33 2017 +0000"
      },
      "message": "Merge \"Remove `volatile` from the `__errno` declaration.\""
    },
    {
      "commit": "e452cb1ff30b3539dc66a18e9b59fe5e8d337ecc",
      "tree": "60593768f5b380f5a3a45caa026ea9cb208876c0",
      "parents": [
        "15eaaddef9fffda1209e9cc576b47b0f6e0cb379"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Jun 13 14:43:53 2017 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Jun 13 16:02:07 2017 -0700"
      },
      "message": "Remove `volatile` from the `__errno` declaration.\n\nThis breaks code that declares `errno` itself for whatever crazy reason:\n\n  b.c:22:12: error: conflicting types for \u0027__errno\u0027\n  extern int errno;\n             ^\n  /usr/local/google/ndkports/toolchain/bin/../sysroot/usr/include/errno.h:47:20: note: expanded from macro \u0027errno\u0027\n  #define  errno   (*__errno())\n                     ^\n  /usr/local/google/ndkports/toolchain/bin/../sysroot/usr/include/errno.h:44:15: note: previous declaration is here\n  volatile int* __errno(void) __attribute_const__;\n                ^\n\nBug: N/A\nTest: built various bits of GNU source\nChange-Id: I27c03bf3bde419a001f98f1ea6c267c847f31271\n"
    },
    {
      "commit": "996f6decfad3cb0a3e87c0f7e5c0578ccae45d56",
      "tree": "f301c19a2b53159a290f92e1237bc6bc6a31031f",
      "parents": [
        "15eaaddef9fffda1209e9cc576b47b0f6e0cb379"
      ],
      "author": {
        "name": "Goran Ferenc",
        "email": "goran.ferenc@imgtec.com",
        "time": "Tue May 30 16:00:41 2017 +0200"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Jun 01 08:50:57 2017 -0700"
      },
      "message": "MIPS: 32/64-bit VDSO support\n\nFile libc/SYSCALLS.TXT is updated to generate bionic\u0027s system call wrappers\nfor clock_gettime() \u0026 gettimeofday() that will be called if kernel vdso\nimplementations fail to execute.\nThe system call wrappers are generated using a python script gensyscalls.py.\n\nSince all architectures support vdso now, there is no more need for conditional\nstatements regarding supported architectures in libc/bionic/vdso.cpp \u0026\nlibc/private/bionic_vdso.h files.\n\nTest: builds\nChange-Id: I7213f29c179a7929851499d78a72900638ae861a\nSigned-off-by: Goran Ferenc \u003cgoran.ferenc@imgtec.com\u003e\n"
    },
    {
      "commit": "13ec1cf3da6f92defec62492a4a94ada4ee35aaf",
      "tree": "a0ae2fc27115eb9c4091539054ae192f5a64f3c8",
      "parents": [
        "f06535035ef6e48aeacc37819ea7182416275216"
      ],
      "author": {
        "name": "Mikhail Lappo",
        "email": "miklelappo@gmail.com",
        "time": "Sat Mar 25 19:02:55 2017 +0100"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Sat May 20 13:20:41 2017 -0700"
      },
      "message": "Va_end should be used with va_start\n\nva_start is used and va_end should\nbe invoked accordingly\n\nChange-Id: I2b0a2af762e22082a351a4d8139aaa48bc791e88\n"
    },
    {
      "commit": "a1c0d2fd4ce96e123c4ae6506c9d637d747e1fe2",
      "tree": "b1f89edbd67d6b09b9cbdfb1bf03b65b2dac9ad4",
      "parents": [
        "ac58d33d343eba6a3370f541467f09802c48b24b"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Mon May 15 15:50:19 2017 -0700"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Mon May 15 16:59:16 2017 -0700"
      },
      "message": "Add support for modifying decay timer.\n\nAdd the mallopt function, and only a single option so far.\n\nBug: 36401135\n\nTest: Built and booted bullhead.\nTest: Ran jemalloc unit tests.\nTest: Ran bionic unit tests.\nTest: Ran a test that allocated and free\u0027d a large piece of memory,\nTest: and verified that after changing the parameter, the PSS\nTest: sticks around (decay timer set to 1), the PSS is purged (decay\nTest: timer set to 0).\nChange-Id: I6927929b0c539c1023d34772d9e26bb6a8a45877\n"
    },
    {
      "commit": "dfcb82d92d00c7f1516477b19da97c1d2b07f0b4",
      "tree": "84acbc670a0b351ef7059e8ed2455f08e05b4fff",
      "parents": [
        "0e986b8d5ddd1d41db18d8e6af1eb5c58fb3dbe8"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu May 11 15:29:03 2017 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu May 11 15:29:03 2017 -0700"
      },
      "message": "Clean up __isthreaded.\n\n__isthreaded is annoying for ARC++ and useless for everyone. Just hard-code\nthe value in ndk_cruft for LP32 and be done with it.\n\nBug: N/A\nTest: builds\nChange-Id: I08f11a404bbec55ed57cb1e18b5116163c7d7d13\n"
    },
    {
      "commit": "9ae23720aa177d8f230a4d4ee6b5b6e42ec3f549",
      "tree": "f3bc0b7810c8f0a5a790b228fdb5eb28b683af6d",
      "parents": [
        "1f9e64887882b532bdd12b6fbfa80817c2b67714"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue May 09 14:26:30 2017 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue May 09 14:26:30 2017 -0700"
      },
      "message": "Cope with AT_SYSINFO not being set on x86.\n\nBug: http://b/38034461\nTest: ran dexdump under valgrind on x86\nChange-Id: I6a54c7ed4fe4e68731e099d9569ab788379820f8\n"
    },
    {
      "commit": "bf2af69fb2ff1365f4075d0207d6a895bc2727ed",
      "tree": "f4ff284b54aef4d14c18ecb3d355b81bb5878c6a",
      "parents": [
        "05fd20c797c0aab700183131023130e45a748a47"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Fri May 05 13:27:15 2017 -0700"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Fri May 05 14:25:24 2017 -0700"
      },
      "message": "Make raise/abort work with stale cached pid/tid values.\n\nSwitch raise to using tgkill with direct syscalls of getpid/gettid,\nand switch abort to use raise(SIGABRT).\n\nBug: http://b/37769298\nTest: debuggerd_test\nChange-Id: If6f9d17fd8ae6177e742dc9f2f44bd78539431ba\n"
    },
    {
      "commit": "7a3681e5b6c39bc2b3b62031ca5941dbf7bc4e63",
      "tree": "78c25e2a38b7efed8db770a623a5cbfb7eaab11d",
      "parents": [
        "ca5e0f49ca5df873a20c996755175b5c9c1e2ed9"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Mon Apr 24 17:48:32 2017 -0700"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Wed May 03 08:50:43 2017 -0700"
      },
      "message": "Move libc_log code into libasync_safe.\n\nThis library is used by a number of different libraries in the system.\nMake it easy for platform libraries to use this library and create\nan actual exported include file.\n\nChange the names of the functions to reflect the new name of the library.\n\nRun clang_format on the async_safe_log.cpp file since the formatting is\nall over the place.\n\nBug: 31919199\n\nTest: Compiled for angler/bullhead, and booted.\nTest: Ran bionic unit tests.\nTest: Ran the malloc debug tests.\nChange-Id: I8071bf690c17b0ea3bc8dc5749cdd5b6ad58478a\n"
    },
    {
      "commit": "7ba2bed0b2597b59dcd3d99414bcfa1b559b0acc",
      "tree": "bc6fa032a1749216ce6008bd316d3097046d8da5",
      "parents": [
        "5deddda68e780aaa26e4777378fee10d543eb719"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Apr 25 15:45:29 2017 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Apr 26 14:34:36 2017 -0700"
      },
      "message": "Make unified headers\u0027 SIGRTMIN/SIGRTMAX usable before API 21.\n\nBug: https://github.com/android-ndk/ndk/issues/352\nTest: built new NDK test\nChange-Id: Iacebe574bbf693701949e038005a40ba6520d592\n"
    },
    {
      "commit": "7b37fa9384cb9ca9a95928af45b03b2bc9fe815c",
      "tree": "9bddbd819628612f36b7f9e5981fa19ea4645b38",
      "parents": [
        "5dc0565c1b2413719c35843051f911639e964a96",
        "e4ddb3c587d07a8b8459d8202b31c0d9340ce8a1"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Tue Apr 18 17:56:04 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Apr 18 17:56:07 2017 +0000"
      },
      "message": "Merge \"Move bionic_systrace.cpp over to CachedProperty.\""
    },
    {
      "commit": "57e7a0d853812ceaa2337a4fc6a0de1eef93977b",
      "tree": "9d3d5052e2d2a973b06e57ad9236967b7cbc1209",
      "parents": [
        "661a2ed9df173f6eb14530a8e4a51753a7df3890",
        "438e01940b90a2b6061a9b9809e08466e1e9faac"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Mon Apr 17 23:45:55 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Apr 17 23:45:57 2017 +0000"
      },
      "message": "Merge \"Un-deprecated __system_property_find_nth.\""
    },
    {
      "commit": "438e01940b90a2b6061a9b9809e08466e1e9faac",
      "tree": "4889c190b65be3636ee5d638db7822624abcd412",
      "parents": [
        "e4e69a174a0b4980eaff49c55c39b476cbe9b73e"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Apr 17 14:53:07 2017 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Apr 17 14:53:07 2017 -0700"
      },
      "message": "Un-deprecated __system_property_find_nth.\n\nNetflix was using this, and looking the header file, although\n__system_property_find_nth has been available since the beginning of time,\n__system_property_foreach only appeared in 16. So anyone who wants to run\non pre-JellyBean devices would want to use __system_property_find_nth.\n\nIt\u0027s pretty much a one-liner in terms of __system_property_foreach anyway,\nso it doesn\u0027t cost us anything to keep it.\n\nAlso restore slightly better tests than we originally removed.\n\nBug: http://b/36566667\nTest: ran tests\nChange-Id: Id268c2c2e848da17bb0a5a5420af234d9dcb829a\n"
    },
    {
      "commit": "e4ddb3c587d07a8b8459d8202b31c0d9340ce8a1",
      "tree": "b80253d8ccc73221b0976fb9db2f752789da0e52",
      "parents": [
        "e4e69a174a0b4980eaff49c55c39b476cbe9b73e"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Apr 17 14:12:25 2017 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Apr 17 14:12:25 2017 -0700"
      },
      "message": "Move bionic_systrace.cpp over to CachedProperty.\n\nThis is the last bionic caller that was manually trying to cache\nproperty values.\n\nBug: N/A\nTest: builds and boots\nChange-Id: Id66c0a05d8448f08c39dbf7189241e75615d44b4\n"
    },
    {
      "commit": "ef2b2fe99eb0d348d71a53702bb4981b17d8682e",
      "tree": "4d6ca9b8c53b94fb4bba1e78285f9c40b6167c76",
      "parents": [
        "e4e69a174a0b4980eaff49c55c39b476cbe9b73e"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Sun Apr 16 08:50:58 2017 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Sun Apr 16 08:50:58 2017 -0700"
      },
      "message": "Link to the public post about clang FORTIFY.\n\nBug: N/A\nTest: builds\nChange-Id: I1c2040fdd3c3bbe61a8adfc1f414fce50087a1b8\n"
    },
    {
      "commit": "be4232be84b65f8aa69d263703ed616af9e5e81c",
      "tree": "9a58ed020ad2459534ed93371e3c1edfacabf6b3",
      "parents": [
        "da08de89b4bef0eb065ae4736cf68d35dba5cf06"
      ],
      "author": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Fri Apr 14 13:45:20 2017 -0700"
      },
      "committer": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Fri Apr 14 14:41:10 2017 -0700"
      },
      "message": "Report the right error code from PropertyServiceConnection()\n\nWe\u0027re currently reporting errno from the clean up call to close(),\nwhich is much less interesting than the failing connect() call that\nprecedes it.  This change reports errno from the connect() call\ninstead.\n\nBug: 36249702\nTest: Boot bullhead, bionic unit tests\nTest: Fake bad end point and see relevant error returned\nChange-Id: Icadec463f50cd0a2a2faa08f049a7996cd32786f\n"
    },
    {
      "commit": "2be801302725ab10f7e1fb62ba663ef477f58c6d",
      "tree": "2130beb09c7249c6db2be2ab499af1d7ee8ff78c",
      "parents": [
        "735f41afc43bb83ed738be569b50c6039069e611",
        "87ff82466ca26c4efee71eb77447e778b4e0ed9f"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Wed Apr 12 19:02:14 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Apr 12 19:02:14 2017 +0000"
      },
      "message": "Merge \"Move libc_logging.cpp over to CachedProperty.\""
    },
    {
      "commit": "87ff82466ca26c4efee71eb77447e778b4e0ed9f",
      "tree": "a73ce5bcd18d95fb4fdf59783680d55b6ca9d5a4",
      "parents": [
        "2d389ffee98b6f480f4340ec408d37457e02fbd7"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Apr 11 15:18:38 2017 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Apr 11 15:18:38 2017 -0700"
      },
      "message": "Move libc_logging.cpp over to CachedProperty.\n\nBug: N/A\nTest: ran tests\nChange-Id: I50f9065799e783df961e1275a4cda671fcf0fd32\n"
    },
    {
      "commit": "7ade61cae297c112e7288f173fb529673010926a",
      "tree": "6a89998346f43262f68dd32872ba77f3f245e179",
      "parents": [
        "2d389ffee98b6f480f4340ec408d37457e02fbd7"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Apr 11 13:38:36 2017 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Apr 11 13:38:36 2017 -0700"
      },
      "message": "Don\u0027t let missing Treble property context files affect errno.\n\nUser code on a non-treble device was starting with errno \u003d\u003d ENOENT rather\nthan 0 because of this treble support:\n\n  openat(AT_FDCWD, \"/property_contexts\", O_RDONLY|O_CLOEXEC) \u003d -1 ENOENT (No such file or directory)\n  faccessat(AT_FDCWD, \"/system/etc/selinux/plat_property_contexts\", R_OK) \u003d -1 ENOENT (No such file or directory)\n\nThis caused us to fail some toybox tests by reporting bogus errno values\nwhere errno should have been left unset:\n\n  PASS: date -d @0\n  FAIL: date -d @0x123\n  echo -ne \u0027\u0027 | TZ\u003dUTC date -d @0x123 2\u003e\u00261\n  --- expected\n  +++ actual\n  @@ -1 +1 @@\n  -date: bad date \u0027@0x123\u0027\n  +date: bad date \u0027@0x123\u0027: No such file or directory\n  PASS: date -d 06021234\n  PASS: date -d 060212341982\n  FAIL: date -d 123\n  echo -ne \u0027\u0027 | TZ\u003dUTC date -d 123 2\u003e\u00261\n  --- expected\n  +++ actual\n  @@ -1 +1 @@\n  -date: bad date \u0027123\u0027\n  +date: bad date \u0027123\u0027: No such file or directory\n  PASS: date -d 1110143115.30\n  PASS: date -d 111014312015.30\n  PASS: date Unix time missing @\n\nBug: http://b/37248982\nTest: ran tests\nChange-Id: Iacf08c89dbe207ec53a7837e6ac7f78f5541ef35\n"
    },
    {
      "commit": "bd3d2088d99f45babb8a73192b53b6fd91930af3",
      "tree": "0533adb1ea5e0af98272e39ff9dc8e7fd3bdbf83",
      "parents": [
        "07807a10a2dfa85a952ee8c06188d0bc9597c184"
      ],
      "author": {
        "name": "George Burgess IV",
        "email": "gbiv@google.com",
        "time": "Tue Apr 04 17:34:02 2017 -0700"
      },
      "committer": {
        "name": "George Burgess IV",
        "email": "gbiv@google.com",
        "time": "Wed Apr 05 13:17:07 2017 -0700"
      },
      "message": "libc: add const-correct string.h overloads\n\nlibcxx provides const-correct overloads for a few string.h functions.\nThese overloads use clang\u0027s enable_if attribute, so they\u0027re preferred\nover our FORTIFY\u0027ed equivalents.\n\nThis weakens _FORTIFY_SOURCE\u003d2 when used with some of these functions,\nsince clang needs to see __pass_object_size in order to pass an accurate\nresult for __builtin_object_size(s, 1) at a callsite. Since those\nfunctions don\u0027t have __pass_object_size on their params, clang can\u0027t do\nthat. This makes LLVM lower the __builtin_object_size calls, which means\nwe get the same result as __builtin_object_size(s, 0).\n\nWe have to provide all of the overloads in Bionic, since enable_if is\nonly used to disambiguate overloads with (otherwise) the same type. In\nother words:\n\n// overload 1\nchar *strchr(const char *, int s) __attribute__((enable_if(1, \"\")));\n// overload 2\nchar *strchr(char *, int s);\n\nvoid foo() {\n  char cs[1] \u003d {};\n  strchr(static_cast\u003cconst char *\u003e(cs), \u0027\\0\u0027); // calls overload #1.\n  strchr(cs, \u0027\\0\u0027); // calls overload #2.\n}\n\nBug: 34747525\nTest: m checkbuild on bullhead internal master + AOSP. vts -m\nBionicUnitTests passes on both. Surprisingly, the only code that this\nseems to break is contained in Bionic.\n\nChange-Id: Ie406f42fb3d1c5bf940dc857889876fc39b57c90\n"
    },
    {
      "commit": "10ec9286ae843b0a84438699458ba17bff2f5602",
      "tree": "dec03457b63bc63468d1cf1f5afb1380aa59a089",
      "parents": [
        "4df5ca1e0254790d41f945352a93f5c783ea8de0"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Mon Apr 03 15:13:29 2017 -0700"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Mon Apr 03 16:00:10 2017 -0700"
      },
      "message": "Break android_set_abort_message out of libc_logging.\n\nlibc_logging is getting statically linked into the crash handler\nlibrary, resulting in two copies of the abort message code existing in\nprocesses, one in the linker, and one in the crash handler.\n\nMove android_set_abort_message to its own file to solve this.\n\nBug: http://b/36862204\nTest: /data/nativetest/debuggerd_test/debuggerd_test32\nChange-Id: Ie198c5a3bb07645aa43296915c9a6752693f14a9\n"
    },
    {
      "commit": "62c03a4ff4c4a80a4bf7cea72c12e613e26924c6",
      "tree": "9baf6c3219450a88e379f44c7c499fd40a449f45",
      "parents": [
        "5d8b8310aaa43d7b8cb8809fdf805ba7f41df15e"
      ],
      "author": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Sat Apr 01 09:54:19 2017 -0700"
      },
      "committer": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Mon Apr 03 08:44:38 2017 -0700"
      },
      "message": "Cleanup ANDROID_DNS_MODE and BIONIC_DNSCACHE\n\nFor security reasons, when a binary is executed which causes a security\ntransition (eg, a setuid binary, setgid binary, filesystem capabilities,\nor SELinux domain transition), the AT_SECURE flag is set. This causes\ncertain blacklisted environment variables to be stripped before the\nprocess is executed. The list of blacklisted environment variables is\nstored in UNSAFE_VARIABLE_NAMES. Generally speaking, most environment\nvariables used internally by libc show up in this list.\n\nAdd ANDROID_DNS_MODE to the list of unsafe variables.\nSimilar to RESOLV_HOST_CONF and RES_OPTIONS (which are already\nblacklisted), this variable controls how name resolution requests are\nhandled. Allowing ANDROID_DNS_MODE to be set across a security\nboundary could induce resolution failures or otherwise impact\nname resolution.\n\nRemove BIONIC_DNSCACHE. This does not appear to be used, and setting\nthis variable across a security boundary could cause name resolution\nproblems.\n\nTest: Android compiles and runs with no obvious problems.\nChange-Id: I835a7b42d6afbc9c67866594c7951cfd9b355d81\n"
    },
    {
      "commit": "12a07044dbcf98905632eb2a46973fe9d3a4ee49",
      "tree": "b94d7131f3a0e71ac3c731e7aeeb64e579278edf",
      "parents": [
        "aa0b5054c52e10a9e4b5d5dd9daa90d707164af0",
        "eb04ed506fbb0561b677d9518c9bae33f0262b03"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Mar 29 23:08:17 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Mar 29 23:08:18 2017 +0000"
      },
      "message": "Merge \"Fix x86 system calls made from ELF preinit.\""
    },
    {
      "commit": "eb04ed506fbb0561b677d9518c9bae33f0262b03",
      "tree": "11c004e500d83117298b0520973aab9188911af4",
      "parents": [
        "9cb82a2c6b9001f7c50cbb3465f4aabc5d7cd055"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Mar 29 13:48:02 2017 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Mar 29 13:48:02 2017 -0700"
      },
      "message": "Fix x86 system calls made from ELF preinit.\n\nUsed by CFI, so broke cfi_test#early_init@x86, but I\u0027ve added a specific\ntest for this (and a similar test for getauxval from preinit, which this\npatch does not fix).\n\nBug: http://b/35885875\nTest: ran tests\nChange-Id: I43885bedfb88c0a26b4474bd3c27a87dec7bbc97\n"
    },
    {
      "commit": "2a4a5e72f161699be75b247e6fcb3a9ac6d8a852",
      "tree": "5fb0cd3bd574d8243a42ad6ba92bcf4a3cbf002b",
      "parents": [
        "e0561cb0c9612b844dbca2eee4032ec162ed246c"
      ],
      "author": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Mon Mar 20 10:54:52 2017 -0700"
      },
      "committer": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Mon Mar 20 12:45:55 2017 -0700"
      },
      "message": "Add end() method to bionic\u0027s ScopedTrace class\n\nBug: http://b/27195126\nTest: make\nChange-Id: I8243629200606ca87b11cbd479ca093add42eb56\n"
    },
    {
      "commit": "cf96f35dd16fdefbcb91598cdee1f6e097bb4a56",
      "tree": "b33d6fc85a55ac09e90f7538805691b1060dcb15",
      "parents": [
        "b3b11edda111a44c979aa5cd5363ce6064ff4092",
        "222272ece93d35dbb4eb76076f29bbe719bf5c93"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Thu Mar 09 22:03:30 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Mar 09 22:03:31 2017 +0000"
      },
      "message": "Merge changes from topic \u0027debuggerd_fallback\u0027\n\n* changes:\n  linker_memory: allow fallback allocator to be turned on and off.\n  Increase signal stack size on 32-bit to 16kB.\n"
    },
    {
      "commit": "b3b11edda111a44c979aa5cd5363ce6064ff4092",
      "tree": "7870537e6928c46555b5fcb9bd1b3494e6e5ea4f",
      "parents": [
        "77258163a2f6d42103f1e942cf10350a8e81f7d9",
        "176cf1f65b4431a00f9238e811f71295c36d4a27"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Thu Mar 09 19:20:54 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Mar 09 19:20:55 2017 +0000"
      },
      "message": "Merge \"Prefer property_contexts from /system \u0026 /vendor\""
    },
    {
      "commit": "415daa8cca875d348c003a95cf7c44c9231eae75",
      "tree": "0846b1476c61bb7d870fc8e031099d634c0c2e3c",
      "parents": [
        "e429bf2f696282537efb577feb7cb9fd534e7ace"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Mon Mar 06 17:45:33 2017 -0800"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Wed Mar 08 16:43:59 2017 -0800"
      },
      "message": "Increase signal stack size on 32-bit to 16kB.\n\nsnprintf to a buffer of length PATH_MAX consumes about 7kB of stack.\n\nBug: http://b/35858739\nTest: bionic-unit-tests --gtest_filter\u003d\"*big_enough*\"\nChange-Id: I34a7f42c1fd2582ca0d0a9b7e7a5290bc1cc19b1\n"
    },
    {
      "commit": "176cf1f65b4431a00f9238e811f71295c36d4a27",
      "tree": "803349727a128d616beac61a91784e9ec44811d9",
      "parents": [
        "f9f320ba73cbcd29c413ad52b8d681c65e2268a6"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Wed Mar 08 13:16:03 2017 -0800"
      },
      "committer": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Wed Mar 08 15:28:29 2017 -0800"
      },
      "message": "Prefer property_contexts from /system \u0026 /vendor\n\nThis changes system_properties\u0027 initialize_properties to prefer\nloading property_contexts from /system/etc/selinux \u0026\n/vendor/etc/selinux, while falling back to the pre-existing behavior\nof loading from /.\n\nTest: Device with *_property_contexts in / boots up fine, no denials\n      to do with properties, getprop -Z lists correct labels.\nTest: Device with *_property_contexts in /system \u0026 /vendor, but not\n      in /, boots up fine, no denials to do with properties,\n      getprop -Z lists correct labels.\nTest: Device with *_property_contexts in /system \u0026 vendor and with\n      empty *_property_contexts in / boots up fine, no denials to do\n      with properties, getprop -Z lists correct labels.\nBug: 36002573\n\nChange-Id: I15174acdf89ee8f5a96acf1e38a54d4214df51ef\n"
    },
    {
      "commit": "5450f86b31287173278513eb8b4c8e73b9fdd3ae",
      "tree": "adfd4a7a9cd2fb1d5ef7dbf724b12bbd6f0baeb5",
      "parents": [
        "cdf19c84e8c10f5afa079790e5a2b0a55a3599e9"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Tue Mar 07 23:05:08 2017 -0800"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Tue Mar 07 23:24:50 2017 -0800"
      },
      "message": "Fix leak of bionic TLS when threads are detached.\n\n__pthread_internal_free doesn\u0027t happen on threads that are detached,\ncausing the bionic TLS allocation (and guard pages) to be leaked.\n\nFix the leak, and name the allocations to make things apparent if this\never happens again.\n\nBug: http://b/36045112\nTest: manually ran a program that detached empty threads\nChange-Id: Id1c7852b7384474244f7bf5a0f7da54ff962e0a1\n"
    },
    {
      "commit": "4a92ffd3029e9e38c3a55222676a126db5a3b962",
      "tree": "433d790ddfffcfb36b0b362e8c968ee2e6197a55",
      "parents": [
        "ebceea8e85ad2897a5ce8575b81f18fdd7aa0320"
      ],
      "author": {
        "name": "Victor Khimenko",
        "email": "khim@google.com",
        "time": "Wed Mar 01 20:36:13 2017 +0100"
      },
      "committer": {
        "name": "Victor Khimenko",
        "email": "khim@google.com",
        "time": "Wed Mar 01 20:43:42 2017 +0100"
      },
      "message": "Stop using __system_property_area__\n\nApparently that \"backdoor\" is no longer needed - the proper way is\nto reinitialize properties:\n    https://android-review.googlesource.com/#/c/181794/24/tests/system_properties_test.cpp\n\nAlso removes mentions of libnativehelper test (it no longer uses\n__system_property_area__) and removes useless \"extern\" declaration\n(actual use was removed long ago).\n\nTest: refactoring CL, existsing tests still pass\n\nBUG\u003d21852512\nBUG\u003d34114501\n\nChange-Id: I2223cab2fcb671ea180ad4470a7aba5c9cd20bd8\n"
    },
    {
      "commit": "6391e1a44d4a183cb1fc092fc62c4e30f59429c5",
      "tree": "95d7fc5c55a2310babc87890d15f6f32c5edbcfd",
      "parents": [
        "5927b04ce7d9d4727a4a644f8af4040b8dab5d0a"
      ],
      "author": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Thu Feb 23 17:57:14 2017 -0800"
      },
      "committer": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Fri Feb 24 14:00:04 2017 -0800"
      },
      "message": "libc: __system_property_set uses writev to write atomically\n\n__system_property_set sometimes produces broken_pipe error\nwhen trying to write a property.\n\nThis change improves error messages and uses writev() instead\nof sequence of send() calls.\n\nBug: http://b/35381074\nTest: bionic-unit-tests --gtest_filter\u003dprop*\nChange-Id: I7a5b169c015db4e6b720370e58662de8206d1086\n"
    },
    {
      "commit": "5d0c1fcc8b50c040f8828db4b3bb9ba11f8f9447",
      "tree": "356089008fdef73010c8268c529588bd28d49cda",
      "parents": [
        "77463d81e6d75c9c8882f825563c6560864730ac",
        "963daed78044724547ff1c7c35b34a4d50a0b867"
      ],
      "author": {
        "name": "Hans Boehm",
        "email": "hboehm@google.com",
        "time": "Fri Feb 24 18:50:34 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Feb 24 18:50:35 2017 +0000"
      },
      "message": "Merge \"Replace cxa_guard fences with acquire loads\""
    },
    {
      "commit": "963daed78044724547ff1c7c35b34a4d50a0b867",
      "tree": "e8293055d696d79e994e7094dfb58cce2957963f",
      "parents": [
        "c9a840ac76c7cdbe6028ac91cdb8eb6698f0a854"
      ],
      "author": {
        "name": "Hans Boehm",
        "email": "hboehm@google.com",
        "time": "Wed Feb 22 15:34:29 2017 -0800"
      },
      "committer": {
        "name": "Hans Boehm",
        "email": "hboehm@google.com",
        "time": "Thu Feb 23 11:50:58 2017 -0800"
      },
      "message": "Replace cxa_guard fences with acquire loads\n\nThis seemed to be the only place in bionic where a fence on a\nperformance-critical path could be easily replaced by a stronger\nload/store order constraint. Do so.\n\nOn x86 this should generate the same code either way. Based on\nmicrobenchmarks of the relevant ARM instructions, this is currently\nperformance-neutral in this kind of context. But in the future, the\nnewly generated acquire loads should give us a performance benefit.\n\nTest: Booted AOSP\nChange-Id: I7823e11d6ae4fd58e0425244c293262e2320fd81\n"
    },
    {
      "commit": "5e2285d3ccdbb64a49ad2e5e521f50c897a3954d",
      "tree": "cd56c251f1710652fad3b84121248a12071b42e0",
      "parents": [
        "c9a840ac76c7cdbe6028ac91cdb8eb6698f0a854"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Wed Feb 22 12:19:05 2017 -0800"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Wed Feb 22 16:05:03 2017 -0800"
      },
      "message": "Allocate thread local buffers in __init_tls.\n\nThread local buffers were using pthread_setspecific for storage with\nlazy initialization. pthread_setspecific shares TLS slots between the\nlinker and libc.so, so thread local buffers being initialized in a\ndifferent order between libc.so and the linker meant that bad things\nwould happen (manifesting as snprintf not working because the\nlocale was mangled)\n\nBug: http://b/20464031\nTest: /data/nativetest64/bionic-unit-tests/bionic-unit-tests\n      everything passes\nTest: /data/nativetest/bionic-unit-tests/bionic-unit-tests\n      thread_local tests are failing both before and after (KUSER_HELPERS?)\nTest: /data/nativetest64/bionic-unit-tests-static/bionic-unit-tests-static\n      no additional failures\nChange-Id: I9f445a77c6e86979f3fa49c4a5feecf6ec2b0c3f\n"
    },
    {
      "commit": "c9a840ac76c7cdbe6028ac91cdb8eb6698f0a854",
      "tree": "33427655e2794f197fa3cf55a72d9e3f3683034b",
      "parents": [
        "2cb4fb033f18353717373154aebd1eecd90f3dea",
        "40c885a4d18dd1e4480615ddd00c9f035dc08567"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Wed Feb 22 01:43:30 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Feb 22 01:43:31 2017 +0000"
      },
      "message": "Merge \"Add timeout support to __system_property_wait.\""
    },
    {
      "commit": "40c885a4d18dd1e4480615ddd00c9f035dc08567",
      "tree": "58adbfd0852a7bb1d51122339b6a00e27bb6bcaf",
      "parents": [
        "40854235256c3f51f9ea866f5f8ef03240c00123"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Feb 16 17:13:04 2017 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Feb 21 14:36:24 2017 -0800"
      },
      "message": "Add timeout support to __system_property_wait.\n\nBug: http://b/35201172\nTest: ran tests\nChange-Id: I3a78813bf3cd50d1b308ecb3c742f923606c0cc4\n"
    },
    {
      "commit": "6ce686c48bf6ec07a1e25b94bba7e9a3a6df4b49",
      "tree": "cd2b90df1e7b51cc6d993590f0d488e3cdbd2bb2",
      "parents": [
        "40854235256c3f51f9ea866f5f8ef03240c00123"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Feb 21 13:15:20 2017 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Feb 21 14:21:43 2017 -0800"
      },
      "message": "Downgrade the special case of pthread_t(0) to a warning.\n\nSo far this is the only issue we\u0027ve hit in vendor code, and we\u0027ve hit\nit several times already. Rather than try to fix bullhead (the current\nproblem), let\u0027s just admit that the special case of 0 is a lot less\nworrying.\n\nAlso fix the test expectations to correspond to the new abort message.\n\nBug: http://b/35455349 (crashes on 0)\nBug: http://b/35622944 (tests)\nTest: ran tests\nChange-Id: Iec57011fa699a954ebeaec151db2193e36d1ef35\n"
    },
    {
      "commit": "b66a0038ca5c50185270f8a6f2ae67b2580c0833",
      "tree": "4f4138f985bd07a524539713ddc460a2c4d1a297",
      "parents": [
        "ff3197bcc24b0e3429e9a8cb032d5a9773afe3e1"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Sat Feb 18 16:35:36 2017 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Sat Feb 18 16:35:36 2017 -0800"
      },
      "message": "Fix a comment in the pthread_cond_t implementation.\n\nBug: http://b/34592766\nTest: N/A\nChange-Id: I341f837dca52865ae5f8fe9ff50ba8999e297179\n"
    },
    {
      "commit": "3fed6ff847d0fb7409a2af4b00b6e47e1ad357ff",
      "tree": "75df78857fe749447ac180111aa3f56534711cda",
      "parents": [
        "4509e0ec94b6310d13b9f06a122ec66acb224a10"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Feb 17 10:27:45 2017 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Feb 17 10:27:45 2017 -0800"
      },
      "message": "Include the pthread_t in the \"bad pthread_t\" fatal abort.\n\nAlso reword the message to be stronger.\n\nBug: http://b/35455349\nTest: manual\nChange-Id: I8f34fd42f3b635c95a7b921645a016fb303ce3ad\n"
    },
    {
      "commit": "fec0e015ce0369b3ad710547f3d6af343b2cd5e1",
      "tree": "dd13df817ff9920da84aeea0477b6b98fe884bdc",
      "parents": [
        "10a441bfcdc316dd3a73d6d571fc5c3be109a144",
        "273991ceadac558ba3bca5238d81833a7b34cb2d"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Thu Feb 16 03:42:50 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Feb 16 03:42:53 2017 +0000"
      },
      "message": "Merge \"Add __libc_format_buffer_va_list.\""
    },
    {
      "commit": "273991ceadac558ba3bca5238d81833a7b34cb2d",
      "tree": "fd37f96c94c5e26bceb0b5538cd29ffb1a77da38",
      "parents": [
        "7b5245408499ef48afc8def662fcfab09683e1c4"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Wed Feb 15 11:46:55 2017 -0800"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Wed Feb 15 16:10:37 2017 -0800"
      },
      "message": "Add __libc_format_buffer_va_list.\n\nBug: http://b/35367169\nTest: m\nChange-Id: I133f231d3b93bdef56d06497679320a89c7188a9\n"
    },
    {
      "commit": "c54937b9726b7d7ca797f47bef249a31e306f267",
      "tree": "55bae87a1a408a8a63217cf8a01ede792b54475d",
      "parents": [
        "7b5245408499ef48afc8def662fcfab09683e1c4",
        "95b59c520b24aabcdc63b93a3f1eaf73e57a3afe"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Wed Feb 15 18:26:49 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Feb 15 18:26:50 2017 +0000"
      },
      "message": "Merge \"add fortified implementations of send/sendto\""
    },
    {
      "commit": "95b59c520b24aabcdc63b93a3f1eaf73e57a3afe",
      "tree": "76e43d9ec4f387c5774508c9e6c9d728a21c8052",
      "parents": [
        "9fc52deab1c6bec6a37860242eafe1ae4c205e44"
      ],
      "author": {
        "name": "Daniel Micay",
        "email": "danielmicay@gmail.com",
        "time": "Mon Feb 13 17:27:59 2017 -0800"
      },
      "committer": {
        "name": "George Burgess IV",
        "email": "gbiv@google.com",
        "time": "Tue Feb 14 15:50:28 2017 -0800"
      },
      "message": "add fortified implementations of send/sendto\n\nBug: None\nTest: Bullhead builds+boots; CtsBionicTestCases passes.\nChange-Id: I2f137a100f679f7f2145d84b2f29ddd3e96a36ae\n"
    },
    {
      "commit": "125f1c0f224e2e50ea285ed184789765ce12feee",
      "tree": "d573ff4a994ab4fa046bf36de2e7132b72d6fbc6",
      "parents": [
        "03709055024a84d319404dd23181fd1576ee5b59"
      ],
      "author": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Tue Feb 14 09:49:30 2017 -0800"
      },
      "committer": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Tue Feb 14 12:55:15 2017 -0800"
      },
      "message": "Add details on why AT_SYMLINK_NOFOLLOW is dangerous\n\nThe comment isn\u0027t helpful as-is. Provide some clarifying information.\n\nTest: code compiles. No functional changes.\nChange-Id: I5267e0bc68857fdc8a4b3384a2a1b0d37693ee6e\n"
    },
    {
      "commit": "03709055024a84d319404dd23181fd1576ee5b59",
      "tree": "e94707636d516c30c421707f315a946345ddb3f4",
      "parents": [
        "ade3be476fa918ea4e412f584e1e941260a7205c",
        "11859d467c035081f8acafeaf0184b670cd41c48"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Feb 14 18:32:18 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Feb 14 18:32:18 2017 +0000"
      },
      "message": "Merge \"Be more strict about using invalid `pthread_t`s.\""
    },
    {
      "commit": "11859d467c035081f8acafeaf0184b670cd41c48",
      "tree": "36afb3b9c9bbff69d83945e7ab08b7687908f74c",
      "parents": [
        "132768084e24119c337e56fd110b97a23e5593c2"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Feb 13 17:59:29 2017 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Feb 13 17:59:29 2017 -0800"
      },
      "message": "Be more strict about using invalid `pthread_t`s.\n\nAnother release, another attempt to remove the global thread list.\n\nBut this time, let\u0027s admit that it\u0027s not going away. We can switch to using\na read/write lock for the global thread list, and to aborting rather than\nquietly returning ESRCH if we\u0027re given an invalid pthread_t.\n\nThis change affects pthread_detach, pthread_getcpuclockid,\npthread_getschedparam/pthread_setschedparam, pthread_join, and pthread_kill:\ninstead of returning ESRCH when passed an invalid pthread_t, if you\u0027re\ntargeting O or above, they\u0027ll abort with the message \"attempt to use\ninvalid pthread_t\".\n\nNote that this doesn\u0027t change behavior as much as you might think: the old\nlookup only held the global thread list lock for the duration of the lookup,\nso there was still a race between that and the dereference in the caller,\ngiven that callers actually need the tid to pass to some syscall or other,\nand sometimes update fields in the pthread_internal_t struct too.\n\n(This patch replaces such users with calls to pthread_gettid_np, which\nat least makes the TOCTOU window smaller.)\n\nWe can\u0027t check thread-\u003etid against 0 to see whether a pthread_t is still\nvalid because a dead thread gets its thread struct unmapped along with its\nstack, so the dereference isn\u0027t safe.\n\nTaking the affected functions one by one:\n\n    * pthread_getcpuclockid and pthread_getschedparam/pthread_setschedparam\n      should be fine. Unsafe calls to those seem highly unlikely.\n\n    * Unsafe pthread_detach callers probably want to switch to\n      pthread_attr_setdetachstate instead, or using\n      pthread_detach(pthread_self()) from the new thread\u0027s start routine\n      rather than doing the detach in the parent.\n\n    * pthread_join calls should be safe anyway, because a joinable thread\n      won\u0027t actually exit and unmap until it\u0027s joined. If you\u0027re joining an\n      unjoinable thread, the fix is to stop marking it detached. If you\u0027re\n      joining an already-joined thread, you need to rethink your design.\n\n    * Unsafe pthread_kill calls aren\u0027t portably fixable. (And are obviously\n      inherently non-portable as-is.) The best alternative on Android is to\n      use pthread_gettid_np at some point that you know the thread to be\n      alive, and then call kill/tgkill directly.\n\n      That\u0027s still not completely safe because if you\u0027re too late, the tid\n      may have been reused, but then your code is inherently unsafe anyway.\n\nBug: http://b/19636317\nTest: ran tests\nChange-Id: I0372c4428e8a7f1c3af5c9334f5d9c25f2c73f21\n"
    },
    {
      "commit": "a0d374d587ec18d437d0dd15ba1332aceaa188af",
      "tree": "a9466c8841140cf70290c54d50354f245ea3a9db",
      "parents": [
        "132768084e24119c337e56fd110b97a23e5593c2"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Feb 10 18:13:46 2017 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Feb 13 13:30:10 2017 -0800"
      },
      "message": "Add __system_property_wait and return the serial in __system_property_read_callback.\n\nIn order to implement android::base::WaitForProperty well, we need a way to\nwait not for *any* property to change (__system_property_wait_any), but to\nspecifically wait for the property represented by a given `prop_info` to\nchange.\n\nThe android::base::WaitForProperty implementation, like attempts to cache\nsystem properties in the past, also needs a way to keep serials and values\nin sync, but the existing functions don\u0027t provide a cheap way to get a\nconsistent snapshot. Change the __system_property_read_callback callback\u0027s\ntype to include the serial corresponding to the given value.\n\nAdd a test, slightly clean up some of the existing tests (and name them to\ninclude the names of the functions they\u0027re testing, in our usual style).\n\nBug: http://b/35201172\nTest: ran tests\nChange-Id: Ibc8ebe2e88eef1e333a1bd3dd7f68135f1ba7fb5\n"
    },
    {
      "commit": "7cc779f15c524e1622f7d5b1c7e82e6ffc6677fd",
      "tree": "0f995c0878649447ef160e727505ae81495dcdde",
      "parents": [
        "2bfb8c9180603bac97dca2d8e359f71bb11f7126"
      ],
      "author": {
        "name": "George Burgess IV",
        "email": "gbiv@google.com",
        "time": "Thu Feb 09 00:00:31 2017 -0800"
      },
      "committer": {
        "name": "George Burgess IV",
        "email": "gbiv@google.com",
        "time": "Thu Feb 09 15:49:32 2017 -0800"
      },
      "message": "libc: add clang FORTIFY support\n\nThis patch adds clang-style FORTIFY to Bionic. For more information on\nFORTIFY, please see https://goo.gl/8HS2dW . This implementation works\nfor versions of clang that don\u0027t support diagnose_if, so please see the\n\"without diagnose_if\" sections. We plan to swap to a diagnose_if-based\nFORTIFY later this year (since it doesn\u0027t really add any features; it\njust simplifies the implementation a lot, and it gives us much prettier\ndiagnostics)\n\nBug: 32073964\nTest: Builds on angler, bullhead, marlin, sailfish. Bionic CTS tests\npass on Angler and Bullhead.\n\nChange-Id: I607aecbeee81529709b1eee7bef5b0836151eb2b\n"
    },
    {
      "commit": "f201c704d64ea40432123a90489d5dc88d613213",
      "tree": "6452fcfa55eac460e2f4044569aef99d59aef619",
      "parents": [
        "a1fa522927770347ca0c322c1b401e5a49611e7a",
        "bcb152903a26269e2c8ada3b27c787ae875f8812"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Feb 07 21:12:22 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Feb 07 21:12:23 2017 +0000"
      },
      "message": "Merge \"Revert \"Stop checking the global thread list in several trivial cases.\"\""
    },
    {
      "commit": "bcb152903a26269e2c8ada3b27c787ae875f8812",
      "tree": "7bd88d5a8cde6ac54c1af51a11f5932988ce9215",
      "parents": [
        "f5a4992b7186c01b98cb9400b2b5b490805a87bb"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Feb 07 21:05:30 2017 +0000"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Feb 07 21:05:30 2017 +0000"
      },
      "message": "Revert \"Stop checking the global thread list in several trivial cases.\"\n\nThis reverts commit f5a4992b7186c01b98cb9400b2b5b490805a87bb.\n\nBreaks OMX_ImgEnc in cameraserver (http://b/35088254).\n\nChange-Id: I6dcf12706a184b0b8b72451584567a42dfa1bb4f\n"
    },
    {
      "commit": "a1fa522927770347ca0c322c1b401e5a49611e7a",
      "tree": "e46ae983af685eb78c71938e9f70e7db75acb0d4",
      "parents": [
        "4708f435f5ebb1db385aaf9b1304493bd0420936",
        "5e6cf05aab0a2fcc6177482606c1b1f2d958a7f9"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Feb 07 17:01:15 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Feb 07 17:01:16 2017 +0000"
      },
      "message": "Merge \"Improve a comment.\""
    },
    {
      "commit": "f5a4992b7186c01b98cb9400b2b5b490805a87bb",
      "tree": "5e0da95bd6edc7fb861bf0130fcfab4997a9141a",
      "parents": [
        "4a47d2c436e93caff08fb112f39bb24145950279"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Feb 06 14:09:53 2017 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Feb 06 14:09:53 2017 -0800"
      },
      "message": "Stop checking the global thread list in several trivial cases.\n\nSince removing the global thread is hard, let\u0027s take the different\ngroups of functions individually.\n\nThe existing code was racy anyway, because the thread might still be\non the list but have exited (leaving tid \u003d\u003d 0).\n\nBug: http://b/19636317\nTest: ran tests\nChange-Id: Icc0986ff124d5f9b8a653edf718c549d1563973b\n"
    },
    {
      "commit": "5e6cf05aab0a2fcc6177482606c1b1f2d958a7f9",
      "tree": "6452fcfa55eac460e2f4044569aef99d59aef619",
      "parents": [
        "4a47d2c436e93caff08fb112f39bb24145950279"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Feb 06 10:26:20 2017 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Feb 06 10:26:20 2017 -0800"
      },
      "message": "Improve a comment.\n\nBug: http://b/23675822\nTest: builds\nChange-Id: Ia58ffabf38012035076e4c682faa4c93f3690e24\n"
    },
    {
      "commit": "a187a6f12e4ce0314baba73e77aa3b1ea46a72d2",
      "tree": "2d02e20bce64241c2815e50b5a0b75746d510af3",
      "parents": [
        "1fedfedda8a2b75ed56669e28265f943312ec22f",
        "7484c21c4c352a2200d94939fabc10d1bd3f0723"
      ],
      "author": {
        "name": "David James",
        "email": "davidjames@google.com",
        "time": "Thu Feb 02 02:46:40 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Feb 02 02:46:40 2017 +0000"
      },
      "message": "Merge \"Revert \"Remove the global thread list.\"\""
    },
    {
      "commit": "7484c21c4c352a2200d94939fabc10d1bd3f0723",
      "tree": "fe089ec40970a76f11107534632b1fc5789660ed",
      "parents": [
        "b0e8c565a622b5519e03d4416b0b5b1a5f20d7f5"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Feb 02 02:41:38 2017 +0000"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Feb 02 02:41:38 2017 +0000"
      },
      "message": "Revert \"Remove the global thread list.\"\n\nThis reverts commit b0e8c565a622b5519e03d4416b0b5b1a5f20d7f5.\n\nBreaks swiftshader (http:/b/34883464).\n\nChange-Id: I7b21193ba8a78f07d7ac65e41d0fe8516940a83b\n"
    },
    {
      "commit": "9b9d4ebc8bbbdfe627d23f58084ec4ea0bd7a0cb",
      "tree": "b46d2d5dc0e00d024b7d07b1195d5b48141c5922",
      "parents": [
        "b88112dcfc7954f001e722bb274b110e253dae6e",
        "b0e8c565a622b5519e03d4416b0b5b1a5f20d7f5"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Feb 01 16:16:41 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Feb 01 16:16:41 2017 +0000"
      },
      "message": "Merge \"Remove the global thread list.\""
    },
    {
      "commit": "8e7396c9d733c73226f3bfa31241cd311b451cf3",
      "tree": "833fc173575d6617e7051fbd126e98fde1c80700",
      "parents": [
        "44bea80d31bfda28008e0a9116f65aab5d85206d"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Jan 31 08:24:43 2017 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Jan 31 08:24:43 2017 -0800"
      },
      "message": "s/NULL/nullptr/ in system properties code.\n\ngerrit still hasn\u0027t sent out the mail asking for this in an earlier code\nreview...\n\nBug: http://b/33926793\nTest: builds and boots.\nChange-Id: I080de633e50e47f9a052211d47da96b971b16424\n"
    },
    {
      "commit": "9160ed9bb76f64d1237393dcabf098f9c52f5b3d",
      "tree": "73e17c96f06ffc5621ff164d7e5dd88394902363",
      "parents": [
        "a5066640cc7274e317bf3bae2d960986d58dbbbd"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Jan 30 17:54:57 2017 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Jan 30 17:54:57 2017 -0800"
      },
      "message": "clang-format system_properties.cpp.\n\nAsked for on a previous code review.\n\nBug: http://b/33926793\nTest: builds and boots.\nChange-Id: Idf34804896149db5edbddf4ed88396a5df7f708a\n"
    },
    {
      "commit": "93e272d00a4155600227ce485f028c1fa8580f2c",
      "tree": "85937ca63918dbe52c62d395d384efc9c0c86618",
      "parents": [
        "0c6f806b1d7c13b8a03c8e64797ab0159976e244",
        "34f0cfa3a8d9d93d6f397993179de2f1951e96c7"
      ],
      "author": {
        "name": "Sandeep Patil",
        "email": "sspatil@google.com",
        "time": "Mon Jan 30 19:16:16 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Jan 30 19:16:17 2017 +0000"
      },
      "message": "Merge \"property_contexts: split into platform and non-platform components\""
    },
    {
      "commit": "f8562c5f8f0a8df88bd864b8c64eeb9b8905b97d",
      "tree": "b5f9e89d8683da813350e680a1e19882473e8485",
      "parents": [
        "6a9e0c8f15dee1b1b7c5cd7f8e058c2b18683bbc"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Jan 26 16:48:57 2017 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Jan 27 16:19:59 2017 -0800"
      },
      "message": "Remove backwards compatibility for old system properties.\n\nNo-one is directly upgrading from pre-K to O...\n\nAlso move more implementation details out of the header file.\n\nBug: http://b/33926793\nTest: boots\nChange-Id: I7a0936acbb1cea8a3b2cd6797ec53ba7e4a050f3\n"
    },
    {
      "commit": "34f0cfa3a8d9d93d6f397993179de2f1951e96c7",
      "tree": "99f50890c87a2f7209bf75eef989de29cfa40a3e",
      "parents": [
        "577a944200e445f806964b7fb5dbd38633f4ae07"
      ],
      "author": {
        "name": "Sandeep Patil",
        "email": "sspatil@google.com",
        "time": "Tue Dec 27 17:37:44 2016 -0800"
      },
      "committer": {
        "name": "Sandeep Patil",
        "email": "sspatil@google.com",
        "time": "Fri Jan 27 13:12:32 2017 -0800"
      },
      "message": "property_contexts: split into platform and non-platform components\n\nBug: 33746484\nBug: 34370523\nTest: Successfully boot with original service and property contexts.\nTest: Successfully boot with split serivce and property contexts.\nTest: Incremental build works on sailfish (reported in b/34370523)\nTest: adb sideload works with aosp updater (reported in b/34370523)\n\nChange-Id: Idf24856193032a8bc89ec384a72451e578a9d5ac\nSigned-off-by: Sandeep Patil \u003csspatil@google.com\u003e\n"
    },
    {
      "commit": "cafd3553751dfb524316884fb213eb80c75a26a2",
      "tree": "9accfb894608a6c131aa011490cce799f0160abe",
      "parents": [
        "16b2a4de143a026b8d467b7d242126adcf67242b"
      ],
      "author": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Tue Jan 24 12:39:33 2017 -0800"
      },
      "committer": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Tue Jan 24 14:19:03 2017 -0800"
      },
      "message": "Do not send 0 byte string content.\n\nTrying to send even 0 bytes to closed socket leads to\nbroken pipe error. Sometimes property service is just\nquick enough and closes the socket between send(valuelen)\nand send(value) in the case where valuelen is 0.\n\nBug: http://b/34670529\nTest: adb reboot 20 times and make sure phone service did not fail\nTest: run bionic-unit-tests --gtest_filter\u003dprop*\nChange-Id: I96f90ca6fe1790614e7efd3015bffed1ef1e9040\n"
    },
    {
      "commit": "16b2a4de143a026b8d467b7d242126adcf67242b",
      "tree": "56e0d6455248408f5c485c8a5403bb970441f7a8",
      "parents": [
        "40250bb6837da0eb0f0882efd07bdaefb3f304b1"
      ],
      "author": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Tue Jan 24 20:43:29 2017 +0000"
      },
      "committer": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Tue Jan 24 12:58:18 2017 -0800"
      },
      "message": "Revert \"Revert \"Remove limit of system property name length\"\"\n\nThis reverts commit 489f58b5eaedd5a80635bb3a7b39e97037c585f6.\nBug: http://b/33926793\nBug: http://b/34670529\nTest: Run bionic-unit-tests --gtest_filter\u003dprop*\n\nChange-Id: Id4e94652dc2310a21f5b7bd3af098bf79df3f380\n"
    },
    {
      "commit": "489f58b5eaedd5a80635bb3a7b39e97037c585f6",
      "tree": "af22a101af7a53336af2669978e9a507f589fbd5",
      "parents": [
        "5c1ce278f31bc6fc338b9b951f1adc7c2b343d7c"
      ],
      "author": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Tue Jan 24 18:39:04 2017 +0000"
      },
      "committer": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Tue Jan 24 18:39:04 2017 +0000"
      },
      "message": "Revert \"Remove limit of system property name length\"\n\nThis reverts commit 5c1ce278f31bc6fc338b9b951f1adc7c2b343d7c.\nBug: http://b/33926793\nBug: http://b/34670529\n\nChange-Id: I0dc4a8ae55576c69b34b2958d8e664f7066b9c54\n"
    },
    {
      "commit": "5c1ce278f31bc6fc338b9b951f1adc7c2b343d7c",
      "tree": "0652006476a923c95c16837640a52f9298322a35",
      "parents": [
        "7844b4c5dbd0be9ea4212a523da2dd6a4804032c"
      ],
      "author": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Thu Dec 03 11:26:38 2015 -0800"
      },
      "committer": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Mon Jan 23 11:21:18 2017 -0800"
      },
      "message": "Remove limit of system property name length\n\nThis change introduces new __system_property_read_callback\nmethod to use in place of deprecated __system_property_read\n__system_property_set() and get() should just work but now\ndo not have limit on system property names.\n\nBug: http://b/33926793\nTest: boot device, run adb shell propget\nTest: boot device with old version of init (protocol v1)\nTest: run bionic-unit-tests --gtest_filter\u003dprop*\nChange-Id: I619fb5a7e27a272aac30011579665f6160888bc7\n"
    },
    {
      "commit": "f8a6d4745daafb6aced5cdeb76325c719ca1374b",
      "tree": "af6e1bd7660a400721a696d89afaecc10e1af3bf",
      "parents": [
        "8d0e0d495209f3bdc20edf0e5c2aa219b4cbe217"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Wed Oct 26 13:27:19 2016 -0700"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Tue Jan 17 13:55:18 2017 -0800"
      },
      "message": "Reserve a realtime signal for debuggerd.\n\nAllocate __SIGRTMIN + 3 for triggering native stack dumps (like SIGQUIT\nfor Java processes).\n\nBug: http://b/30705528\nTest: debuggerd_test\nChange-Id: I81d622fba32a651555268a8a2ba6721c61c93a58\n"
    },
    {
      "commit": "907fcc98b20c6520be424fbe40ff17a5652f00e5",
      "tree": "6ede6effd480d05edd4296c8b539613c754944e7",
      "parents": [
        "0625beb2709007e01b59edde7b6d5d4fe502ae6b",
        "581b9f661bc7d32691ac5e5ee8eac38a8807aa09"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Wed Jan 11 01:57:56 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Jan 11 01:57:56 2017 +0000"
      },
      "message": "Merge \"Hide __system_property_add/update, deprecate find_nth\""
    },
    {
      "commit": "581b9f661bc7d32691ac5e5ee8eac38a8807aa09",
      "tree": "2100650f26ccb76348855e2747f86c77926dba3a",
      "parents": [
        "fb07c36bc061db4ca5d8348ff6bc1e60b6c53191"
      ],
      "author": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Mon Jan 09 11:05:52 2017 -0800"
      },
      "committer": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Tue Jan 10 13:41:27 2017 -0800"
      },
      "message": "Hide __system_property_add/update, deprecate find_nth\n\nThese functions are supposed to be used only by the\nproperty service.\n\n__system_property_find_nth is deprecated and no longer part\nof NDK. Call to this function will result in abort for apps\ntargeting Android O.\n\nBug: http://b/34114501\nTest: bionic-unit-tests --gtest_filter\u003dprop*\nChange-Id: I9846965bf248e2ddf45cd7b293618245bbd87145\n"
    },
    {
      "commit": "940d460f59e566f2d84ea3e114074a50996e76b3",
      "tree": "e8e782b4af97446e3938460330631fa4c3b56caa",
      "parents": [
        "74e1fe1cc04f11b05fdc653a992b72c1aa3ff2b5",
        "3f6eee9793e4c41c7f4b15a723c777ae67fb1e51"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Jan 10 01:15:29 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Jan 10 01:15:30 2017 +0000"
      },
      "message": "Merge \"Revert \"Revert \"move android_ids into bionic\"\"\""
    },
    {
      "commit": "b0e8c565a622b5519e03d4416b0b5b1a5f20d7f5",
      "tree": "8362f2754276b72e79a652885be7379127ca6e07",
      "parents": [
        "fb07c36bc061db4ca5d8348ff6bc1e60b6c53191"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Jan 04 14:12:54 2017 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Sat Jan 07 14:16:46 2017 -0800"
      },
      "message": "Remove the global thread list.\n\nAnother release, another attempt to fix this bug.\n\nThis change affects pthread_detach, pthread_getcpuclockid,\npthread_getschedparam/pthread_setschedparam, pthread_join, and pthread_kill:\ninstead of returning ESRCH when passed an invalid pthread_t, they\u0027ll now SEGV.\n\nNote that this doesn\u0027t change behavior as much as you might think: the old\nlookup only held the global thread list lock for the duration of the lookup,\nso there was still a race between that and the dereference in the caller,\ngiven that callers actually need the tid to pass to some syscall or other,\nand sometimes update fields in the pthread_internal_t struct too.\n\nWe can\u0027t check thread-\u003etid against 0 to see whether a pthread_t is still\nvalid because a dead thread gets its thread struct unmapped along with its\nstack, so the dereference isn\u0027t safe.\n\nTaking the affected functions one by one:\n\n* pthread_getcpuclockid and pthread_getschedparam/pthread_setschedparam\n  should be fine. Unsafe calls to those seem highly unlikely.\n\n* Unsafe pthread_detach callers probably want to switch to\n  pthread_attr_setdetachstate instead, or using pthread_detach(pthread_self())\n  from the new thread\u0027s start routine rather than doing the detach in the\n  parent.\n\n* pthread_join calls should be safe anyway, because a joinable thread won\u0027t\n  actually exit and unmap until it\u0027s joined. If you\u0027re joining an\n  unjoinable thread, the fix is to stop marking it detached. If you\u0027re\n  joining an already-joined thread, you need to rethink your design.\n\n* Unsafe pthread_kill calls aren\u0027t portably fixable. (And are obviously\n  inherently non-portable as-is.) The best alternative on Android is to\n  use pthread_gettid_np at some point that you know the thread to be alive,\n  and then call kill/tgkill directly. That\u0027s still not completely safe\n  because if you\u0027re too late, the tid may have been reused, but then your\n  code is inherently unsafe anyway.\n\nIf we find too much code is still broken, we can come back and disable\nthe global thread list lookups for anything targeting \u003e\u003d O and then have\nanother go at really removing this in P...\n\nBug: http://b/19636317\nTest: N6P boots, bionic tests pass\nChange-Id: Ia92641212f509344b99ee2a9bfab5383147fcba6\n"
    },
    {
      "commit": "bb59d4724978d633eca1fb7a30c3d0970c8d5e52",
      "tree": "e1101bf6ce7e3fc147d28803e3d24100f42d6720",
      "parents": [
        "d26267b8b9b6ad8e4726b76455077ea824ad2094"
      ],
      "author": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Fri Jan 06 12:04:29 2017 -0800"
      },
      "committer": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Fri Jan 06 12:07:20 2017 -0800"
      },
      "message": "Make /dev/__properties__ 0711\n\nDon\u0027t allow processes to read the contents of the directory\n/dev/__properties__. This is an implementation detail of the properties\nsystem that processes shouldn\u0027t be concerned with.\n\nTest: Device boots and no problems reading individual properties.\nTest: ls -la /dev/__properties__ fails\nChange-Id: I00130fe4529525935654bff91e3cc59253b86e26\n"
    },
    {
      "commit": "d3cfd2687249d2340b738ddeb8ea0660860e9e3f",
      "tree": "02bc3a8cac4de0b2a7059636cb92cf0d7d953ac7",
      "parents": [
        "fb07c36bc061db4ca5d8348ff6bc1e60b6c53191"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Thu Jan 05 13:22:26 2017 -0800"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Thu Jan 05 15:15:12 2017 -0800"
      },
      "message": "Add declaration of tgkill to signal.h.\n\nExpose a useful function that we\u0027ve had since Jelly Bean.\n\nBug: http://b/34111810\nTest: TreeHugger\nChange-Id: Iaf3097f224c09b533f36050cf21394ba148007ad\n"
    },
    {
      "commit": "54891837a0d80325a15b6706fccef33e42552bad",
      "tree": "83c1d8d5f5d74cc628a3c84823b4f2e3221d22fc",
      "parents": [
        "f7e793ef7fcfc8f20be3cadd2f5a233151d4b9c9",
        "934bc86df3e9593551e1a09e242c72f0ee1afb3e"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Thu Dec 15 21:46:30 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Dec 15 21:46:30 2016 +0000"
      },
      "message": "Merge \"Define range of GIDs for cached app data.\""
    },
    {
      "commit": "0ff61f6d194cf9b30f443f906166192cdc41b0b6",
      "tree": "7cf661432792dafe4ea8f57760b91d0261cf64b1",
      "parents": [
        "cb0134d96ee67fc78082732835bcd7e5a4f5d63d"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Dec 14 17:30:07 2016 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Dec 14 17:30:07 2016 -0800"
      },
      "message": "Make the __stack_chk_fail message more searchable on the internets.\n\nNoticed while writing documentation:\n\n  https://source.android.com/devices/tech/debug/\n\nBug: http://b/28746168\nTest: crasher\nChange-Id: Ied1c1b1c75a85a899f07e6927134b9bf91316fe4\n"
    },
    {
      "commit": "3f6eee9793e4c41c7f4b15a723c777ae67fb1e51",
      "tree": "8dae7fc7d418fdf69d34057f8b80add179eeb351",
      "parents": [
        "77cb68d9f2621639ec7f4e1b124ceeee5c80a66a"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Dec 13 23:47:25 2016 +0000"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Dec 13 23:47:25 2016 +0000"
      },
      "message": "Revert \"Revert \"move android_ids into bionic\"\"\n\nThis reverts commit 77cb68d9f2621639ec7f4e1b124ceeee5c80a66a.\n\nChange-Id: Ibc9f775c4cd418be90fd8a6f192dd72ca5dff09a\n"
    },
    {
      "commit": "934bc86df3e9593551e1a09e242c72f0ee1afb3e",
      "tree": "747e62fbc5af8f2f1ad6f658bcb5c6080c441f76",
      "parents": [
        "2eaba9343f1726d3c4a23717ba3a5cc66c8374d2"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Tue Dec 13 14:03:19 2016 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Tue Dec 13 14:22:55 2016 -0700"
      },
      "message": "Define range of GIDs for cached app data.\n\nTo support upcoming disk usage calculation optimizations, this change\ncreates a new GID for each app that will be used to mark its cached\ndata.  We\u0027re allocating these unique GIDs so that we can use\nquotactl() to track cached data on a per-app basis.\n\nTest: builds, boots, tests pass\nBug: 27948817\nChange-Id: Ic00c39ccedc23d5d43988029e9921679126f8f2d\n"
    },
    {
      "commit": "50ae6dde5b1d5b94f06f50c0d25e7dc7dcd3e726",
      "tree": "01396721e9e9ac797ecb3f49e70e6262e261084f",
      "parents": [
        "901de13c37912286db015b6f9113e39be46ce04d",
        "77cb68d9f2621639ec7f4e1b124ceeee5c80a66a"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Tue Dec 13 00:31:25 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Dec 13 00:31:25 2016 +0000"
      },
      "message": "Merge \"Revert \"move android_ids into bionic\"\""
    },
    {
      "commit": "77cb68d9f2621639ec7f4e1b124ceeee5c80a66a",
      "tree": "ed8d084df93ed051a0688432dac858a6987f381e",
      "parents": [
        "1a13db5b2675759316a8529873c5d29831a9ba32"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Dec 12 22:11:37 2016 +0000"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Dec 12 22:11:37 2016 +0000"
      },
      "message": "Revert \"move android_ids into bionic\"\n\nThis reverts commit 1a13db5b2675759316a8529873c5d29831a9ba32.\n\nChange-Id: I7f571b3a9d542694d16fb9cf1131ef9e59d330ea\n"
    },
    {
      "commit": "ded6c91acc562f0923bb0c6946fba4ea41c0e764",
      "tree": "9df10c348eb8fe30b7b8a8b131aa041f50e6ab4b",
      "parents": [
        "227894a754eb11cb1203c359192d59654b01b93e",
        "1a13db5b2675759316a8529873c5d29831a9ba32"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Sat Dec 10 00:13:04 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Sat Dec 10 00:13:05 2016 +0000"
      },
      "message": "Merge \"move android_ids into bionic\""
    },
    {
      "commit": "722d01a991f6ddc629488660e806350336e35826",
      "tree": "c3814ed60ca3b34372ab6a38e28a8143dd6adc80",
      "parents": [
        "51366e9b16c3bc3ea6d200be66f561cc516fc995"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Dec 08 15:16:37 2016 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Dec 08 15:16:37 2016 -0800"
      },
      "message": "Fix icu4c calling on x86.\n\nSome of the function pointer types were wrong, and x86 cares if you\nsay `int` when you meant `int8_t` (because it feels at liberty to\nleave the top bits dirty and ignore them, both sides need to agree\nwhich they\u0027re dealing with).\n\nAlso slightly improve the wcstoimax and wcstoumax tests, since my\ninvestigation started there.\n\nBug: http://b/33451822\nTest: tests pass on x86, arm, and arm64\nChange-Id: I553193962f0cb993666f9f8e415990bba5b669e1\n"
    },
    {
      "commit": "f634655e6453e7d7ec453faa16cf4c97e4a5c630",
      "tree": "ef75cd449ddf401e084a49f90bdb28109b58c6c9",
      "parents": [
        "4511a59ab461745ec8f0d520645aa88ad8390aba"
      ],
      "author": {
        "name": "Dan Albert",
        "email": "danalbert@google.com",
        "time": "Fri Dec 02 12:02:03 2016 -0800"
      },
      "committer": {
        "name": "Dan Albert",
        "email": "danalbert@google.com",
        "time": "Fri Dec 02 13:03:30 2016 -0800"
      },
      "message": "Fix wcsto* where strings begin with whitespace.\n\nThe libc++ tests caught this.\n\nTest: adb shell /data/nativetest/bionic-unit-tests/bionic-unit-tests\nBug: None\nChange-Id: I14864e006f6cf9de3f96acac6aa3eb235894f2b1\n"
    },
    {
      "commit": "cf922ff804a00fab3bc81b418053eb5f595f1c58",
      "tree": "0fa724ee1eab2905f9228681febb7074b2eeb5bb",
      "parents": [
        "68ddf5cad39de9d43b9f3b0f14e85153ce07fe52",
        "9af74907d1eaa4e970770715b1aa424b25242260"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Dec 01 03:08:44 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Dec 01 03:08:44 2016 +0000"
      },
      "message": "Merge \"Clean up \u003csys/limits.h\u003e a bit.\""
    },
    {
      "commit": "68ddf5cad39de9d43b9f3b0f14e85153ce07fe52",
      "tree": "acb2ced64adb06f38c960c70ca87d53de96acdc7",
      "parents": [
        "f347046f2dcc1900224370bb9a4f8580a25c2a16",
        "4bf55226623801fab4751bc0736a07e044d00b49"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Nov 30 23:06:26 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Nov 30 23:06:26 2016 +0000"
      },
      "message": "Merge \"Abort harder.\""
    },
    {
      "commit": "f347046f2dcc1900224370bb9a4f8580a25c2a16",
      "tree": "e0778a5cbc06cb6f7a199cfac8a0fc73e8e1f7e9",
      "parents": [
        "f563ae89be76fbe43a0299ed17485abd06927b6a",
        "bc232b9f3430734c5fcd965962e80cc2a6d2a31e"
      ],
      "author": {
        "name": "Evgenii Stepanov",
        "email": "eugenis@google.com",
        "time": "Wed Nov 30 21:34:04 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Nov 30 21:34:05 2016 +0000"
      },
      "message": "Merge changes Iade6a185,Iab3050bd\n\n* changes:\n  Cleanup: replace sanitize:never with address:false.\n  Add __libc_arc4random_unlimited_entropy.\n"
    },
    {
      "commit": "1a13db5b2675759316a8529873c5d29831a9ba32",
      "tree": "8dae7fc7d418fdf69d34057f8b80add179eeb351",
      "parents": [
        "fa1a85d0031c1846f7c2a6137c614f6a12dd2279"
      ],
      "author": {
        "name": "William Roberts",
        "email": "william.c.roberts@intel.com",
        "time": "Fri Apr 08 13:44:19 2016 -0700"
      },
      "committer": {
        "name": "William Roberts",
        "email": "william.c.roberts@intel.com",
        "time": "Wed Nov 30 12:54:08 2016 -0800"
      },
      "message": "move android_ids into bionic\n\nGenerate the android_ids array and include into the\nbuild.\n\nTest: The bionic is built and that core AIDs work as\nexpected with commands like chown, mkdir and init services\nand builtins.\nBug: 27999086\nChange-Id: Ib575bf85326c91801c5674db475dcb9cf44c00dc\nSigned-off-by: William Roberts \u003cwilliam.c.roberts@intel.com\u003e\n"
    },
    {
      "commit": "9af74907d1eaa4e970770715b1aa424b25242260",
      "tree": "f1fe75fc71843b7123bf80ede7e55b57440bcc47",
      "parents": [
        "609880c12f009bba9bca696df1d6796eb4aba5ad"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Nov 29 18:06:34 2016 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Nov 30 09:06:53 2016 -0800"
      },
      "message": "Clean up \u003csys/limits.h\u003e a bit.\n\n\u003csys/limits.h\u003e shouldn\u0027t even exist, but leave it in for backwards\ncompatibility.\n\nEverything that seems legit moves to \u003climits.h\u003e, though it still seems\nlike a lot of that ought to come from the compiler instead (there\u0027s even\nan angry rant in the clang header to that effect).\n\nUnfortunately, we\u0027ve long exposed [a copy and paste of] the contents\nof \u003cfloat.h\u003e from \u003climits.h\u003e and \u003csys/limits.h\u003e. This patch preserves\nthat for backwards compatibility, but at least switches us over to\nusing the real \u003cfloat.h\u003e instead.\n\nBug: http://b/32776472\nTest: builds\nChange-Id: I2d5b3b5237b3a0442195e99bb967c076ce484f35\n"
    },
    {
      "commit": "4bf55226623801fab4751bc0736a07e044d00b49",
      "tree": "38365d7202df1459e15a0eae01a1e1144f0177ea",
      "parents": [
        "bd734f07167b9e24cd292e669717795f83d10157"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Nov 29 16:59:26 2016 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Nov 29 22:02:25 2016 -0800"
      },
      "message": "Abort harder.\n\nSome PoS internal system can\u0027t cope with more than 4 stack frames,\nso the fact that our abort(3) implementation takes 4 frames by itself\nmakes it useless.\n\nRe-reading POSIX, it only says \"behaves as if\", so the previous\nimplementation chain wasn\u0027t mandatory and we can just go straight to\ncalling tgkill...\n\nBefore:\n\n     #00 pc 0000000000069be4  /system/lib64/libc.so (tgkill+8)\n     #01 pc 0000000000066d50  /system/lib64/libc.so (pthread_kill+64)\n     #02 pc 0000000000028110  /system/lib64/libc.so (raise+24)\n     #03 pc 000000000001d4ec  /system/lib64/libc.so (abort+52)\n\nAfter:\n\n     #00 pc 0000000000069bc8  /system/lib64/libc.so (tgkill+8)\n     #01 pc 000000000001d4c8  /system/lib64/libc.so (abort+80)\n     #02 pc 0000000000001494  /system/xbin/crasher64 (_ZL9do_actionPKc+872)\n     #03 pc 00000000000010e0  /system/xbin/crasher64 (main+88)\n\nThis is less useful on 32-bit ARM because there there\u0027s an extra trampoline\nfrom an assembler abort(3) implementation, so you\u0027ll still only get one\nmeaningful stack frame. But every other architecture will now get two!\n\nBut wait!\n\nIt turns out that the assembler hack isn\u0027t needed any more. Here we are\nunwinding just fine all the way through the 32-bit ARM crasher:\n\nBefore (with direct call to tgkill but still using the assembler):\n\n     #00 pc 00049e7c  /system/lib/libc.so (tgkill+12)\n     #01 pc 00019c6f  /system/lib/libc.so (__libc_android_abort+50)\n     #02 pc 000181f8  /system/lib/libc.so (abort+4)\n     #03 pc 00001025  /system/xbin/crasher (_ZL9do_actionPKc+656)\n     #04 pc 00017721  /system/lib/libc.so (__libc_init+48)\n     #05 pc 00000b38  /system/xbin/crasher (_start+96)\n\nAfter:\n\n     #00 pc 00049e6c  /system/lib/libc.so (tgkill+12)\n     #01 pc 00019c5f  /system/lib/libc.so (abort+50)\n     #02 pc 00001025  /system/xbin/crasher (_ZL9do_actionPKc+656)\n     #03 pc 00017721  /system/lib/libc.so (__libc_init+48)\n     #04 pc 00000b38  /system/xbin/crasher (_start+96)\n\n(As you can see, the fact that we see __libc_init rather than main was true\nwith the assembler stub too, so that\u0027s not a regression even if it does seem\nodd...)\n\nBug: N/A\nTest: ran crasher64\nChange-Id: I9dd5b214c495604c8b502c7ec0de3631080d8c29\n"
    }
  ],
  "next": "609880c12f009bba9bca696df1d6796eb4aba5ad"
}
