)]}'
{
  "log": [
    {
      "commit": "6f94de3ca49e4ea147b1c59e5818fa175846518f",
      "tree": "9a2c45004114f53c4cf1f9468a58fe54c58320fa",
      "parents": [
        "2a1bb4e64677b9abbc17173c79768ed494565047"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Feb 12 06:06:22 2013 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Feb 12 06:06:22 2013 +0000"
      },
      "message": "Revert \"More pthreads cleanup.\"\n\nThis reverts commit 2a1bb4e64677b9abbc17173c79768ed494565047\n\nChange-Id: Ia443d0748015c8e9fc3121e40e68258616767b51\n"
    },
    {
      "commit": "2a1bb4e64677b9abbc17173c79768ed494565047",
      "tree": "3e843fd4277f2bdc502511bd5e4ee539887c14f1",
      "parents": [
        "2d3e72336e76180fb00822386da4f14203d117ce"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Feb 11 12:34:03 2013 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Feb 11 14:56:39 2013 -0800"
      },
      "message": "More pthreads cleanup.\n\nPOSIX says pthread_create returns EAGAIN, not ENOMEM.\n\nAlso pull pthread_attr_t functions into their own file.\n\nAlso pull pthread_setname_np into its own file.\n\nAlso remove unnecessary #includes from pthread_key.cpp.\n\nAlso account for those pthread keys used internally by bionic,\nso they don\u0027t count against the number of keys available to user\ncode. (They do with glibc, but glibc\u0027s limit is the much more\ngenerous 1024.)\n\nAlso factor out the common errno-restoring idiom to reduce gotos.\n\nBug: 6702535\nChange-Id: I555e66efffcf2c1b5a2873569e91489156efca42\n"
    },
    {
      "commit": "44b53ad6818de344e0b499ad8fdbb21fcb0ff2b6",
      "tree": "9a2c45004114f53c4cf1f9468a58fe54c58320fa",
      "parents": [
        "8397cdba9424febeaed4068829a5b0174ee1138c"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Feb 11 20:18:47 2013 +0000"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Feb 11 12:20:33 2013 -0800"
      },
      "message": "Revert \"Revert \"Pull the pthread_key_t functions out of pthread.c.\"\"\n\nThis reverts commit 6260553d48f6fd87ca220270bea8bafdde5726ec\n\n(Removing the accidental libm/Android.mk change.)\n\nChange-Id: I6cddd9857c31facc05636e8221505b3d2344cb75\n"
    },
    {
      "commit": "6260553d48f6fd87ca220270bea8bafdde5726ec",
      "tree": "9c2cb4dfb830d7918a0d0b8ecfbf25bf87bcc453",
      "parents": [
        "ad59322ae432d11ff36dcf046016af8cfe45fbe4"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Feb 11 20:18:16 2013 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Feb 11 20:18:16 2013 +0000"
      },
      "message": "Revert \"Pull the pthread_key_t functions out of pthread.c.\"\n\nThis reverts commit ad59322ae432d11ff36dcf046016af8cfe45fbe4\n\nsomehow my unfinished libm/Android.mk change got into here.\n\nChange-Id: I46be626c5269d60fb1ced9862f2ebaa380b4e0af\n"
    },
    {
      "commit": "ad59322ae432d11ff36dcf046016af8cfe45fbe4",
      "tree": "04ea728ddd656079ca4b9f228b32c371370be947",
      "parents": [
        "9a9bb243b50be5e3910b8edad72327bc216e72d0"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Feb 08 15:46:37 2013 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Feb 11 12:00:48 2013 -0800"
      },
      "message": "Pull the pthread_key_t functions out of pthread.c.\n\nThis was originally motivated by noticing that we were setting the\nwrong bits for the well-known tls entries. That was a harmless bug\nbecause none of the well-known tls entries has a destructor, but\nit\u0027s best not to leave land mines lying around.\n\nAlso add some missing POSIX constants, a new test, and fix\npthread_key_create\u0027s return value when we hit the limit.\n\nChange-Id: Ife26ea2f4b40865308e8410ec803b20bcc3e0ed1\n"
    },
    {
      "commit": "d3920b3a996b358e48232f417aa0a1e44a60f155",
      "tree": "b0520d0d300dbca1e6e54a9a7c26e6d2cd81ed08",
      "parents": [
        "f6afd3b670e23f56bf341d12136416aee17ea249"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Feb 07 18:39:34 2013 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Feb 08 11:16:13 2013 -0800"
      },
      "message": "Switch to using AT_RANDOM for the stack guards.\n\nBug: 7959813\nChange-Id: I8db4b8912ba649bfe668c6f22aa44690ddd401a2\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"
    },
    {
      "commit": "36bd371e26c716cbc18e11801b13eff0352d91b0",
      "tree": "b63e06f7a65f3ac2df09449bb65172644f230386",
      "parents": [
        "ba117e4172fe6f160bf5f4d58b37e12c08c34245"
      ],
      "author": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Wed Jan 16 13:13:22 2013 -0800"
      },
      "committer": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Wed Jan 16 13:16:42 2013 -0800"
      },
      "message": "Revert \"stack protector: use AT_RANDOM\"\n\nThe AT_RANDOM changes broke setuid / setgid executables\nsuch as \"ping\". When the linker executes a setuid program,\nit cleans the environment, removing any invalid environment\nentries, and adding \"NULL\"s to the end of the environment\narray for each removed variable. Later on, we try to determine\nthe location of the aux environment variable, and get tripped\nup by these extra NULLs.\n\nReverting this patch will get setuid executables working again,\nbut getauxval() is still broken for setuid programs because of\nthis bug.\n\nThis reverts commit e3a49a8661125f24aec8a1453e54b3b78005e21e.\n\nChange-Id: I05c58a896b1fe32cfb5d95d43b096045cda0aa4a\n"
    },
    {
      "commit": "e3a49a8661125f24aec8a1453e54b3b78005e21e",
      "tree": "a6a1be7dbdf1901db051fcfa1bd19f823e7a7f2b",
      "parents": [
        "14e1975e13c197180ed0481f305f83a362b16a24"
      ],
      "author": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Mon Jan 14 14:46:26 2013 -0800"
      },
      "committer": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Wed Jan 16 10:09:52 2013 -0800"
      },
      "message": "stack protector: use AT_RANDOM\n\nPopulate the stack canaries from the kernel supplied\nAT_RANDOM value, which doesn\u0027t involve any system calls.\nThis is slightly faster (6 fewer syscalls) and avoids\nunnecessarily reading /dev/urandom, which depletes entropy.\n\nBug: 7959813\n\nChange-Id: If2b43100a2a9929666df3de56b6139fed969e0f1\n"
    },
    {
      "commit": "ad88a0863110798cef5169dcf917e18b967a7cf6",
      "tree": "9b5fcbe6ebc81b4fb781dd788b8795a334def653",
      "parents": [
        "d0f2b7e7e65f19f978c59abcbb522c08e76b1508"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Oct 24 18:37:21 2012 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Oct 25 12:04:03 2012 -0700"
      },
      "message": "Per-thread -fstack-protector guards for x86.\n\nBased on a pair of patches from Intel:\n\n  https://android-review.googlesource.com/#/c/43909/\n  https://android-review.googlesource.com/#/c/44903/\n\nFor x86, this patch supports _both_ the global that ARM/MIPS use\nand the per-thread TLS entry (%gs:20) that GCC uses by default. This\nlets us support binaries built with any x86 toolchain (right now,\nthe NDK is emitting x86 code that uses the global).\n\nI\u0027ve also extended the original tests to cover ARM/MIPS too, and\nbe a little more thorough for x86.\n\nChange-Id: I02f279a80c6b626aecad449771dec91df235ad01\n"
    },
    {
      "commit": "5419b9474753d25dff947c7740532f86d130c0be",
      "tree": "4d746cfc20a1d3b5886f691ed1a49ddf34e2df78",
      "parents": [
        "a9944cfe9e152ca46afb0a77300ec5a2a1a24e64"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Oct 16 15:54:46 2012 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Oct 16 17:58:17 2012 -0700"
      },
      "message": "Make dlerror(3) thread-safe.\n\nI gave up trying to use the usual thread-local buffer idiom; calls to\ncalloc(3) and free(3) from any of the \"dl\" functions -- which live in\nthe dynamic linker -- end up resolving to the dynamic linker\u0027s stubs.\nI tried to work around that, but was just making things more complicated.\nThis alternative costs us a well-known TLS slot (instead of the\ndynamically-allocated TLS slot we\u0027d have used otherwise, so no difference\nthere), plus an extra buffer inside every pthread_internal_t.\n\nBug: 5404023\nChange-Id: Ie9614edd05b6d1eeaf7bf9172792d616c6361767\n"
    },
    {
      "commit": "1c303981431e3b8542a874370971d50687c6e11a",
      "tree": "aad6b03ec27bbdfd012ec18ecedf7196c6207894",
      "parents": [
        "52f3ee962b384bf247638adb653f0024ce92a895"
      ],
      "author": {
        "name": "Raghu Gandham",
        "email": "raghu@mips.com",
        "time": "Thu Aug 02 17:47:37 2012 -0700"
      },
      "committer": {
        "name": "Raghu Gandham",
        "email": "raghu@mips.com",
        "time": "Thu Aug 02 18:01:05 2012 -0700"
      },
      "message": "[MIPS] Support for TLS register\n\nChange-Id: I6b5194e5e379b573e3b1203d8015e20fb3edd647\nSigned-off-by: Chris Dearman \u003cchris@mips.com\u003e\n"
    },
    {
      "commit": "1a78fbb5c8228e4aea2a516818828b76044310f2",
      "tree": "4de785711dbfa8923d721f9180473328b6228a5c",
      "parents": [
        "d5099016f70b5acbfeb969787687099df703a4f4"
      ],
      "author": {
        "name": "Evgeniy Stepanov",
        "email": "eugenis@google.com",
        "time": "Thu Mar 22 18:01:53 2012 +0400"
      },
      "committer": {
        "name": "Evgeniy Stepanov",
        "email": "eugenis@google.com",
        "time": "Fri Apr 13 00:08:11 2012 +0400"
      },
      "message": "Initialize TLS before any application code is run.\n\nSince e19d702b8e33, dlsym and friends use recursive mutexes that\nrequire the current thread id, which is not available before the libc\nconstructor. This prevents us from using dlsym() in .preinit_array.\n\nThis change moves TLS initialization from libc constructor to the earliest\npossible point - immediately after linker itself is relocated. As a result,\npthread_internal_t for the initial thread is available from the start.\n\nAs a bonus, values stored in TLS in .preinit_array are not lost when libc is\ninitialized.\n\nChange-Id: Iee5a710ee000173bff63e924adeb4a4c600c1e2d\n"
    },
    {
      "commit": "6a51defa034a1c033ed01f7de444c0a4fc615249",
      "tree": "87b93dbfe8ab9c61d80d4a6036c66b0982b72c73",
      "parents": [
        "22f1e3d4fae7d45cc439da94690d786ed44756fb"
      ],
      "author": {
        "name": "David \u0027Digit\u0027 Turner",
        "email": "digit@google.com",
        "time": "Fri Aug 27 08:19:19 2010 -0700"
      },
      "committer": {
        "name": "David \u0027Digit\u0027 Turner",
        "email": "digit@google.com",
        "time": "Fri Aug 27 08:19:19 2010 -0700"
      },
      "message": "Fix __get_tls() in static C library to use kernel helpers.\n\nThis is needed to fix gdbserver\u0027s handling of threaded programs,\namong other things.\n\nChange-Id: I823387c602cef9891532da946a01db14be780ab0\n"
    },
    {
      "commit": "7910e39d197bc32ed79a144d06279c2be3c7f296",
      "tree": "2be732d00b499cd6d2e1be8084ba81730ca6c113",
      "parents": [
        "7ed086eb99a0dc326bf47fb387fa8be394fe3da4",
        "4a05d12cf52a9a40759f11f28543bd75715c8f00"
      ],
      "author": {
        "name": "David \u0027Digit\u0027 Turner",
        "email": "digit@google.com",
        "time": "Tue Sep 22 15:41:36 2009 -0700"
      },
      "committer": {
        "name": "David \u0027Digit\u0027 Turner",
        "email": "digit@google.com",
        "time": "Tue Sep 22 15:41:36 2009 -0700"
      },
      "message": "resolved conflicts for merge of 4a05d12c to eclair-plus-aosp\n"
    },
    {
      "commit": "4a05d12cf52a9a40759f11f28543bd75715c8f00",
      "tree": "2d0beafae4775320beea102649b491b05fa50f8e",
      "parents": [
        "916edf2a3fc60e08a5f29cd322d9f2a04d15cb49"
      ],
      "author": {
        "name": "David \u0027Digit\u0027 Turner",
        "email": "digit@google.com",
        "time": "Fri Sep 18 13:35:05 2009 -0700"
      },
      "committer": {
        "name": "David \u0027Digit\u0027 Turner",
        "email": "digit@google.com",
        "time": "Tue Sep 22 10:03:59 2009 -0700"
      },
      "message": "Fix TLS access for ARMv6 and beyond.\n\nFor performance reasons, we don\u0027t call the kernel helper. Instead, we directly\naccess the TLS register on ARMv6 and higher. For ARMv5TE, keep using the hard-coded\naddress populated by the kernel on each task switch.\n\nNOTE: Since we don\u0027t call the kernel helper, this must precisely match your\n      kernel configuration. This is controlled by setting the ARCH_ARM_HAVE_TLS_REGISTER\n      variable to \u0027true\u0027 in your board configuration file.\n"
    },
    {
      "commit": "a246a71975c1b4a939421ed20fdd8557f93de46f",
      "tree": "4b22fcf89ca32961cb12ef7b9a3bf9752ea22d65",
      "parents": [
        "c7f65a01e5ac3c4d3599ea3508459ecd6b54a71d"
      ],
      "author": {
        "name": "vinay harugop",
        "email": "vinay.harugop@stericsson.com",
        "time": "Wed Aug 05 02:09:29 2009 +0530"
      },
      "committer": {
        "name": "Jean-Baptiste Queru",
        "email": "jbq@google.com",
        "time": "Wed Sep 16 14:38:40 2009 -0700"
      },
      "message": "Linux kernel helpers support is provided to android for its TLS implementation. This fix addresses this by modifying\nthe TLS access functions to use the kernel helper.\nThis Fix is verified on ST Ericsson\u0027s U8500 platform and Submitted on behalf of a third-party:\nSurinder-pal SINGH from STMicroelectronics.\n"
    },
    {
      "commit": "ef0bd1857041ffde069cf52138aaf22c1af7130e",
      "tree": "c61b6ca4b286821ff473533183eba42e7da234a3",
      "parents": [
        "348065586a2e6154d6cff36afa6e00af6bbc5918"
      ],
      "author": {
        "name": "David \u0027Digit\u0027 Turner",
        "email": "digit@google.com",
        "time": "Fri Jul 17 17:55:01 2009 +0200"
      },
      "committer": {
        "name": "David \u0027Digit\u0027 Turner",
        "email": "digit@google.com",
        "time": "Fri Jul 17 17:55:01 2009 +0200"
      },
      "message": "Pass the elfdata pointer in a slot of the temporary TLS area.\n\nThis is needed to properly initialize the C runtime when libc.so\nis loaded by the dynamic linker.\n\nMove the temporary TLS setup before the first system call, just\nin case something really horrible happens, we won\u0027t crash when\ntrying to write an error code in \u0027errno\u0027\n\nRemove the broken TLS_SLOT_THREAD_ID setup. First, this slot\nshould normally receive the address of a pthread_internal_t,\nnot a kernel thread identifier. Second, it is never used by\nthe linker anyway.\n\nAlso remove an obsolete comment.\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": "e5cc1f386b167b9f7bfdebc7219e89aa9b71e4b2",
      "tree": "2cbd43daa6744ed80e833528f8cbfc0c485e5253",
      "parents": [
        "6d6c82c7a0a6b9a89f61b61c66f9b90d9c7177dc"
      ],
      "author": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Thu Jan 15 16:12:07 2009 -0800"
      },
      "committer": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Thu Jan 15 16:12:07 2009 -0800"
      },
      "message": "auto import from //branches/cupcake/...@126645\n"
    },
    {
      "commit": "6d6c82c7a0a6b9a89f61b61c66f9b90d9c7177dc",
      "tree": "8de86895228b63728c3a134c8b1fcab003db467d",
      "parents": [
        "4e468ed2eb86a2406e14f1eca82072ee501d05fd"
      ],
      "author": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Fri Jan 09 17:50:54 2009 -0800"
      },
      "committer": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Fri Jan 09 17:50:54 2009 -0800"
      },
      "message": "auto import from //branches/cupcake/...@125939\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"
    }
  ]
}
