)]}'
{
  "log": [
    {
      "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": "c9a659c57b256001fd63f9825bde69e660c2655b",
      "tree": "74de618379f38c2726cc41956144f560dd6be9ea",
      "parents": [
        "b804b9d67b9e3a8c63471ff9892f6abea2a58684"
      ],
      "author": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Thu Nov 05 15:36:08 2015 -0800"
      },
      "committer": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Thu Nov 19 13:42:03 2015 -0800"
      },
      "message": "Use FUTEX_WAIT_BITSET to avoid converting timeouts.\n\nAdd unittests for pthread APIs with timeout parameter.\n\nBug: 17569991\n\nChange-Id: I6b3b9b2feae03680654cd64c3112ce7644632c87\n"
    },
    {
      "commit": "6a3ff01cd4f063556cf25706ddc9dff82c351aba",
      "tree": "688a98c07ddfecd05d706e8f6b6d3033d8ca037e",
      "parents": [
        "7f17aea2fc21aaf657824a023a4b7582fb74a2d9"
      ],
      "author": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Thu Jan 29 10:47:45 2015 -0800"
      },
      "committer": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Thu Jan 29 11:19:15 2015 -0800"
      },
      "message": "Rewrite __cxa_guard.cpp with \u003cstdatomic.h\u003e.\n\nBug: 19180923\nChange-Id: If4912d01db43c72ef12f4b04270ddb5d76d09462\n"
    },
    {
      "commit": "15b641a26731a7e42455c3ed22e1e9bdf31ea79c",
      "tree": "c06577c257be144af1d59f9f23e1f1117b22c3aa",
      "parents": [
        "bc7f8a791b4a510914fd5cac713415acb80fb806"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed May 14 18:18:55 2014 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed May 14 18:18:55 2014 -0700"
      },
      "message": "Move libstdc++ into libc.\n\nThe Android build system always links against libstdc++.so anyway. Having\noperator new and operator delete in a separate library means we can\u0027t use\nconstructors and destructors on heap-allocated objects inside the C library,\nwhich is quite an unfortunate limitation.\n\nThis will be cheaper too; on LP64 we can stop linking against the [now empty]\nlibstdc++.so giving the dynamic linker one less library to worry about for\nevery process.\n\nThere\u0027s precedent too --- we already have no libpthread or librt.\n\nFor now I\u0027m leaving the include files where they are, and I\u0027m generating a\ndummy libstdc++.so and libstdc++.a. We can come back and clean that up later\nif all goes well.\n\nBug: 13367666\nChange-Id: I6f3e27ea7c30d03d6394965d0400c9dc87fa83db\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": "387d4b7de9af2afd0c37a895ff9d012eb1f66156",
      "tree": "a515a4be8d2881d734a6b1c2a2e4f1fdd0c43e1d",
      "parents": [
        "709bb0f79ced522e5fb145182472ee4063b85368"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Aug 09 15:17:46 2012 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Aug 09 16:05:31 2012 -0700"
      },
      "message": "Auto-generate a complete NOTICE file.\n\nRemove the hand-collated ones, and switch to a script that pulls the\ncopyright headers out of every file and collects the unique ones.\n\nChange-Id: Ied3b98b3f56241df97166c410ff81de4e0157c9d\n"
    },
    {
      "commit": "52d6233296ec84eb5b58fcbf7bc9da4b96a943aa",
      "tree": "b0186ce62c2aedc309501f0bfc641a291d91d3e6",
      "parents": [
        "a7916509a3446afd0e863b03e4204cee73e81555"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Jul 27 17:40:29 2012 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Jul 27 17:43:38 2012 -0700"
      },
      "message": "Report errors to the log, not just stderr.\n\nIn particular this affects assert(3) and __cxa_pure_virtual, both of\nwhich have managed to confuse people this week by apparently aborting\nwithout reason. (Because stderr goes nowhere, normally.)\n\nBug: 6852995\nBug: 6840813\nChange-Id: I7f5d17d5ddda439e217b7932096702dc013b9142\n"
    },
    {
      "commit": "762a4fe2eed6a36b14d3b378c2974ad355d97d54",
      "tree": "a430b718a10128db36185033de5d2c30f87a6ff5",
      "parents": [
        "f848321c4feb0a8b194a2148c3a9d6d65280f924",
        "35d592cc5ac72b851bc2bfb66b159cd62c68a634"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Apr 16 14:40:26 2012 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Apr 16 14:40:26 2012 -0700"
      },
      "message": "resolved conflicts for merge of 35d592cc to master\n\nChange-Id: I8184302daf61814d26c837f9920b4e68d96d7f65\n"
    },
    {
      "commit": "ee18fb4aacc9b67b397a0b000dda6e350ad5b3f0",
      "tree": "1b0359779dc381a7f2cf91220c5318ba2e4b87b9",
      "parents": [
        "6bc18fa58849a4307cf6ddcfd526d9258e8175fc"
      ],
      "author": {
        "name": "Fengwei Yin",
        "email": "fengwei.yin@intel.com",
        "time": "Wed Mar 28 17:25:17 2012 +0800"
      },
      "committer": {
        "name": "Jack Ren",
        "email": "jack.ren@intel.com",
        "time": "Mon Apr 16 14:20:30 2012 +0800"
      },
      "message": "libstdc++: Fix x86 thread-safe one-time-construction implementation.\n\nThe root of the problem is that the existing implementation is based on the\nARM C++ ABI, which mandates a different guard variable layout than the\nItanium/x86 C++ one.\n\nThis patch modifies the implementation in a way that satisfies both ABIs (and\ndoesn\u0027t require changing the toolchains).\n\nChange-Id: I885e9adc7f088b9c0a78355bd752f1e6aeec9f07\nSigned-off-by: Fengwei Yin \u003cfengwei.yin@intel.com\u003e\nSigned-off-by: Jack Ren \u003cjack.ren@intel.com\u003e\nSigned-off-by: Bruce Beare \u003cbruce.j.beare@intel.com\u003e\n"
    },
    {
      "commit": "e31bfae2baa96742f998155ee26e56c826a8ce3a",
      "tree": "b12cfb44ad035c26278f42fa9b19095e90b79e95",
      "parents": [
        "8180b08fb2f27052f9df2ae4787bb5bf409f13e0"
      ],
      "author": {
        "name": "David \u0027Digit\u0027 Turner",
        "email": "digit@android.com",
        "time": "Tue Nov 15 15:47:02 2011 +0100"
      },
      "committer": {
        "name": "David \u0027Digit\u0027 Turner",
        "email": "digit@google.com",
        "time": "Wed Nov 16 16:28:10 2011 +0100"
      },
      "message": "bionic: Do not use \u003csys/atomics.h\u003e for platform code.\n\nWe\u0027re going to modify the __atomic_xxx implementation to provide\nfull memory barriers, to avoid problems for NDK machine code that\nlink to these functions.\n\nFirst step is to remove their usage from our platform code.\nWe now use inlined versions of the same functions for a slight\nperformance boost.\n\n+ remove obsolete atomics_x86.c (was never compiled)\n\nNOTE: This improvement was benchmarked on various devices.\n      Comparing a pthread mutex lock + atomic increment + unlock\n      we get:\n\n  - ARMv7 emulator, running on a 2.4 GHz Xeon:\n       before: 396 ns    after: 288 ns\n\n  - x86 emulator in KVM mode on same machine:\n       before: 27 ns     after: 27 ns\n\n  - Google Nexus S, in ARMv7 mode (single-core):\n       before: 82 ns     after: 76 ns\n\n  - Motorola Xoom, in ARMv7 mode (multi-core):\n       before: 121 ns    after: 120 ns\n\nThe code has also been rebuilt in ARMv5TE mode for correctness.\n\nChange-Id: Ic1dc72b173d59b2e7af901dd70d6a72fb2f64b17\n"
    },
    {
      "commit": "d466780c7cedb41edcf13f28ad900556c6aaa5b2",
      "tree": "cbbc780df9598adb5788824075f2519c54f22fff",
      "parents": [
        "519763265ec0b634bd9c264a0aca034882458ecc"
      ],
      "author": {
        "name": "David \u0027Digit\u0027 Turner",
        "email": "digit@google.com",
        "time": "Fri Jun 11 13:18:41 2010 -0700"
      },
      "committer": {
        "name": "David \u0027Digit\u0027 Turner",
        "email": "digit@google.com",
        "time": "Wed Jul 07 14:18:20 2010 -0700"
      },
      "message": "Add missing SMP barriers to libstdc++\n\nChange-Id: I20a8dcd2e3316ac60237e800c682cacc8e59e187\n"
    },
    {
      "commit": "1dc9e472e19acfe6dc7f41e429236e7eef7ceda1",
      "tree": "3be0c520fae17689bbf5584e1136fb820caef26f",
      "parents": [
        "1767f908af327fa388b1c66883760ad851267013"
      ],
      "author": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Tue Mar 03 19:28:35 2009 -0800"
      },
      "committer": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Tue Mar 03 19:28:35 2009 -0800"
      },
      "message": "auto import from //depot/cupcake/@135843\n"
    },
    {
      "commit": "1767f908af327fa388b1c66883760ad851267013",
      "tree": "4b825dc642cb6eb9a060e54bf8d69288fbee4904",
      "parents": [
        "a799b53f10e5a6fd51fef4436cfb7ec99836a516"
      ],
      "author": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Tue Mar 03 18:28:13 2009 -0800"
      },
      "committer": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Tue Mar 03 18:28:13 2009 -0800"
      },
      "message": "auto import from //depot/cupcake/@135843\n"
    },
    {
      "commit": "a27d2baa0c1a2ec70f47ea9199b1dd6762c8a349",
      "tree": "defd1cc07d16ad2f3b21154114e092d11c94c5bb",
      "parents": [],
      "author": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Tue Oct 21 07:00:00 2008 -0700"
      },
      "committer": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Tue Oct 21 07:00:00 2008 -0700"
      },
      "message": "Initial Contribution\n"
    }
  ]
}
