)]}'
{
  "log": [
    {
      "commit": "8f639a40966c630c64166d2657da3ee641303194",
      "tree": "96e03d65a4efa6613941b748ed2c11b64a8dec1b",
      "parents": [
        "cb8ed207d2bb6113a80fc7f27cd0beb8897f5192"
      ],
      "author": {
        "name": "Ryan Prichard",
        "email": "rprichard@google.com",
        "time": "Mon Oct 01 23:10:05 2018 -0700"
      },
      "committer": {
        "name": "Ryan Prichard",
        "email": "rprichard@google.com",
        "time": "Wed Oct 10 14:31:06 2018 -0700"
      },
      "message": "Allow invoking the linker on an executable.\n\nThe executable can be inside a zip file using the same syntax used for\nshared objects: path.zip!/libentry.so.\n\nThe linker currently requires an absolute path. This restriction could be\nloosened, but it didn\u0027t seem important? If it allowed non-absolute paths,\nwe\u0027d need to decide how to handle:\n - foo/bar      (relative to CWD?)\n - foo          (search PATH / LD_LIBRARY_PATH, or also relative to CWD?)\n - foo.zip!/bar (normalize_path() requires an absolute path)\n\nThe linker adjusts the argc/argv passed to main() and to constructor\nfunctions to hide the initial linker argument, but doesn\u0027t adjust the auxv\nvector or files like /proc/self/{exe,cmdline,auxv,stat}. Those files will\nreport that the kernel loaded the linker as an executable.\n\nI think the linker_logger.cpp change guarding against (g_argv \u003d\u003d NULL)\nisn\u0027t actually necessary, but it seemed like a good idea given that I\u0027m\ndelaying initialization of g_argv until after C++ constructors have run.\n\nBug: http://b/112050209\nTest: bionic unit tests\nChange-Id: I846faf98b16fd34218946f6167e8b451897debe5\n"
    },
    {
      "commit": "32bc0fcf69dfccb3726fe572833a38b01179580e",
      "tree": "abca656f500087493e0997d5cf38cbcc9ec98eb8",
      "parents": [
        "65f82092a17518080178ff7004cc6db362ebfbcd"
      ],
      "author": {
        "name": "Yi Kong",
        "email": "yikong@google.com",
        "time": "Thu Aug 02 17:31:13 2018 -0700"
      },
      "committer": {
        "name": "Yi Kong",
        "email": "yikong@google.com",
        "time": "Thu Aug 02 18:09:44 2018 -0700"
      },
      "message": "Modernize codebase by replacing NULL with nullptr\n\nFixes -Wzero-as-null-pointer-constant warning.\n\nTest: m\nBug: 68236239\nChange-Id: I5b4123bc6709641315120a191e36cc57541349b2\n"
    },
    {
      "commit": "f6e5b582604715729b09db3e36a7aeb8c24b36a4",
      "tree": "1d68c449355f88a0652d3c1e2d6679b54fce1b20",
      "parents": [
        "ad596bf4fc406c0940d0f76f6b7c4ff22ecee7ac"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Fri Jun 01 15:30:54 2018 -0700"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Thu Jul 19 14:28:54 2018 -0700"
      },
      "message": "Introduce api to track fd ownership in libc.\n\nAdd two functions to allow objects that own a file descriptor to\nenforce that only they can close their file descriptor.\n\nUse them in FILE* and DIR*.\n\nBug: http://b/110100358\nTest: bionic_unit_tests\nTest: aosp/master boots without errors\nTest: treehugger\nChange-Id: Iecd6e8b26c62217271e0822dc3d2d7888b091a45\n"
    },
    {
      "commit": "95bca3f7d4f33bc7c38d33fb6f166eaf02454d92",
      "tree": "42c9b715fa2df0c2a4fe92ccbd890a22310ed30f",
      "parents": [
        "42596b7bf0652e44edff0370f75e1d5387c5cc7b"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Jun 12 14:16:50 2018 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Jun 12 15:29:36 2018 -0700"
      },
      "message": "Remove valgrind workarounds.\n\nBug: http://b/77856586\nTest: ran 32-bit x86 tests on host\nChange-Id: I98f6262bb1363ed5c8dd533b1f89b59b2b188525\n"
    },
    {
      "commit": "27475b5105e30332dd2145e0bfba098b756673d9",
      "tree": "02f72da22fcc8e2d2e8bf6db1e84d10f3365592c",
      "parents": [
        "cb5f4100060cd9894273863a973d622d6ebd2719"
      ],
      "author": {
        "name": "Ryan Prichard",
        "email": "rprichard@google.com",
        "time": "Thu May 17 17:14:18 2018 -0700"
      },
      "committer": {
        "name": "Ryan Prichard",
        "email": "rprichard@google.com",
        "time": "Wed May 30 16:44:23 2018 -0700"
      },
      "message": "Initialize __libc_sysinfo early on.\n\n__libc_sysinfo is hidden, so accessing it doesn\u0027t require a relocated GOT.\nIt is important not to have a relocatable initializer on __libc_sysinfo,\nbecause if it did have one, and if we initialized it before relocating the\nlinker, then on 32-bit x86 (which uses REL rather than RELA), the\nrelocation step would calculate the wrong addend and overwrite\n__libc_sysinfo with garbage.\n\nAsides:\n\n * It\u0027d be simpler to keep the __libc_sysinfo initializer for static\n   executables, but the loader pulls in libc_init_static (even though it\n   uses almost none of the code in that file, like __libc_init).\n\n * The loader has called __libc_init_sysinfo three times by the time it\n   has relocated itself. A static executable calls it twice, while libc.so\n   calls it only once.\n\nBug: none\nTest: lunch aosp_x86-userdebug ; emulator\nTest: adb shell /data/nativetest/bionic-unit-tests/bionic-unit-tests\nTest: adb shell /data/nativetest/bionic-unit-tests-static/bionic-unit-tests-static\nChange-Id: I5944f57847db7191608f4f83dde22b49e279e6cb\n"
    },
    {
      "commit": "6631f9b03dd032519be4b1971c2399a6e5e59357",
      "tree": "5e08b395a93f4a1cf4ec0fc83b7a09b4e864e51d",
      "parents": [
        "aa922bbaf38d896ecb46ae08c675c2ef0df811db"
      ],
      "author": {
        "name": "Ryan Prichard",
        "email": "rprichard@google.com",
        "time": "Mon Apr 30 18:29:32 2018 -0700"
      },
      "committer": {
        "name": "Ryan Prichard",
        "email": "rprichard@google.com",
        "time": "Wed May 30 15:43:43 2018 -0700"
      },
      "message": "Clean up TLS_SLOT_BIONIC_PREINIT usage a bit\n\n - It is only needed for dynamic executables, so move the initialization\n   out of __libc_init_main_thread and just before the solib constructor\n   calls. For static executables, the slot was initialized, then never\n   used or cleared. Instead, leave it clear.\n\n - For static executables, __libc_init_main_thread already initialized the\n   stack guard, so remove the redundant __init_thread_stack_guard call.\n\n - Simplify the slot access/clearing a bit in __libc_preinit.\n\n - Remove the \"__libc_init_common() will change the TLS area so the old one\n   won\u0027t be accessible anyway.\" comment. AFAICT, it\u0027s incorrect -- the\n   main thread\u0027s TLS area in a dynamic executable is initialized to a\n   static pthread_internal_t object in the linker, then reused by libc.so.\n\nTest: adb shell /data/nativetest/bionic-unit-tests/bionic-unit-tests\nTest: adb shell /data/nativetest/bionic-unit-tests-static/bionic-unit-tests-static\nChange-Id: Ie2da6f5be3ad563fa65b38eaadf8ba6ecc6a64b6\n"
    },
    {
      "commit": "1d01fe8980d332a85f730bf2d2fef9dcf707c041",
      "tree": "41814512a8be716ba9ee7129beed7b1e85a9a23f",
      "parents": [
        "2e998d37ce5be9833c595bc97549793a81459ed4"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Oct 23 10:07:55 2017 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Oct 23 10:07:55 2017 -0700"
      },
      "message": "Fix LP32 large pid detection.\n\nBug: http://b/68046352\nTest: ran tests\nChange-Id: I89cb99173ca77e9457e677187430b61cedb55c04\n"
    },
    {
      "commit": "93ea09f65c59585c082797bbfa4f4c7778d6e8b9",
      "tree": "635acc213edb1ed30cf595c4cb1f183bc0abc290",
      "parents": [
        "7c6784061dca3e36b6c80973573a0bea8896d585"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Thu Oct 05 15:18:47 2017 -0700"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Thu Oct 05 15:18:47 2017 -0700"
      },
      "message": "Add directives to force stop unwinding.\n\nOn aarch64/x86/x86_64 add a macro that inserts a cfi directive that will\nstop unwinding.\n\nFor arm, clang doesn\u0027t allow emitting .cantunwind, so add a comment and\nleave it the same as it current is.\n\nAdd this macro to __libc_init and __start_thread.\n\nAlso, remove duplicate compilation of libc_init_static.cpp that already\nincludes the static library that includes that file.\n\nBug: 15469122\n\nTest: Did unwinds using new unwinder tool (unwind) and debuggerd -b\nTest: and verified new unwinder works on aarch64/x86/x86_64.\nTest: Verified that it works on old unwinder for aarch64/x86, but\nTest: x86_64 doesn\u0027t work properly, but as well as before.\nChange-Id: I77302e8f6c7ba1549d98a4a164106ee82c9ecadc\n"
    },
    {
      "commit": "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": "b6453c52ac55f85d7f88f04db6e320825cea9bf7",
      "tree": "b1ecbacb334303b5e0e0c2773700977eeb97b574",
      "parents": [
        "1089afb744de588d841ffdeed158dbcd113a8e02"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Wed Jun 29 16:47:53 2016 -0700"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Thu Jun 30 12:58:32 2016 -0700"
      },
      "message": "Only initialize the global stack protector once.\n\nBefore, dynamic executables would initialize the global stack protector\ntwice, once for the linker, and once for the executable. This worked\nbecause the result was the same for both initializations, because it\nused getauxval(AT_RANDOM), which won\u0027t be the case once arc4random gets\nused for it.\n\nBug: http://b/29622562\nChange-Id: I7718b1ba8ee8fac7127ab2360cb1088e510fef5c\nTest: ran the stack protector tests on angler (32/64bit, static/dynamic)\n"
    },
    {
      "commit": "ca482742985a22dbf5ee4a0afdf8525300f7785d",
      "tree": "5a12f9d0381a6f732d90c5565fba8a3d3b2526b6",
      "parents": [
        "126cf324a39689e0c16cf815d0fb01f2bc18df05"
      ],
      "author": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Mon Jan 25 17:38:44 2016 -0800"
      },
      "committer": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Mon Jan 25 17:39:18 2016 -0800"
      },
      "message": "Revert \"Revert \"Make sem_wait able to return errno EINTR for sdk \u003e 23.\"\"\n\nThis reverts commit 6d5108520225fd2c4b10ca63565545ec120aab4a.\nAnd add missing bionic_sdk_version.h.\n\nChange-Id: I24cc738b1fd1d26234c52afbc787f5b3c4a9c9cb\n"
    },
    {
      "commit": "ac67b4eb7c70ea668abb32298b0cb16920a32a66",
      "tree": "561114e7101e55d8ae0fa7e8610124100adcef77",
      "parents": [
        "c96b6e1747c5b5ca154bada84ec0a3868540e96f",
        "6d5108520225fd2c4b10ca63565545ec120aab4a"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Jan 26 00:32:38 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Jan 26 00:32:38 2016 +0000"
      },
      "message": "Merge \"Revert \"Make sem_wait able to return errno EINTR for sdk \u003e 23.\"\""
    },
    {
      "commit": "6d5108520225fd2c4b10ca63565545ec120aab4a",
      "tree": "914cf5e7a79c5a0545cf233fcb69b01aa9249999",
      "parents": [
        "892b61d3409e8cdf0e121c688737eb058d57f7ab"
      ],
      "author": {
        "name": "Dan Albert",
        "email": "danalbert@google.com",
        "time": "Tue Jan 26 00:20:06 2016 +0000"
      },
      "committer": {
        "name": "Dan Albert",
        "email": "danalbert@google.com",
        "time": "Tue Jan 26 00:20:06 2016 +0000"
      },
      "message": "Revert \"Make sem_wait able to return errno EINTR for sdk \u003e 23.\"\n\nBroke the build. There\u0027s no such file as bionic_sdk_version.h anywhere in the tree.\n\nThis reverts commit 892b61d3409e8cdf0e121c688737eb058d57f7ab.\n\nChange-Id: Iec3f4588edfb1d1524bb5f16451fd05dc6ebe44a\n"
    },
    {
      "commit": "c96b6e1747c5b5ca154bada84ec0a3868540e96f",
      "tree": "2566d8f92d63cff78bf5c64ab041af8c71ac42b7",
      "parents": [
        "e40e429753cfe84fee0aaf553b57ce8679a28c9d",
        "892b61d3409e8cdf0e121c688737eb058d57f7ab"
      ],
      "author": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Mon Jan 25 23:39:29 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Jan 25 23:39:29 2016 +0000"
      },
      "message": "Merge \"Make sem_wait able to return errno EINTR for sdk \u003e 23.\""
    },
    {
      "commit": "892b61d3409e8cdf0e121c688737eb058d57f7ab",
      "tree": "abc63e4c8e1a525bdfe15b8447d0c73825d8861e",
      "parents": [
        "7150e5a8ef7c5f5c77720db7961e170580db08ea"
      ],
      "author": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Mon Jan 25 11:37:16 2016 -0800"
      },
      "committer": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Mon Jan 25 13:44:39 2016 -0800"
      },
      "message": "Make sem_wait able to return errno EINTR for sdk \u003e 23.\n\nPosix standards says sem_wait is interruptible by the delivery\nof a signal. To keep compatiblity with old apps, only fix that\nin newer sdk versions.\n\nBug: 26743454\n\nChange-Id: I924cbb436658e3e0f397c922d866ece99b8241a3\n"
    },
    {
      "commit": "63860cb8fd1adf3f679b9b4ad876323a8d65cd9d",
      "tree": "25aeae686d92efcb5e08a54e8cba1e8c31efe33b",
      "parents": [
        "ad9c3f34f762ed45cce5dbb93218124ed31f6873"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Mon Nov 16 17:30:32 2015 -0800"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Mon Jan 25 10:54:21 2016 -0800"
      },
      "message": "Malloc debug rewrite.\n\nThe major components of the rewrite:\n\n- Completely remove the qemu shared library code. Nobody was using it\n  and it appears to have broken at some point.\n- Adds the ability to enable/disable different options independently.\n- Adds a new option that can enable the backtrace on alloc/free when\n  a process gets a specific signal.\n- Adds a new way to enable malloc debug. If a special property is\n  set, and the process has an environment variable set, then debug\n  malloc will be enabled. This allows something that might be\n  a derivative of app_process to be started with an environment variable\n  being enabled.\n- get_malloc_leak_info() used to return one element for each pointer that\n  had the exact same backtrace. The new version returns information for\n  every one of the pointers with same backtrace. It turns out ddms already\n  automatically coalesces these, so the old method simply hid the fact\n  that there where multiple pointers with the same amount of backtrace.\n- Moved all of the malloc debug specific code into the library.\n  Nothing related to the malloc debug data structures remains in libc.\n- Removed the calls to the debug malloc cleanup routine. Instead, I\n  added an atexit call with the debug malloc cleanup routine. This gets\n  around most problems related to the timing of doing the cleanup.\n\nThe new properties and environment variables:\n\nlibc.debug.malloc.options\n  Set by option name (such as \"backtrace\"). Setting this to a bad value\n  will cause a usage statement to be printed to the log.\n\nlibc.debug.malloc.program\n  Same as before. If this is set, then only the program named will\n  be launched with malloc debug enabled. This is not a complete match,\n  but if any part of the property is in the program name, malloc debug is\n  enabled.\n\nlibc.debug.malloc.env_enabled\n  If set, then malloc debug is only enabled if the running process has the\n  environment variable LIBC_DEBUG_MALLOC_ENABLE set.\n\nBug: 19145921\n\nChange-Id: I7b0e58cc85cc6d4118173fe1f8627a391b64c0d7\n"
    },
    {
      "commit": "42d949ff9d2956e25f84e537f43a8f93ecb37baf",
      "tree": "66f1215029c3777d59393fbbbaa55ba5aed5872a",
      "parents": [
        "988e71b2b22117b0f7e994cbe764066630494125"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Jan 06 19:51:43 2016 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Jan 06 20:06:08 2016 -0800"
      },
      "message": "Defend against -fstack-protector in libc startup.\n\nExactly which functions get a stack protector is up to the compiler, so\nlet\u0027s separate the code that sets up the environment stack protection\nrequires and explicitly build it with -fno-stack-protector.\n\nBug: http://b/26276517\nChange-Id: I8719e23ead1f1e81715c32c1335da868f68369b5\n"
    },
    {
      "commit": "3c8fc2fea9dac044f4903b0c315b5cda1c1f5301",
      "tree": "dcd2fbd9d1caeda1869626f036492fba041d10ba",
      "parents": [
        "25cba7df5120a32b144769843781442031fc597b"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Thu Oct 08 14:49:26 2015 -0700"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Mon Oct 12 17:54:58 2015 -0700"
      },
      "message": "Move malloc dispatch table to __libc_globals.\n\nChange-Id: Ic20b980d1e8b6c2d4b773ebe336658fd17c737cb\n"
    },
    {
      "commit": "93c0f5ee00d1357247fda333c9d49c8673c9c83b",
      "tree": "9afe2dc72f063df4b498aa1328be122e389fd777",
      "parents": [
        "487a1823e8617011009eded8eae9a75c1f871887"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Tue Oct 06 11:08:13 2015 -0700"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Fri Oct 09 15:59:04 2015 -0700"
      },
      "message": "Move VDSO pointers to a shared globals struct.\n\nChange-Id: I01cbc9cf0917dc1fac52d9205bda2c68529d12ef\n"
    },
    {
      "commit": "4b41555ba5439025cee9cf3f9ff45db43b1865da",
      "tree": "130e856c9feb2499299a5fb57fc911cecacbee45",
      "parents": [
        "e880c736d6c1d947f6309d5f1f63c74e8345c6a6"
      ],
      "author": {
        "name": "Dmitriy Ivanov",
        "email": "dimitry@google.com",
        "time": "Thu Sep 04 21:54:34 2014 +0000"
      },
      "committer": {
        "name": "Dmitriy Ivanov",
        "email": "dimitry@google.com",
        "time": "Thu Sep 04 21:54:34 2014 +0000"
      },
      "message": "Revert \"Register __libc_fini as early as possible.\"\n\nThis reverts commit e880c736d6c1d947f6309d5f1f63c74e8345c6a6.\n\nChange-Id: Ide83e442eb5dbfef5298a15bc602c3fe1dda1862\n"
    },
    {
      "commit": "e880c736d6c1d947f6309d5f1f63c74e8345c6a6",
      "tree": "b7e6dfa0c80d87f72ab1bbccd78242eee01ba841",
      "parents": [
        "3b10ba6f1b743ddced32474891ff6d1cb83c027a"
      ],
      "author": {
        "name": "Dmitriy Ivanov",
        "email": "dimitry@google.com",
        "time": "Wed Sep 03 14:56:05 2014 -0700"
      },
      "committer": {
        "name": "Dmitriy Ivanov",
        "email": "dimitry@google.com",
        "time": "Wed Sep 03 15:27:29 2014 -0700"
      },
      "message": "Register __libc_fini as early as possible.\n\n  We want __libc_fini to be called after all the destructors.\n\nBug: 14611536\nChange-Id: Ibb83a94436795ec178fd605fa531ac29608f4a3e\n"
    },
    {
      "commit": "53c3c271dc9927dd280981fc23409af60f460007",
      "tree": "4a04122167583b9994204372bbc549a8174b9611",
      "parents": [
        "83ce99d8b7e2b15b2169e6e6e18e871ad35abb6c"
      ],
      "author": {
        "name": "Dmitriy Ivanov",
        "email": "dimitry@google.com",
        "time": "Fri Jul 11 12:59:16 2014 -0700"
      },
      "committer": {
        "name": "Dmitriy Ivanov",
        "email": "dimitry@google.com",
        "time": "Mon Jul 14 12:05:16 2014 -0700"
      },
      "message": "Upstream atexit\n\nChange-Id: Ia454a2181b5058ed9783dc02b6b1805d0e4d2715\n"
    },
    {
      "commit": "d286796fce1e6fff407b719a53eb2afbeb96c327",
      "tree": "c1edc80194a19b7b443611acd0ffdea2ddfe130a",
      "parents": [
        "2f9400b679ffe08f7190781e64edda5edf0f7297"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Jun 03 15:22:34 2014 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Jun 03 15:22:34 2014 -0700"
      },
      "message": "Turn on -Wunused and fix the mistakes it uncovers.\n\nChange-Id: I023d2d8b547fbc21d4124bb7510d42b06a0dc501\n"
    },
    {
      "commit": "07f1ded1399805fa9367f4db2936832b0c22b7a5",
      "tree": "ef1ea3c1b18e92aad46fa839de895bf76a4780c7",
      "parents": [
        "e6c27a7af7a9b13e4e3d3ebd604d28effa9e9322"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed May 14 11:35:49 2014 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed May 14 11:38:22 2014 -0700"
      },
      "message": "Remove the broken pthread deadlock prediction.\n\nThis hasn\u0027t built in over one release cycle and no one even noticed.\nart does this the right way and other projects should do the same.\n\nChange-Id: I7d1fb84c4080e008f329ee73e209ce85a36e6d55\n"
    },
    {
      "commit": "ceb5bd787c8ce281e5f4343c5d4f77b41c3e2919",
      "tree": "4b91184c22597e1757ba036d30e09f5c5e586a74",
      "parents": [
        "0ccef7ec5294b34902e07c26db55891d3eddb2be"
      ],
      "author": {
        "name": "Sreeram Ramachandran",
        "email": "sreeram@google.com",
        "time": "Mon May 12 11:19:16 2014 -0700"
      },
      "committer": {
        "name": "Sreeram Ramachandran",
        "email": "sreeram@google.com",
        "time": "Tue May 13 11:30:03 2014 -0700"
      },
      "message": "Introduce netd_client, a dynamic library that talks to netd.\n\nThe library exists outside bionic. It is dynamically loaded, to replace selected\nstandard socket syscalls with versions that talk to netd.\n\nChange connect() to use the library if available.\n\n(cherry picked from commit 3a6b627a14df8111b03e452f2df4b5f4938e0e49)\n\nChange-Id: Ib6198e19dbc306521a26fcecfdf6e8424d163fc9\n"
    },
    {
      "commit": "eb847bc8666842a3cfc9c06e8458ad1abebebaf0",
      "tree": "15e070fb706ba7599d5f402a8f934a7399541a6a",
      "parents": [
        "0c17099a71cb5d1b36b7aab66fd7341b3fc9106d"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Oct 09 15:50:50 2013 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Oct 09 16:00:17 2013 -0700"
      },
      "message": "Fix x86_64 build, clean up intermediate libraries.\n\nThe x86_64 build was failing because clone.S had a call to __thread_entry which\nwas being added to a different intermediate .a on the way to making libc.so,\nand the linker couldn\u0027t guarantee statically that such a relocation would be\npossible.\n\n  ld: error: out/target/product/generic_x86_64/obj/STATIC_LIBRARIES/libc_common_intermediates/libc_common.a(clone.o): requires dynamic R_X86_64_PC32 reloc against \u0027__thread_entry\u0027 which may overflow at runtime; recompile with -fPIC\n\nThis patch addresses that by ensuring that the caller and callee end up in the\nsame intermediate .a. While I\u0027m here, I\u0027ve tried to clean up some of the mess\nthat led to this situation too. In particular, this removes libc/private/ from\nthe default include path (except for the DNS code), and splits out the DNS\ncode into its own library (since it\u0027s a weird special case of upstream NetBSD\ncode that\u0027s diverged so heavily it\u0027s unlikely ever to get back in sync).\n\nThere\u0027s more cleanup of the DNS situation possible, but this is definitely a\nstep in the right direction, and it\u0027s more than enough to get x86_64 building\ncleanly.\n\nChange-Id: I00425a7245b7a2573df16cc38798187d0729e7c4\n"
    },
    {
      "commit": "2a0b873065edb304fa2d1c54f8de663ea638b8ab",
      "tree": "4753b74b87e713379965bb051482036e6726afb1",
      "parents": [
        "777a4ee6771e6fe3362ef4f24244a44fcd0aabe4"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Oct 08 18:50:24 2013 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Oct 09 13:39:13 2013 -0700"
      },
      "message": "Fix __errno for LP64 and clean up __get_tls.\n\nIf __get_tls has the right type, a lot of confusing casting can disappear.\n\nIt was probably a mistake that __get_tls was exposed as a function for mips\nand x86 (but not arm), so let\u0027s (a) ensure that the __get_tls function\nalways matches the macro, (b) that we have the function for arm too, and\n(c) that we don\u0027t have the function for any 64-bit architecture.\n\nChange-Id: Ie9cb989b66e2006524ad7733eb6e1a65055463be\n"
    },
    {
      "commit": "ce532721aaf61d4b6a171903c851ac82adf08aa8",
      "tree": "79938358ba4dc34a795aeab6026ec06a6a811591",
      "parents": [
        "c14166477e7fd22693eab194d37624c2f7506ce4"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Mar 15 16:31:09 2013 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Mar 15 16:31:09 2013 -0700"
      },
      "message": "Hide various symbols that shouldn\u0027t be exposed.\n\nA mangled symbol in libc.so is a symbol that shouldn\u0027t be exported\nby libc.so.\n\nChange-Id: Id92d1e1968b3d11d111a5d9ef692adb1ac7694a1\n"
    },
    {
      "commit": "42b2c6a5eed5e4ef35315b8cd32d1355f12a69b6",
      "tree": "0fb55a369b620ef79cfa103f67a5184f067dadeb",
      "parents": [
        "d32fdbaf03f688497adbec885e85c0a69f7a4542"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Feb 07 10:14:39 2013 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Feb 07 11:44:21 2013 -0800"
      },
      "message": "Clean up the argc/argv/envp/auxv handling.\n\nThere\u0027s now only one place where we deal with this stuff, it only needs to\nbe parsed once by the dynamic linker (rather than by each recipient), and it\u0027s\nnow easier for us to get hold of auxv data early on.\n\nChange-Id: I6314224257c736547aac2e2a650e66f2ea53bef5\n"
    }
  ]
}
