)]}'
{
  "log": [
    {
      "commit": "c0f89283cc746ff7d6f6be405c603435b8b02657",
      "tree": "0690eb5fe3efb43bba6ce8a465d281ce944e5268",
      "parents": [
        "cafc948069d447aa1e4dde599ee83bf6c0c5d5d8"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Wed Apr 15 16:34:57 2015 -0700"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Wed Apr 15 17:20:10 2015 -0700"
      },
      "message": "Update the number of jemalloc reserved keys.\n\njemalloc now uses a single key pointing to a structure rather\nthan multiple keys.\n\nChange-Id: Ib76185a594ab2cd4dc400d9a7a5bc0a57a7ac92d\n"
    },
    {
      "commit": "76615dae93c18ac890e167c547a08c0228709a33",
      "tree": "12a7e87c6fb332bebc087f43bcf29b2f7827571e",
      "parents": [
        "4bd8f9637daaada333ff35945b00cfe6cb822376"
      ],
      "author": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Tue Mar 17 14:22:09 2015 -0700"
      },
      "committer": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Wed Apr 08 13:11:13 2015 -0700"
      },
      "message": "Provide writer preference option in rwlock.\n\nPrevious implementation of rwlock contains four atomic variables, which\nis hard to maintain and change. So I make following changes in this CL:\n\n1. Add pending flags in rwlock.state, so we don\u0027t need to synchronize\nbetween different atomic variables. Using compare_and_swap operations\non rwlock.state is enough for all state change.\n\n2. Add pending_lock to protect readers/writers waiting and wake up\noperations. As waiting/wakeup is not performance critical, using a\nlock is easier to maintain.\n\n3. Add writer preference option.\n\n4. Add unit tests for rwlock.\n\nBug: 19109156\n\nChange-Id: Idcaa58d695ea401d64445610b465ac5cff23ec7c\n"
    },
    {
      "commit": "6170693e28dd72a1517c267f3f62b3f37477b8bb",
      "tree": "f7cf73e397d83074a6da0b6cce4459b51af334cf",
      "parents": [
        "611fd2cc91f79be6759f6e630e1e81998326dfe8"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Mar 31 10:56:58 2015 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Mar 31 10:56:58 2015 -0700"
      },
      "message": "Make ThreadLocalBuffer a class rather than a macro.\n\nBug: 19995392\nChange-Id: I497c512648fbe66257da3fb3bcd5c9911f983705\n"
    },
    {
      "commit": "995b813e91a5eb67a970b9f076911873bdf5dbc4",
      "tree": "4cfd804670c9799cf8238bd10119320a7f8066e6",
      "parents": [
        "81c31bdd43e50538fa45f5e7783782a5ae5666e9"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Fri Mar 13 17:43:52 2015 -0700"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Fri Mar 13 23:57:15 2015 -0700"
      },
      "message": "For libm, use a macro for aliasing symbols.\n\nChange-Id: Ibd42ebc387c2bf3eba9aa96091770915b4b34184\n"
    },
    {
      "commit": "f7e3b3e48ab3ffbf7bbce5102ce1739c200093cb",
      "tree": "19fe08cbb0324d67ce277d8f6594f8c126d3b3c6",
      "parents": [
        "c3307dc43b2526c4031837738b139d22831c5d09"
      ],
      "author": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Thu Mar 05 20:08:21 2015 -0800"
      },
      "committer": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Thu Mar 05 20:39:10 2015 -0800"
      },
      "message": "Use pthread_once for g_uselocale_key creation.\n\nBug: 19625804\nChange-Id: I57ec4c965067dc0c157c795c1f7217a3ca403286\n"
    },
    {
      "commit": "4a2891d8c8f09a64ea9e1479518b0cc969bd5969",
      "tree": "435435ccd995c37c0e5b27948da8addc464b558d",
      "parents": [
        "dec9501af2ee4d7cec3a163310d42e8ea1b8c58f"
      ],
      "author": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Wed Mar 04 16:53:23 2015 -0800"
      },
      "committer": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Wed Mar 04 16:53:23 2015 -0800"
      },
      "message": "Better control of pthread keys used in bionic.\n\nChange-Id: I1e1bc77c0e7879baead6c3417282ce549a1153b5\n"
    },
    {
      "commit": "e1edd301d2a722e0a0687a7a3a87081c8cb956d3",
      "tree": "5b40237fe1dfe0f19e6bf2b55733a6dd145c8bd3",
      "parents": [
        "d5c2745ca8664b987d737e4a32922b6c9fe7c628",
        "5e2bd719d7dd19afe55f8d4f24366c0230e0e6c7"
      ],
      "author": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Wed Mar 04 01:49:19 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Mar 04 01:49:20 2015 +0000"
      },
      "message": "Merge \"Refactor pthread_key.cpp to be lock-free.\""
    },
    {
      "commit": "5e2bd719d7dd19afe55f8d4f24366c0230e0e6c7",
      "tree": "14589a831046110c8cc6221cd1ee90226e899b4b",
      "parents": [
        "04bbef377b9941bf6d67d9c515b6640a314fb032"
      ],
      "author": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Fri Feb 20 16:15:33 2015 -0800"
      },
      "committer": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Tue Mar 03 15:46:53 2015 -0800"
      },
      "message": "Refactor pthread_key.cpp to be lock-free.\n\nChange-Id: I20dfb9d3cdc40eed10ea12ac34f03caaa94f7a49\n"
    },
    {
      "commit": "ce751b3536586683ad1dc9bac7e2a4fcfa9d028b",
      "tree": "2dceca02d6906287397a58570f89a30b7fe81f45",
      "parents": [
        "f8eec1e54fbfb7b0304b73cb9ce2de44760a672e"
      ],
      "author": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Thu Feb 26 13:45:06 2015 -0800"
      },
      "committer": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Thu Feb 26 13:45:06 2015 -0800"
      },
      "message": "Lose bionic_atomic stuff.\n\nBug: 17177189\nChange-Id: Ie1f5d7af359d31b14f58e53ec89c72111362d7ec\n"
    },
    {
      "commit": "4c5891d93dc151e2f07fc87ae967f23e6c3d6e0c",
      "tree": "0a18a145999730a8bcb118c2b42b4e6a8ffa15d9",
      "parents": [
        "97484d3a9d0d822aeaaa1547aeb76d7669076082"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Feb 19 22:49:44 2015 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Feb 19 22:49:44 2015 -0800"
      },
      "message": "valgrind can\u0027t find syscall because we didn\u0027t put it in \u003cunistd.h\u003e.\n\nChange-Id: I1e47291d4476bd2816138a8cf58f29d4986d39e3\n"
    },
    {
      "commit": "7874f1d7182d80eb72c699eaa9ab8cc4cfec95ab",
      "tree": "4348cc097c742280038ff78b454d6cd513cd619e",
      "parents": [
        "9dd5ab46194a3ef7992b0c08d18f2e30551f9331"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Dec 18 13:36:25 2014 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Dec 18 15:01:10 2014 -0800"
      },
      "message": "Split the shared group data from the shared passwd data.\n\nFound by the toybox id(1) which calls both getpwuid(3) and getgrgid(3) before\nlooking at either result. The use of a shared buffer in this code meant that\neven on a single thread, the data for any of the passwd functions would be\nclobbered by the data for any of the group functions (or vice versa).\n\nThis might seem like an insufficient fix, but POSIX explicitly says (for\ngetpwnam) that the result \"might be overwritten by a subsequent call to\ngetpwent(), getpwnam(), or getpwuid()\" and likewise for other members of\nthat group, plus equivalent text for the group-related functions.\n\nChange-Id: I2272f47e91f72e043fdaf7c169fa9f6978ff4370\n"
    },
    {
      "commit": "6c238f2926e69a950f0671ae5519584c20d84196",
      "tree": "a3593ca9ef0940c7518e47632c67047ad89cad40",
      "parents": [
        "6d634f9baaf804a91c97e019c832c1e9611a903a"
      ],
      "author": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Thu Dec 11 20:50:41 2014 -0800"
      },
      "committer": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Fri Dec 12 17:00:08 2014 -0800"
      },
      "message": "Fix pthread key num calculation.\n\nBug: 18723085\nChange-Id: Iba2c834b350e4cdba0b2d771b221560a3e5df952\n"
    },
    {
      "commit": "a381fe8ebcd196614a00f4dca3539e0860ef9e84",
      "tree": "3554d98520ded579dcc9ad2e5e4f36e23f3f7b5f",
      "parents": [
        "3592743f7191c69ae1fd2d7e01222bd380d93d3e"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Dec 09 20:30:23 2014 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Dec 09 20:30:23 2014 -0800"
      },
      "message": "Fix ptsname(3) and ttyname(3) to use TLS.\n\nBe safe by default.\n\nChange-Id: I6c4a3f1fd4eee3a651b3162ce95b7e873de57521\n"
    },
    {
      "commit": "75ef63d6cf83787233d1c45489c4ec03b0a67d16",
      "tree": "af1358c723e21ebfbd48a4dfd2abc3f262cb309d",
      "parents": [
        "f6640348876cd1d4d43cc95cf63306fedb83d8b9"
      ],
      "author": {
        "name": "Dan Albert",
        "email": "danalbert@google.com",
        "time": "Fri Nov 21 00:18:07 2014 -0800"
      },
      "committer": {
        "name": "Dan Albert",
        "email": "danalbert@google.com",
        "time": "Fri Nov 21 10:26:09 2014 -0800"
      },
      "message": "Move some pthread functions to signal.h.\n\nPOSIX specifies that pthread_kill(3) and pthread_sigmask(3) are\nsupposed to live in signal.h rather than pthread.h.\n\nSince signal.h now needs pthread_t and pthread_attr_t, I\u0027ve moved\nthose defintions into include/machine/pthread_types.h to keep the\nnamespace clean. I also sorted some includes. The combination of these\ntwo things seems to have exploded into a cascade of missing includes,\nso this patch also cleans up all those.\n\nChange-Id: Icfa92a39432fe83f542a797e5a113289d7e4ad0c\n"
    },
    {
      "commit": "bfbf7a4300ab5cd6334212f701e47ea449456048",
      "tree": "909f0faaaa23a394861672c95d271e8311df21d5",
      "parents": [
        "eef1eb64bb5be68bfb00f8e71d3118a2cfec99e7"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Nov 17 10:06:20 2014 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Nov 17 10:06:20 2014 -0800"
      },
      "message": "Remove remaining bionic support for TARGET_CPU_SMP being false.\n\nChange-Id: I02a0a1c0ae55ccb5c45d17fb99a09c374d71def4\n"
    },
    {
      "commit": "00bbc7f69f8b3fc2c37cc0f991a3ce03d801150f",
      "tree": "a39f3c1d1e0c347fd5fc21282d0f4dfdb14b0f32",
      "parents": [
        "1e1ae4a74e42de07a5654f6a1774786fb4652094"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Nov 10 22:04:08 2014 -0800"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Tue Nov 11 11:16:57 2014 -0800"
      },
      "message": "Bionic: Make DISALLOW_COPY_AND_ASSIGN conditional\n\nMake the definition of DISALLOW_COPY_AND_ASSIGN conditional. This is\nso that the projects that include libnativehelper and bionic macros\ndo not have to be careful in which order those projects are included.\n\nBug: 18334516\nChange-Id: Ib12a2c2b7ad2e360edcf3b26cb1be626540fadc1\n"
    },
    {
      "commit": "04303f5a8ab9a992f3671d46b6ee2171582cbd61",
      "tree": "98d3997d33e93eeb91a2c2f331b57f35c180cbb2",
      "parents": [
        "adc01348ee51a4ad678b1c277f85cbbed5c2e728"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Sep 18 16:11:59 2014 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Sep 19 17:37:06 2014 -0700"
      },
      "message": "Add semaphore tests, fix sem_destroy.\n\nBug: https://code.google.com/p/android/issues/detail?id\u003d76088\nChange-Id: I4a0561b23e90312384d40a1c804ca64ee98f4066\n"
    },
    {
      "commit": "0f001b67fea27f8d60afc4677e8970d32a4e3792",
      "tree": "208844ca4857eea0aaad56bbd0018e47201add50",
      "parents": [
        "d74aa580354037b9972524e9d654c0a336974838"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Sep 12 11:35:05 2014 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Sep 12 11:35:05 2014 -0700"
      },
      "message": "Remove \"private/bionic_pthread.h\".\n\nBug: 17476168\nChange-Id: Id642987e641de81e914a28daea4ffe9d11e090ed\n"
    },
    {
      "commit": "d9ff7226613014056c9edd79a68dc5af939107a0",
      "tree": "9866b50193d3886937a4ea13a5c3f88de7600f20",
      "parents": [
        "3c3624f3df14590e7213d35c3b39a0a11c7d2d34"
      ],
      "author": {
        "name": "Dmitriy Ivanov",
        "email": "dimitry@google.com",
        "time": "Mon Sep 08 16:22:22 2014 -0700"
      },
      "committer": {
        "name": "Dmitriy Ivanov",
        "email": "dimitry@google.com",
        "time": "Mon Sep 08 17:51:31 2014 -0700"
      },
      "message": "Refactoring: C++11 style DISABLE_ bionic marcos\n\n  Enable the -std\u003dgnu++11 flag for libstdc++ static and\n  dynamic libs.\n\n  ScopeGuard uses DISABLE_ macros instead of \u0027\u003d delete\u0027;\n\nChange-Id: I07e21b306f95fffd49345f7fa136cfdac61e0225\n"
    },
    {
      "commit": "14669a939d113214a4a20b9318fca0992d5453f0",
      "tree": "160b15f09cb7edc2da5b02e47cf3d5ce1461df97",
      "parents": [
        "320a01d51693408dad859094ca52e5f315ff1d15"
      ],
      "author": {
        "name": "Dmitriy Ivanov",
        "email": "dimitry@google.com",
        "time": "Fri Sep 05 16:42:53 2014 -0700"
      },
      "committer": {
        "name": "Dmitriy Ivanov",
        "email": "dimitry@google.com",
        "time": "Mon Sep 08 13:02:50 2014 -0700"
      },
      "message": "Load libraries in breadth-first order\n\n  This patch fixes the problem with symbol search order\n  for dlsym(RTLD_DEFAULT/RTLD_NEXT, .) by loading libraries\n  and ld_preloads in correct order.\n\nBug: https://code.google.com/p/android/issues/detail?id\u003d74255\nChange-Id: If1ba5c807322409faa914e27ecb675e2c4541f0d\nAttempt: 2\n"
    },
    {
      "commit": "498eb18b82a425f9f30132e4832f327b2ee0e545",
      "tree": "08ae8d60c8f659139aba906ccfe6df4bc85afdb5",
      "parents": [
        "b3ebfecdae05e29062bf4d0234239a54a2733ce0"
      ],
      "author": {
        "name": "Dmitriy Ivanov",
        "email": "dimitry@google.com",
        "time": "Fri Sep 05 14:57:59 2014 -0700"
      },
      "committer": {
        "name": "Dmitriy Ivanov",
        "email": "dimitry@google.com",
        "time": "Fri Sep 05 16:27:54 2014 -0700"
      },
      "message": "Revert \"Load libraries in breadth-first order\"\n\nThis reverts commit a3ad450a2e3fb6b3fe359683b247eba20896f646.\n\nChange-Id: Ia2b838ad2159c643b80c514849582f4b4f4f40e5\n"
    },
    {
      "commit": "a3ad450a2e3fb6b3fe359683b247eba20896f646",
      "tree": "46d55ca77bbe24d4834444ed21aa146bf6750e37",
      "parents": [
        "ec95a9cf11f7c4d2211c61da7ce05262a54409d1"
      ],
      "author": {
        "name": "Dmitriy Ivanov",
        "email": "dimitry@google.com",
        "time": "Tue Jul 29 14:21:45 2014 -0700"
      },
      "committer": {
        "name": "Dmitriy Ivanov",
        "email": "dimitry@google.com",
        "time": "Wed Sep 03 15:06:14 2014 -0700"
      },
      "message": "Load libraries in breadth-first order\n\n  This patch fixes the problem with symbol search order\n  for dlsym(RTLD_DEFAULT/RTLD_NEXT, .) by loading libraries\n  and ld_preloads in correct order.\n\nBug: https://code.google.com/p/android/issues/detail?id\u003d74255\nChange-Id: I4cf84c70dbaabe99310230dfda12385ae5401859\n"
    },
    {
      "commit": "57b7a6110e7e8b446fc23cce4765ff625ee0a105",
      "tree": "e2578675ae1435988a645a32182ced476f802ec5",
      "parents": [
        "a4a8c4feb8cf3cebf8aceace70e699e128095b5c"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Aug 25 17:26:50 2014 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Aug 26 10:36:38 2014 -0700"
      },
      "message": "Fix pthread_getattr_np for the main thread.\n\nOn most architectures the kernel subtracts a random offset to the stack\npointer in create_elf_tables by calling arch_align_stack before writing\nthe auxval table and so on. On all but x86 this doesn\u0027t cause a problem\nbecause the random offset is less than a page, but on x86 it\u0027s up to two\npages. This means that our old technique of rounding the stack pointer\ndoesn\u0027t work. (Our old implementation of that technique was wrong too.)\n\nIt\u0027s also incorrect to assume that the main thread\u0027s stack base and size\nare constant. Likewise to assume that the main thread has a guard page.\nThe main thread is not like other threads.\n\nThis patch switches to reading /proc/self/maps (and checking RLIMIT_STACK)\nwhenever we\u0027re asked.\n\nBug: 17111575\nSigned-off-by: Fengwei Yin \u003cfengwei.yin@intel.com\u003e\nChange-Id: I1d4dbffe7bc7bda1d353c3a295dbf68d29f63158\n"
    },
    {
      "commit": "0e7f8a9e52bac84c69aa2260d2a6356584ff3674",
      "tree": "90bd00cd1ce68652f544cec32d3db9cfa276572d",
      "parents": [
        "7134fc30892bff763e7c24ac722151e0777b5409"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Aug 20 13:11:58 2014 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Aug 20 13:11:58 2014 -0700"
      },
      "message": "Simplify _ALIGN_TEXT.\n\nBug: 16872067\nChange-Id: I2b622f252c21ce1b344c040f828ab3f4bf9b6c0a\n"
    },
    {
      "commit": "ce6b1abbb1da797e716d8ec03da4e3b6304fd11d",
      "tree": "75acb30cfbe62bf3141fd01f7a37cc53c1d82dea",
      "parents": [
        "54d24e099c24d0811ae723640d4e12e9558cab73"
      ],
      "author": {
        "name": "Dan Albert",
        "email": "danalbert@google.com",
        "time": "Mon Aug 18 14:37:42 2014 -0700"
      },
      "committer": {
        "name": "Dan Albert",
        "email": "danalbert@google.com",
        "time": "Mon Aug 18 14:37:42 2014 -0700"
      },
      "message": "Expose android_set_abort_message().\n\nRemoves the leading underscores from __android_set_abort_message() and\nmoves its declaration into a public header file.\n\nBug: 17059126\nChange-Id: I470c79db47ec783ea7a54b800f8b78ecbe7479ab\n"
    },
    {
      "commit": "f2c1e7ee78a167ff323b9f45d20532d064d6778d",
      "tree": "05484cac9bd366891a5a1e53197c07b2c27d2e6f",
      "parents": [
        "6e3823d37e54929558990d7c475bc30d381098fe"
      ],
      "author": {
        "name": "Dan Albert",
        "email": "danalbert@google.com",
        "time": "Wed Aug 13 11:25:01 2014 -0700"
      },
      "committer": {
        "name": "Dan Albert",
        "email": "danalbert@google.com",
        "time": "Wed Aug 13 11:25:01 2014 -0700"
      },
      "message": "Hide ScopedTrace.\n\nBug: 11156955\nChange-Id: I6cddc868d1c6503e30f1ffcf460f45670631d64a\n"
    },
    {
      "commit": "51a22a12ab370933a35463f5c81223132ec64dcb",
      "tree": "83033d1672090d93a22d349669bbe9159322f4e8",
      "parents": [
        "a0db46418757dd1b399acb97ff42083cc274e8ae"
      ],
      "author": {
        "name": "Dmitriy Ivanov",
        "email": "dimitry@google.com",
        "time": "Fri Aug 08 16:57:15 2014 -0700"
      },
      "committer": {
        "name": "Dmitriy Ivanov",
        "email": "dimitry@google.com",
        "time": "Mon Aug 11 09:22:48 2014 -0700"
      },
      "message": "Label pages mapped by linker_allocator\n\nChange-Id: I7e0bf29bc1a480e9be0d1ae573ca1063d90d82ff\n"
    },
    {
      "commit": "a406ee6d5f616192e9a13afad6ac6a9969814fc1",
      "tree": "bc9d1575ddacb246d49109367b6151732fbfe19e",
      "parents": [
        "337c0cefdc4667143a1f4f2c30113b452c5d188f"
      ],
      "author": {
        "name": "Brigid Smith",
        "email": "brigidsmith@google.com",
        "time": "Mon Jul 21 15:38:06 2014 -0700"
      },
      "committer": {
        "name": "Brigid Smith",
        "email": "brigidsmith@google.com",
        "time": "Mon Jul 28 19:38:08 2014 -0700"
      },
      "message": "Added a bionic systrace class and tracing to pthread_mutex.cpp.\n\nbionic_systrace.h contains an implementation of tracing that\ncan be used with systrace.py and its associated viewer.  pthread_mutex\nnow uses this tracing to track pthread_mutex contention, which can be\nenabled by using the \"bionic\" command line option to systrace.\n\nBug: 15116468\nChange-Id: I30ed5b377c91ca4c36568a0e647ddf95d4e4a61a\n"
    },
    {
      "commit": "905e6d58aaf515bf237e62078f8a321920fe4c6b",
      "tree": "07ee9fad11490db7e30bc27e359d5d1adf950cef",
      "parents": [
        "123172ae370fe51e2d1fc26fe0aafa095af52919"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Jul 25 11:55:59 2014 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Jul 25 12:03:51 2014 -0700"
      },
      "message": "Start hiding \"private/bionic_time.h\".\n\nBug: 15765976\nChange-Id: Ibd9cf07067ec8dffe9fda6c3d498d4ab90708220\n"
    },
    {
      "commit": "2b67d7dee09852789d9ac7d8972ed6cdb2c18430",
      "tree": "a9a5165ceb108943a62dd251c2aeeccd2f96ae23",
      "parents": [
        "1fb90a8aa0086f7e4f7960a5b916b8605a9a3c96"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Jul 18 15:57:41 2014 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Jul 21 14:38:16 2014 -0700"
      },
      "message": "Use upstream OpenBSD\u0027s arc4random.\n\nThe getentropy_linux.c is lightly modified to build on Android, but we\u0027re now\ncompletely in sync with upstream OpenBSD\u0027s arc4random implementation.\n\nChange-Id: If32229fc28aba908035fb38703190d41ddcabc95\n"
    },
    {
      "commit": "d7453860a6b06e7d4a960c20792ce6f0b6cc5f3a",
      "tree": "eb16bdf461a93257bf1f16a7e7eabb36f52a4e46",
      "parents": [
        "43363ab7202a935e12cf6a38d32a48433bdc3705"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Jul 17 14:26:33 2014 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Jul 17 14:26:33 2014 -0700"
      },
      "message": "Remove non-standard prctl constants from \u003csys/prctl.h\u003e.\n\nAlso remove __bionic_name_mem which has exactly one caller, and is only\never expected to be used in this one place.\n\nChange-Id: I833744f91e887639f5b2d1269f966ee9032af207\n"
    },
    {
      "commit": "27047faf283cb9d3d025a984cd9934fd2c404407",
      "tree": "d54a48f6fbfa2beb35823089794e0fd04bde8eeb",
      "parents": [
        "5656a0c4943a9b14baa4fc135980f91591723156"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Mon Jul 14 18:47:23 2014 -0700"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Tue Jul 15 12:33:48 2014 -0700"
      },
      "message": "Fix BIONIC_ROUND_UP_POWER_OF_2 for 64 bit.\n\nThere were two bugs here:\n\n- For 64 bit values, this did not properly round up.\n- The macro rounded to the power of 2 less than value, not to the power\n  of 2 greater than value.\n\nChange-Id: If8cb41536a9d2f5c1bc213676f1e67a7903a36b0\n"
    },
    {
      "commit": "a167eef5482d4a89d4277ec74f57adbe38052813",
      "tree": "53cfbccf1f41116a46996951eb08b6f00fb1fd09",
      "parents": [
        "673bff01aed0c08991b98841ed0bfad78a589672"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Jul 14 14:41:47 2014 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Jul 14 15:13:30 2014 -0700"
      },
      "message": "Fix visibility for a bunch more symbols.\n\nBug: 11156955\nBug: 15291317\nChange-Id: I664f25cce7c17085a101d6593d8e01525a1f6a90\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": "91570ce987ef93f9ba2fa663a5fee1bd2525a2ba",
      "tree": "6d79ac1618f8415982041faf046378f8b684a12e",
      "parents": [
        "f0f8cd1ff3e7f7124cab8a687370b51df4ec93de"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Jul 10 12:34:23 2014 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Jul 10 12:34:23 2014 -0700"
      },
      "message": "Slim down static binaries by avoiding stdio.\n\nIt\u0027s okay for a program to choose to drag in stdio, but it\u0027s unfortunate\nif even the minimal \"int main() { return 42; }\" drags in stdio...\n\nThis brings the minimal static binary on ARM down from 78KiB to 46KiB.\n\nGiven that we don\u0027t have a separate -lpthread it\u0027s not obvious to me that\nwe can shave this down any further. I\u0027m not sure whether this is a worthwhile\nchange for that reason. (And the fact that dynamic binaries, the usual case,\nare unaffected either way.)\n\nChange-Id: I02f91dcff37d14354314a30b72fed2563f431c88\n"
    },
    {
      "commit": "04dc91ae763adc403a14c88b4c46f77b3d2d71a3",
      "tree": "aa8c5774929f43e2a13e308f93df4c65744f777d",
      "parents": [
        "4d299a2cf7880789e658f427196d1ca9fe02a9bc"
      ],
      "author": {
        "name": "Dmitriy Ivanov",
        "email": "dimitry@google.com",
        "time": "Tue Jul 01 14:10:16 2014 -0700"
      },
      "committer": {
        "name": "Dmitriy Ivanov",
        "email": "dimitry@google.com",
        "time": "Wed Jul 02 13:20:47 2014 -0700"
      },
      "message": "Load library using file handle.\n\n * This patch enables dlopen by file descriptor\n   instead of path/name.\n\nBug: 15984217\nChange-Id: Ib39051e00567fb97070bf96d8ce63993877c0a01\n"
    },
    {
      "commit": "0468feb28696751efcddada8de69a622afffdba8",
      "tree": "9d91e7e644011100dafa93d0d1c706e631c81a11",
      "parents": [
        "fb0a3622f79bb0a31dd4d0e2f9cea990075ef129"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Jun 20 22:49:20 2014 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Jun 24 14:13:48 2014 -0700"
      },
      "message": "Sync to current upstream arc4random.\n\nThis is actually revision 1.33, which is no longer the latest, but it\u0027s\nas close to head as we can currently reasonably get. I\u0027ve also switched\nto the OpenBSD getentropy_linux.c implementation of getentropy, lightly\nmodified to try to report an error on failure.\n\nBug: 14499627\nChange-Id: Ia7c561184b1f366c9bf66f248aa60f0d53535fcb\n"
    },
    {
      "commit": "d10db8261949e4d84b65f5c369153d0ca86ab22c",
      "tree": "f3ec0b9a4e08a39492c86e49f17f1ba192b6182f",
      "parents": [
        "29e3a0e312b7a76b91adfd77a399a390ffaed11d"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Jun 19 14:49:30 2014 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Jun 19 14:49:30 2014 -0700"
      },
      "message": "Build tzcode with hidden visibility.\n\nBug: 11156955\nChange-Id: Ib98d837b56cbbdfd01687cb3054fe3103eec0da9\n"
    },
    {
      "commit": "03eebcb6e8762e668a0d3af6bb303cccb88c5b81",
      "tree": "3c5053d90eb3d1fac8c21fa390367a911e188191",
      "parents": [
        "64dfbd242cddc3ef95576e27e3940d68b89b5fce"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Fri Jun 13 13:57:51 2014 -0700"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Wed Jun 18 14:23:46 2014 -0700"
      },
      "message": "Move common macros into bionic_macros.h.\n\nBug: 15590152\nChange-Id: I730636613ef3653f68c5ab1d43b53beaf8e0dc25\n"
    },
    {
      "commit": "636196438180fd37027bf7b7119a436169b6923e",
      "tree": "cc42614ca2440bbb1b64f191d5c2eefff038e2de",
      "parents": [
        "a217a0cdb3ff78f6b59d64fd4356f87643ad9d1e"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Mon Jun 16 23:35:53 2014 -0700"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Mon Jun 16 23:35:53 2014 -0700"
      },
      "message": "Use a separate config.h for config like defines.\n\nThis allows an easier way to share config parameters between unit tests\nand the bionic code.\n\nIt also fixes a problem where the 32 bit bionic tests based on glibc, or\nthe cts list executable did not have the pvalloc,valloc tests.\n\nChange-Id: Ib47942cb8a278252faa7498a6ef23e9578db544f\n"
    },
    {
      "commit": "7a7f9952c12b216fbf91fc4cdbb97045e8861115",
      "tree": "eeb9b78c9f548f65e913a9e2d184590b35cb3e42",
      "parents": [
        "831405b749d15a11fb947a40d61fd858e952d860"
      ],
      "author": {
        "name": "Dan Albert",
        "email": "danalbert@google.com",
        "time": "Mon Jun 02 11:33:04 2014 -0700"
      },
      "committer": {
        "name": "Dan Albert",
        "email": "danalbert@google.com",
        "time": "Wed Jun 04 08:39:24 2014 -0700"
      },
      "message": "Adds functionality specified by uchar.h\n\nmbrtoc32 and c32rtomb get their implementations from mbrtowc and wcrtomb. The\nwc functions now simply call the c32 functions.\n\nBug: 14646575\nChange-Id: I49d4b95fed0f9d790260c996c4d0f8bfd1686324\n"
    },
    {
      "commit": "1ee46520caa1a2a47c69d58f49f4042194ec0339",
      "tree": "80039e92c5e311d9d7d4317250a52e2353bbdf19",
      "parents": [
        "ef023873e2bbd83f4fde69fd427e04ef1eb6e769"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu May 29 10:27:55 2014 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu May 29 10:27:55 2014 -0700"
      },
      "message": "Return the actual success result from __futex.\n\nfutex(2) can return non-zero successes.\n\nBug: 15195455\nChange-Id: I7818bc922a5a2df31228ff72c169320b5e69a544\n"
    },
    {
      "commit": "b30aff405a220495941f1673b0a5e66c4fa8b84c",
      "tree": "3bf667c009cf468c040ccaae6e81d468b4fd0254",
      "parents": [
        "52f74322b1d72d57146107f32ee2c76c421bf4b1"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed May 28 19:35:33 2014 +0000"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed May 28 18:31:15 2014 -0700"
      },
      "message": "Revert \"Revert \"Lose the hand-written futex assembler.\"\"\n\nThe problem with the original patch was that using syscall(3) means that\nerrno can be set, but pthread_create(3) was abusing the TLS errno slot as\na pthread_mutex_t for the thread startup handshake.\n\nThere was also a mistake in the check for syscall failures --- it should\nhave checked against -1 instead of 0 (not just because that\u0027s the default\nidiom, but also here because futex(2) can legitimately return values \u003e 0).\n\nThis patch stops abusing the TLS errno slot and adds a pthread_mutex_t to\npthread_internal_t instead. (Note that for LP64 sizeof(pthread_mutex_t) \u003e\nsizeof(uintptr_t), so we could potentially clobber other TLS slots too.)\n\nI\u0027ve also rewritten the LP32 compatibility stubs to directly reuse the\ncode from the .h file.\n\nThis reverts commit 75c55ff84ebfa686c7ae2cc8ee431c6a33bd46b4.\n\nBug: 15195455\nChange-Id: I6ffb13e5cf6a35d8f59f692d94192aae9ab4593d\n"
    },
    {
      "commit": "75c55ff84ebfa686c7ae2cc8ee431c6a33bd46b4",
      "tree": "17a0bb533344ff11f7401dba76d950b71c7bd1b1",
      "parents": [
        "ced906c849704f379d7191822f6d74993d4fa296"
      ],
      "author": {
        "name": "Narayan Kamath",
        "email": "narayan@google.com",
        "time": "Wed May 28 18:02:33 2014 +0000"
      },
      "committer": {
        "name": "Narayan Kamath",
        "email": "narayan@google.com",
        "time": "Wed May 28 18:03:01 2014 +0000"
      },
      "message": "Revert \"Lose the hand-written futex assembler.\"\n\nThis reverts commit ced906c849704f379d7191822f6d74993d4fa296.\n\nCauses issues on art / dalvik due to a broken return value\ncheck and other undiagnosed issues.\n\nbug: 15195455\n\nChange-Id: I5d6bbb389ecefb0e33a5237421a9d56d32a9317c"
    },
    {
      "commit": "ced906c849704f379d7191822f6d74993d4fa296",
      "tree": "3bac511fef3da9b482019edced149a849a541fbc",
      "parents": [
        "ea7dc32080114af59789c119ca6aa4814426ea42"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu May 22 19:49:11 2014 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu May 22 19:49:11 2014 -0700"
      },
      "message": "Lose the hand-written futex assembler.\n\nAlso stop exporting \u0027futex\u0027.\n\nBug: 12250341\nChange-Id: Icc4fa4296cd04dfe0d1061822c69e2eb40c3433a\n"
    },
    {
      "commit": "d5ed63a6a8290de88802172ce178656fbafe70c6",
      "tree": "97bb7a00c975041f6e297fe7ff53a8b116f405bf",
      "parents": [
        "f97d8713a265f44279819ba6b245dd81aada34da"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed May 21 18:27:40 2014 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed May 21 18:30:00 2014 -0700"
      },
      "message": "Hide most of the private futex functions.\n\nAlso hide part of the system properties compatibility code, since\nwe needed to touch that to keep it building.\n\nI\u0027ll remove __futex_syscall4 and futex in a later patch.\n\nBug: 11156955\nChange-Id: Ibbf42414c5bb07fb9f1c4a169922844778e4eeae\n"
    },
    {
      "commit": "72bbd423579bb971dc06cdd3c06201faf3fe95e6",
      "tree": "222c460d45ac120ae45940628c501d6cfb50f84b",
      "parents": [
        "afb89c2a01089bb247456634a15a58f111bb55a6"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Thu May 08 11:14:03 2014 -0700"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Tue May 20 14:47:33 2014 -0700"
      },
      "message": "Support for jemalloc to replace dlmalloc.\n\nTo use jemalloc, add MALLOC_IMPL \u003d jemalloc in a board config file\nand you get the new version automatically.\n\nUpdate the pthread_create_key tests since jemalloc uses a few keys.\nAdd a new test to verify memalign works as expected.\n\nBug: 981363\n\nChange-Id: I16eb152b291a95bd2499e90492fc6b4bd7053836\n"
    },
    {
      "commit": "903b78873a744d3fba187e4bd22008ba21162e51",
      "tree": "54927c30d730513d9cfa817448b3184a6b6531ee",
      "parents": [
        "172ab0f65035013565ec57f52ece663082683698"
      ],
      "author": {
        "name": "Sreeram Ramachandran",
        "email": "sreeram@google.com",
        "time": "Mon May 19 13:39:57 2014 -0700"
      },
      "committer": {
        "name": "Sreeram Ramachandran",
        "email": "sreeram@google.com",
        "time": "Mon May 19 15:19:16 2014 -0700"
      },
      "message": "Mark sockets on creation (socket()) and accept4().\n\nRemove the separate syscall for accept() and implement it as accept4(..., 0).\n\nChange-Id: Ib0b8f5d7c5013b91eae6bbc3847852eb355c7714\n"
    },
    {
      "commit": "5240b562e7e9de2f31ba70f71c394c5529aadf0f",
      "tree": "e888add2a6eeee5516f05648f9baa686791a18d3",
      "parents": [
        "308c30af72da7b13938934ba5037dd347b1ef139"
      ],
      "author": {
        "name": "Paul Jensen",
        "email": "pauljensen@google.com",
        "time": "Thu May 15 14:43:07 2014 -0400"
      },
      "committer": {
        "name": "Sreeram Ramachandran",
        "email": "sreeram@google.com",
        "time": "Mon May 19 12:49:52 2014 -0700"
      },
      "message": "Query libnetd_client for the appropriate netId for host resolution.\n\nIf libnetd_client can\u0027t be found, operate as before and use the default netId\npotentially overriden by a more specific netId passed in to\nandroid_get*fornet().\n\n(cherry picked from commit 559c7842cc6862568d9b5799fc0bcf74d58b596b)\n\nChange-Id: I42ef3293172651870fb46d2de22464c4f03e8e0b\n"
    },
    {
      "commit": "72c53933f852be6d1cd6c09c86176fbc6d609dac",
      "tree": "ab9422270d7a1ba6e973e7271376bdc6ccc73063",
      "parents": [
        "6c83305c9a0c43eff407f3b4a2ff10ad0be26f01"
      ],
      "author": {
        "name": "Sreeram Ramachandran",
        "email": "sreeram@google.com",
        "time": "Sun May 18 15:18:36 2014 -0700"
      },
      "committer": {
        "name": "Sreeram Ramachandran",
        "email": "sreeram@google.com",
        "time": "Sun May 18 15:18:36 2014 -0700"
      },
      "message": "Cosmetic changes to netd client files.\n\n+ Name the dispatch header correctly (NetdClientDispatch.h).\n+ Hide the global dispatch variable (__netdClientDispatch).\n+ Explain why it\u0027s okay to read the variable without locking.\n+ Use quotes instead of angle-brackets for non-system includes.\n+ Add necessary declarations for C compiles (and not just C++).\n\nChange-Id: Id0932165e71d81da5fce77a684f40c2263f58e61\n"
    },
    {
      "commit": "3973de9616510e423dc8d59e9a0a9d577f3d1a06",
      "tree": "127288c1dba074d3e5db7e863dc28dc22cc57ea8",
      "parents": [
        "22ade3c30d83407d19cd3a2b49ead66e6c5e3cf0"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri May 16 12:53:31 2014 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri May 16 12:53:31 2014 -0700"
      },
      "message": "Hide __futex_wake_ex and __futex_wait_ex.\n\nAlso remove some cruft that isn\u0027t needed now we\u0027re using uapi headers.\n\nBug: 11156955\nChange-Id: I936b9c5b01d8bd6bfb2e5bc0e3f86cd86739cc04\n"
    },
    {
      "commit": "8f0cd8aa22906c3e678738eeba20fc1a5c399b6c",
      "tree": "38bbf429b63d34d1d339bcd02689e81f744ef53a",
      "parents": [
        "15c13bd6cc0ce44d8f083f75d0bfa926a88cc169"
      ],
      "author": {
        "name": "Sreeram Ramachandran",
        "email": "sreeram@google.com",
        "time": "Tue May 13 15:40:26 2014 -0700"
      },
      "committer": {
        "name": "Sreeram Ramachandran",
        "email": "sreeram@google.com",
        "time": "Wed May 14 11:10:22 2014 -0700"
      },
      "message": "Mark sockets on accept().\n\n(cherry picked from commit 58b1f3f6a30a660ad81637c2b50382c3d279243b)\n\nChange-Id: I5d09be413cf720fbed905f96313b007997ada76c\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": "8eac9af24ea7e570e0b297bcd6ac8a46ba3ecc39",
      "tree": "d69e6b95bccca6e095b5e320198c552c9ee0e398",
      "parents": [
        "b2c3c803f0f4a50acfdc31eb28bd83b48a0026fe"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri May 09 19:12:08 2014 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri May 09 19:12:08 2014 -0700"
      },
      "message": "Bring in google3-style DISALLOW_* macros.\n\nI\u0027ve been meaning to do this for a very long time...\n\nChange-Id: Ia8c16eee7c026c3c9505399948485fb778fb0152\n"
    },
    {
      "commit": "ae0a62b014ece4bb9a0f8872738f58e7aec8378d",
      "tree": "58fcd6b42675f2bb04a306d645686a25577c179d",
      "parents": [
        "1ee18d0eb047edda23987c28bc78b8f7e4c2db0a"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed May 07 17:12:40 2014 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed May 07 17:12:40 2014 -0700"
      },
      "message": "Fix LOG_ID_CRASH build failure.\n\nChange-Id: I66517e30c568d7f36f6bf6b1e4507ecf14f01226\n"
    },
    {
      "commit": "c78368f04faa4ee17f546985809e7550f3f88636",
      "tree": "837ebe14bbb4a6f54e192a0b941d17e3cdc94b5c",
      "parents": [
        "e05df25145eda8ca59db5eb03cf5dbf8c7714870"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue May 06 20:37:22 2014 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue May 06 20:37:22 2014 -0700"
      },
      "message": "Change the interface for fatal logging.\n\nThis more general interface lets liblog give us any fatal log message,\nregardless of source. This means we can remove the special case for\nLOG_ALWAYS_FATAL with a simpler scheme that automatically works for\nthe VM too.\n\nChange-Id: Ia6dbf7c3dbabf223081bd5159294835d954bb067\n"
    },
    {
      "commit": "2e3b7108b5b3d3f3a4a0fb369016e854bcf92212",
      "tree": "9c44095aed267fa12c51c2e8189e8cfc2a7ea542",
      "parents": [
        "3b0433f34fed755c28a92d46eab88729694b8055"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Apr 23 14:52:49 2014 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Apr 23 14:52:49 2014 -0700"
      },
      "message": "Allow liblog to pass failure reasons to debuggerd.\n\nassert(3) already does this, but LOG_ALWAYS_FATAL and LOG_ALWAYS_FATAL_IF\nhave been missing out.\n\nChange-Id: I1d6214c4f792fa0d4ba3c14eded3fc9c332bd3c5\n"
    },
    {
      "commit": "2f68866f371faa8ef727fc91e59e1e93326a3949",
      "tree": "cee363e70470c5aeef3b30b5a6f359469df090f1",
      "parents": [
        "b88da06580a22d9a1ee5a1c573c49e89207bc71b"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Apr 18 13:34:26 2014 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Apr 18 13:34:26 2014 -0700"
      },
      "message": "Make uselocale(3) claim its pthread key in an ELF constructor.\n\npthread_once is nice for decoupling, but it makes resource availability less\npredictable, which is a bad thing.\n\nThis fixes a test failure if uselocale(3) is called before\npthread.pthread_key_create_lots runs.\n\nChange-Id: Ie2634f986a50e7965582d4bd6e5aaf48cf0d55c8\n"
    },
    {
      "commit": "950a58e24d1019eb9d814dbb16f111a6b61e3f23",
      "tree": "5a91099e0ce1b9d552e7210fb914ba8d4d5ddb10",
      "parents": [
        "5f149f1bdef31d198c0e84fd8c904204d263e825"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Fri Apr 04 14:38:18 2014 -0700"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Mon Apr 07 16:41:53 2014 -0700"
      },
      "message": "Add stpcpy/stpncpy.\n\nAdd tests for the above.\n\nAdd the fortify implementations of __stpcpy_chk and __stpncpy_chk.\n\nModify the strncpy test to cover more cases and use this template for\nstpncpy.\n\nAdd all of the fortify test cases.\n\nBug: 13746695\nChange-Id: I8c0f0d4991a878b8e8734fff12c8b73b07fdd344\n"
    },
    {
      "commit": "f2cea021ab2c6d7d7feeb40cca098aa132605876",
      "tree": "119daf06820264a62bf3290bbbf8839dcb0196e3",
      "parents": [
        "6ece7fc33a389ef9bcbe78a83a6633e4cb4e4743"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Mar 13 14:54:53 2014 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Mar 13 14:54:53 2014 -0700"
      },
      "message": "Clean up \u003cstdio.h\u003e macros.\n\nAlso neuter __isthreaded.\n\nWe should come back to try to hide struct FILE\u0027s internals for LP64.\n\nBug: 3453512\nBug: 3453550\nChange-Id: I7e115329fb4579246a72fea367b9fc8cb6055d18\n"
    },
    {
      "commit": "569fb9887d00104509df79fa77d92e3cf9afe7db",
      "tree": "cd7018947017406a878b22a25481969217985664",
      "parents": [
        "4a46a68942d180e28c3e87f08359351245b220b7"
      ],
      "author": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Tue Mar 04 15:01:29 2014 +0000"
      },
      "committer": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Tue Mar 04 15:07:07 2014 +0000"
      },
      "message": "Moved nameser.h and namser_compat.h to public include dir\n\nThis is part of the upstream sync (Net/Open/Free BSDs expose the\nnameser.h in their public headers).\n\nChange-Id: Ib063d4e50586748cc70201a8296cd90d2e48bbcf\n"
    },
    {
      "commit": "cecc036970fba8b319cca302768865677f2be094",
      "tree": "6359a4a308c5299571569eb47a9ee40cf3c90f3d",
      "parents": [
        "bd33537fde8e1c68fcadfd6adf77b295ada9b45f"
      ],
      "author": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Mon Mar 03 11:44:48 2014 +0000"
      },
      "committer": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Mon Mar 03 20:40:41 2014 +0000"
      },
      "message": "Moved private dns header to their own dir.\n\nBug: 13219633\nChange-Id: I3435ef7564b9ad3c7b54188a0809440993b36c9e\n"
    },
    {
      "commit": "0336e35368aa161f1fed04ccde39553db4740b97",
      "tree": "695110f21adb248648f6c2d850c8abb2d6800564",
      "parents": [
        "27c7dbeee6c5e0cee488ce5085cc0b8c5e0301bd"
      ],
      "author": {
        "name": "Mark Salyzyn",
        "email": "salyzyn@google.com",
        "time": "Fri Nov 08 06:58:01 2013 -0800"
      },
      "committer": {
        "name": "Mark Salyzyn",
        "email": "salyzyn@google.com",
        "time": "Wed Feb 26 15:33:13 2014 -0800"
      },
      "message": "libc: Make calls to new user-space logger\n\n* libc (fatal) logging now makes socket connection to the\n  user-space logging service.\n* Add a TARGET_USES_LOGD make flag for BoardConfig.mk to manage\n  whether logd is enabled for use or not.\n\nChange-Id: I96ab598c76d6eec86f9d0bc81094c1fb3fb0d9b4\n"
    },
    {
      "commit": "851e68a2402fa414544e66650e09dfdaac813e51",
      "tree": "baec353c8e9b6f24e885459b20a8748fc5c39468",
      "parents": [
        "22c6b7ffd36fe8b34b677eea94d00aef2624e4e8"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Feb 19 16:53:20 2014 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Feb 20 13:51:26 2014 -0800"
      },
      "message": "Unify our assembler macros.\n\nOur \u003cmachine/asm.h\u003e files were modified from upstream, to the extent\nthat no architecture was actually using the upstream ENTRY or END macros,\nassuming that architecture even had such a macro upstream. This patch moves\neveryone to the same macros, with just a few tweaks remaining in the\n\u003cmachine/asm.h\u003e files, which no one should now use directly.\n\nI\u0027ve removed most of the unused cruft from the \u003cmachine/asm.h\u003e files, though\nthere\u0027s still rather a lot in the mips/mips64 ones.\n\nBug: 12229603\nChange-Id: I2fff287dc571ac1087abe9070362fb9420d85d6d\n"
    },
    {
      "commit": "9abbbdc5346020e33a8fdbe7254dd0fdff9df616",
      "tree": "9a4c06c1cb4b09c8c957c72e061984db2321cc40",
      "parents": [
        "e6c451f5f2e17fccccedaa1c2a90d8d9ba0c1917"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Feb 19 14:54:31 2014 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Feb 19 14:54:31 2014 -0800"
      },
      "message": "Make mips/mips64 syscall stubs more like the other architectures.\n\nChange-Id: I55f8c1a95f643a6e484f12fbcc25e2c77e55b6b8\n"
    },
    {
      "commit": "a38cb088619d3e2f2194247038c10897d1c5036e",
      "tree": "83cde27cb78ed069749b6beddb2ad5199d068214",
      "parents": [
        "d4bc9ef83b36916d5e63c4c3e4a092381473ea52"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Feb 17 12:33:16 2014 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Feb 18 12:04:54 2014 -0800"
      },
      "message": "Clean up various warnings in bionic.\n\nChange-Id: Ic57541d0a567fd4ae79f0ad59b2ffde1130eb7d2\n"
    },
    {
      "commit": "0266ae5f884d72da58f33a072e865ba131234a5e",
      "tree": "48763b706806f544b1dec0ef98261bed6f21dee2",
      "parents": [
        "eeb9a9f59a58a2f042e8f6fd1a4911ae92ac5493"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Feb 10 17:46:57 2014 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Feb 10 18:22:24 2014 -0800"
      },
      "message": "Switch \u003celf.h\u003e over to linux uapi under the covers.\n\nRemove the linker\u0027s reliance on BSD cruft and use the glibc-style\nElfW macro. (Other code too, but the linker contains the majority\nof the code that needs to work for Elf32 and Elf64.)\n\nAll platforms need dl_iterate_phdr_static, so it doesn\u0027t make sense\nto have that part of the per-architecture configuration.\n\nBug: 12476126\nChange-Id: I1d7f918f1303a392794a6cd8b3512ff56bd6e487\n"
    },
    {
      "commit": "d1973ca51325393f304e82a4d79874f33e54ac16",
      "tree": "75a657d895a41aa4855a06ef1e0e986c963e0eef",
      "parents": [
        "5b4884fac90753c68d401de73036c2de919958eb"
      ],
      "author": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Tue Jan 21 19:50:58 2014 -0800"
      },
      "committer": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Thu Jan 23 18:35:39 2014 -0800"
      },
      "message": "bionic: rename aarch64 target to arm64\n\nRename aarch64 build targets to arm64.  The gcc toolchain is still\naarch64.\n\nChange-Id: Ia92d8a50824e5329cf00fd6f4f92eae112b7f3a3\n"
    },
    {
      "commit": "b5e211031b69963a5f72ff369c66dc325a03e740",
      "tree": "4459ac3233abccfcdce9f2dc2591aeabadc16ede",
      "parents": [
        "ebc1c76d77dd604f16126e66b2171e8ee6fa1d22",
        "bf3ec9ad52a5ccaccdae843a94f964f3a7624ecd"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Jan 14 01:01:40 2014 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Jan 14 01:01:41 2014 +0000"
      },
      "message": "Merge \"AArch64: Use LDXR/STXR instead of LDAXR/STLXR for bionic_atomic_cmpxchg()\""
    },
    {
      "commit": "5b395ce071f2c96b8243926f26df3911ebb226e0",
      "tree": "11e17e25c69ba573eb8c2f23fb0e752828e7a484",
      "parents": [
        "434f97f66aa64cd082f3f62fdd6422cad3132706"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Dec 20 18:46:14 2013 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Dec 20 18:46:14 2013 -0800"
      },
      "message": "Fix MIPS build.\n\nChange-Id: Idd3bcda1803fd16b728a352d325bb070aed8fd94\n"
    },
    {
      "commit": "5eccb9646dd94438911706d3ebf52775caa7f41e",
      "tree": "65e098b6c9b6e25947f40a8466d05f87c906af5d",
      "parents": [
        "026b6ab6d5f0d8fca5cdfab05727197626769dc2"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Dec 20 16:58:06 2013 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Dec 20 16:58:06 2013 -0800"
      },
      "message": "Fix aarch64 futex assembly routines.\n\nAlso make the other architectures more similar to one another,\nuse NULL instead of 0 in calling code, and remove an unused #define.\n\nChange-Id: I52b874afb6a351c802f201a0625e484df6d093bb\n"
    },
    {
      "commit": "845c778fa6ebb3ff3feaac0c268d93f4017c0cda",
      "tree": "1c38223ae764a3cb90650a916af849f64b8a00be",
      "parents": [
        "1afb375d30cadf5dfcb5dfe352527e2a1147c79f"
      ],
      "author": {
        "name": "Serban Constantinescu",
        "email": "serban.constantinescu@arm.com",
        "time": "Thu Dec 19 11:57:10 2013 +0000"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Dec 19 11:39:01 2013 -0800"
      },
      "message": "ARM: Change dmb domain for bionic_atomic_barrier()\n\nThis patch changes the domain that the memory barrier operates on. Assumes\nthat the scope of bionic_atomic_barrier() does not include device memory,\nmemory shared with the GPU or any other memory external to the processor\ncluster.\n\nChange-Id: I291e741c98a64c86f3a3cf99811bbf1e714ac9aa\nSigned-off-by: Serban Constantinescu \u003cserban.constantinescu@arm.com\u003e\n"
    },
    {
      "commit": "bf3ec9ad52a5ccaccdae843a94f964f3a7624ecd",
      "tree": "61952ac46346f7149c5b2694b5341978262bbe74",
      "parents": [
        "81ddd14381b09f171c006ebcbba15b3c1baf2a9f"
      ],
      "author": {
        "name": "Serban Constantinescu",
        "email": "serban.constantinescu@arm.com",
        "time": "Thu Dec 19 11:46:17 2013 +0000"
      },
      "committer": {
        "name": "David Butcher",
        "email": "david.butcher@arm.com",
        "time": "Thu Dec 19 18:32:53 2013 +0000"
      },
      "message": "AArch64: Use LDXR/STXR instead of LDAXR/STLXR for bionic_atomic_cmpxchg()\n\nThe bionic_atomic_cmpxchg() API states that the cmpxchg() will be done without\nexplicit memory barriers. LDAXR/STLXR semantics involve half barriers for\nload/store.\n\nThis patch optimises cmpxchg() by using LDXR/STXR and avoiding unnecessary half\nbariers. It also fixes the clobber list for all the bionic_atomic_*() functions.\n\nChange-Id: Iae9468965785cfeeec791d52f1e8cbc524adb682\nSigned-off-by: Serban Constantinescu \u003cserban.constantinescu@arm.com\u003e\n"
    },
    {
      "commit": "e210488e0d4082b9a0c55195c22191f29ed56bf8",
      "tree": "ab72fa614dce936ac53d5db4cb99ddae3d2b76b3",
      "parents": [
        "db7180233f4c81799660011c968ebd97aaa6d4d7"
      ],
      "author": {
        "name": "Serban Constantinescu",
        "email": "serban.constantinescu@arm.com",
        "time": "Thu Sep 26 11:37:10 2013 +0100"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Dec 16 17:00:22 2013 -0800"
      },
      "message": "AArch64: Add initial support for AArch64\n\nThis is the first patch out of a series of patches that add support for\nAArch64, the new 64bit execution state of the ARMv8 Architecture. The\npatches add support for LP64 programming model.\n\nThe patch adds:\n* \"arch-aarch64\" to the architecture directories.\n* \"arch-aarch64/include\" - headers used by libc\n* \"arch-aarch64/bionic\":\n    - crtbegin, crtend support;\n    - aarch64 specific syscall stubs;\n    - setjmp, clone, vfork assembly files.\n\nChange-Id: If72b859f81928d03ad05d4ccfcb54c2f5dbf99a5\nSigned-off-by: Serban Constantinescu \u003cserban.constantinescu@arm.com\u003e\n"
    },
    {
      "commit": "1924a5c92e1791bdb6a5e9c09541a5a9a343983b",
      "tree": "0e069b3e78f42df4eda54abd28bdc2df5e6a8ced",
      "parents": [
        "3937d41561206430373c4b3e0690d6f81b536412"
      ],
      "author": {
        "name": "Serban Constantinescu",
        "email": "serban.constantinescu@arm.com",
        "time": "Tue Oct 08 19:29:55 2013 +0100"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Dec 16 13:09:33 2013 -0800"
      },
      "message": "AArch64: Add support for AArch64 atomic operations\n\nThis patch adds support for AArch64 atomic operations. Some\nof the stubs use the lightweight store/load exclusive.\n\nChange-Id: Iaf704d048b2dc15bf08cf8e4f0c3ea9f2052fe13\nSigned-off-by: Serban Constantinescu \u003cserban.constantinescu@arm.com\u003e\n"
    },
    {
      "commit": "4c186ffb837a2bd852e7983f217a945d415cefbc",
      "tree": "4df1bc7cf2b7b87a42461e39d43e03f73aecdfbe",
      "parents": [
        "341b55a1e675396829aeb56a8771855d5ee6e18d"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Dec 16 13:02:49 2013 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Dec 16 13:02:49 2013 -0800"
      },
      "message": "Fix typo.\n\nChange-Id: I85157a6b2056b6c17cae193200960b8cae3cb3b3\n"
    },
    {
      "commit": "2b333b97a241eec63d531874e28f2a894bc06aa0",
      "tree": "9952f121aace89107d0105995133fd4490e6222a",
      "parents": [
        "003be7104b5cb075632b0ff98d8ab4d3d182ed8c"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Dec 13 16:54:16 2013 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Dec 16 10:18:11 2013 -0800"
      },
      "message": "Clean up the pthread-only atomic stuff a little.\n\nIt looks like we can probably just use the generic GCC stuff instead;\nthe generated code looks pretty similar. We should come back to that.\n\nThese routines are only used by the pthread implementation, and\n__bionic_atomic_inc isn\u0027t used, so we can remove it.\n\nChange-Id: I8b5b8cb30a1b159f0e85c3675aee06ddef39b429\n"
    },
    {
      "commit": "c54ca40aef48009e7b0e5b2b3069aad62ffd3453",
      "tree": "19284d085959218931f4fe5e3ea71e2f8e8d1ad3",
      "parents": [
        "8623bf7b4da802ee56618f575e92290499011df9"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Dec 13 12:17:13 2013 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Dec 13 14:02:30 2013 -0800"
      },
      "message": "Clean up some ARMv4/ARMv5 cruft.\n\nChange-Id: I29e836fea4b53901e29f96c6888869c35f6726be\n"
    },
    {
      "commit": "1887621de8a48eece8a05f2400ddd783b9833147",
      "tree": "73707f9768954e6d68f077febc4f442e2010609e",
      "parents": [
        "38fcbbb35a40c46e96b4df10d670d1c132910854"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Dec 12 11:02:41 2013 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Dec 12 12:51:08 2013 -0800"
      },
      "message": "PTHREAD_KEYS_MAX cleanup.\n\nI fixed this bug a while back, but didn\u0027t remove it from the list,\ncould have added a better test, and could have written clearer code\nthat didn\u0027t require a comment.\n\nChange-Id: Iebdf0f9a54537a7d5cbca254a5967b1543061f3d\n"
    },
    {
      "commit": "f00c938c7f5887981d724bf2dd9989ee0af08332",
      "tree": "215f86cc9ce1b1ed167d925419122327d3ffaa3e",
      "parents": [
        "a626e4d8bc3d59cc328942fc30ffc04981b154ed",
        "811b0cdb2d6e4a697dbc63a678712759dd0db242"
      ],
      "author": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Fri Nov 22 11:08:12 2013 -0800"
      },
      "committer": {
        "name": "Conley Owens",
        "email": "cco3@android.com",
        "time": "Fri Nov 22 13:38:33 2013 -0800"
      },
      "message": "Merge commit \u0027811b0cdb2d6e4a697dbc63a678712759dd0db242\u0027 into HEAD\n\nChange-Id: I786944f80fb1a2d502fed51dc2c391ed5db66761\n"
    },
    {
      "commit": "877ec6d90418ff1d6597147d355a2229fdffae7e",
      "tree": "e475221a7fbff1564ad37548e920333c49cc5873",
      "parents": [
        "f246c589d66e5dc0e3cddc3c37261fb0e3fc67e9"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Nov 15 17:40:18 2013 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Nov 18 19:48:11 2013 -0800"
      },
      "message": "Fix pthread_join.\n\nLet the kernel keep pthread_internal_t::tid updated, including\nacross forks and for the main thread. This then lets us fix\npthread_join to only return after the thread has really exited.\n\nAlso fix the thread attributes of the main thread so we don\u0027t\nunmap the main thread\u0027s stack (which is really owned by the\ndynamic linker and contains things like environment variables),\nwhich fixes crashes when joining with an exited main thread\nand also fixes problems reported publicly with accessing environment\nvariables after the main thread exits (for which I\u0027ve added a new\nunit test).\n\nIn passing I also fixed a bug where if the clone(2) inside\npthread_create(3) fails, we\u0027d unmap the child\u0027s stack and TLS (which\ncontains the mutex) and then try to unlock the mutex. Boom! It wasn\u0027t\nuntil after I\u0027d uploaded the fix for this that I came across a new\npublic bug reporting this exact failure.\n\nBug: 8206355\nBug: 11693195\nBug: https://code.google.com/p/android/issues/detail?id\u003d57421\nBug: https://code.google.com/p/android/issues/detail?id\u003d62392\nChange-Id: I2af9cf6e8ae510a67256ad93cad891794ed0580b\n"
    },
    {
      "commit": "70b24b1cc2a1a4436b1fea3f8b76616fdcb27224",
      "tree": "70c8e04ccd256eaeda3c7e516776f4c9bca25628",
      "parents": [
        "05ec00bf62ac168c9787a3d0640879ab3e502fe5"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Nov 15 11:51:07 2013 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Nov 15 14:41:19 2013 -0800"
      },
      "message": "Switch pthread_create over to __bionic_clone.\n\nBug: 8206355\nBug: 11693195\nChange-Id: I04aadbc36c87e1b7e33324b9a930a1e441fbfed6\n"
    },
    {
      "commit": "ed74484dcbc2e156a6e5fa861a62425b12e55128",
      "tree": "d41520a7d4f893cef86ab650b23e400e30351446",
      "parents": [
        "a034e1d3e06207f079e814101bb3bce1924264e0"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Nov 07 10:31:05 2013 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Nov 07 10:31:05 2013 -0800"
      },
      "message": "Stop using the non-uapi \u003clinux/err.h\u003e header file.\n\nWe only need it for MAX_ERRNO, and it\u0027s time we had somewhere to put\nthe little assembler utility macros we\u0027ve been putting off writing.\n\nChange-Id: I9354d2e0dc47c689296a34b5b229fc9ba75f1a83\n"
    },
    {
      "commit": "c3f114037dbf028896310609fd28cf2b3da99c4d",
      "tree": "e463aeb3604177cd93cea8a58936a8dce4b34ee5",
      "parents": [
        "d0d0b52da375bfa85947a4257198791f615f18a8"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Oct 30 14:40:09 2013 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Oct 31 12:31:16 2013 -0700"
      },
      "message": "\u003cpthread.h\u003e fixes and pthread cleanup.\n\n\u003cpthread.h\u003e was missing nonnull attributes, noreturn on pthread_exit,\nand had incorrect cv qualifiers for several standard functions.\n\nI\u0027ve also marked the non-standard stuff (where I count glibc rather\nthan POSIX as \"standard\") so we can revisit this cruft for LP64 and\ntry to ensure we\u0027re compatible with glibc.\n\nI\u0027ve also broken out the pthread_cond* functions into a new file.\n\nI\u0027ve made the remaining pthread files (plus ptrace) part of the bionic code\nand fixed all the warnings.\n\nI\u0027ve added a few more smoke tests for chunks of untested pthread functionality.\n\nWe no longer need the libc_static_common_src_files hack for any of the\npthread implementation because we long since stripped out the rest of\nthe armv5 support, and this hack was just to ensure that __get_tls in libc.a\nwent via the kernel if necessary.\n\nThis patch also finishes the job of breaking up the pthread.c monolith, and\nadds a handful of new tests.\n\nChange-Id: Idc0ae7f5d8aa65989598acd4c01a874fe21582c7\n"
    },
    {
      "commit": "11952073af22568bba0b661f7a9d4402c443a888",
      "tree": "c4ae77a40e8e309219cd4ab993a39d92f3d13e50",
      "parents": [
        "cdac5f73aca015287d1f40ff50d4fbf293a0c549"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Oct 24 15:15:14 2013 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Oct 24 15:48:32 2013 -0700"
      },
      "message": "Remove dependencies on obsolete __ARCH_WANT_SYSCALL_DEPRECATED system calls.\n\n(aarch64 kernels don\u0027t have these system calls.)\n\nChange-Id: I6f64075aa412f71520f2df71c3d69b647f91c1ca\n"
    },
    {
      "commit": "1cdc9fe6d58b477385de0f60725a355de2151706",
      "tree": "b0986b5ce1ab9a9b217871128ada513aede4c89c",
      "parents": [
        "45e3076cdc03efe7d37178fbd4366d5632d50cba",
        "8826ba8ab6922927bdac2466d2903916d5806a06"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Oct 09 16:35:46 2013 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Wed Oct 09 16:35:46 2013 -0700"
      },
      "message": "am 8826ba8a: am bc545e8a: Merge \"Fix x86_64 build, clean up intermediate libraries.\"\n\n* commit \u00278826ba8ab6922927bdac2466d2903916d5806a06\u0027:\n  Fix x86_64 build, clean up intermediate libraries.\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": "ac045c32d067d61cb48370eaa10118e827ebf586",
      "tree": "751c1f2d27f04446cf2840644ade9eaed77854f9",
      "parents": [
        "7c98d1304d4c48927027763b998e79d746dfb697",
        "f83148af74704c574ad1bf60082f2f56bcb29706"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Oct 09 13:52:56 2013 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Wed Oct 09 13:52:56 2013 -0700"
      },
      "message": "am f83148af: am 0c17099a: Merge \"Fix __errno for LP64 and clean up __get_tls.\"\n\n* commit \u0027f83148af74704c574ad1bf60082f2f56bcb29706\u0027:\n  Fix __errno for LP64 and clean up __get_tls.\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": "22678c4db9cb6e72f1b8ae3e0896cb0a98bb26e9",
      "tree": "7d47982b1ab5ae68655b3d0043c4c5c28bd93545",
      "parents": [
        "ddd8a91729fc3d917134ba6b4ccf7d01303633d5",
        "dd384c3e7bae2e55981aeadee42f5ee0049219ec"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Sun Oct 06 22:37:44 2013 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Sun Oct 06 22:37:44 2013 -0700"
      },
      "message": "am dd384c3e: am a6e9ae80: Merge \"Fix MIPS build.\"\n\n* commit \u0027dd384c3e7bae2e55981aeadee42f5ee0049219ec\u0027:\n  Fix MIPS build.\n"
    },
    {
      "commit": "21e71643351c2c296220018a20b1499ba690b8e7",
      "tree": "7d102a67d031959ab1733e58d70024443d8e061c",
      "parents": [
        "4e965d95cfe19cc7d3aefd9b8d0ad607475793fe"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Sun Oct 06 22:29:07 2013 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Sun Oct 06 22:29:17 2013 -0700"
      },
      "message": "Fix MIPS build.\n\nAlthough \u0027register\u0027 is deprecated, we need to use v1, and there\u0027s\nno way to do that through register constraints on the assembler\nfragment itself.\n\nChange-Id: Ib5b12c4c3652513d10cc61d4a4b11314ece25663\n"
    },
    {
      "commit": "ddd8a91729fc3d917134ba6b4ccf7d01303633d5",
      "tree": "0781bb52d11da1de5e061cafcc126791324ad7f4",
      "parents": [
        "51bbfd6fb20f983fb342ef260b8855d2b9ab98f8",
        "06ac96d134fe5c5f3797ef2adc9df837c45d74f3"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Sun Oct 06 21:47:25 2013 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Sun Oct 06 21:47:25 2013 -0700"
      },
      "message": "am 06ac96d1: am 4e965d95: Merge \"libc: Remove deprecated register\"\n\n* commit \u002706ac96d134fe5c5f3797ef2adc9df837c45d74f3\u0027:\n  libc: Remove deprecated register\n"
    },
    {
      "commit": "baa5874404351b606c29239606db00f8903e8ece",
      "tree": "9e9ad100f1556263f72626f53e04609526e7f949",
      "parents": [
        "5677742199456e96a5f5e006102a0bafa79747b2"
      ],
      "author": {
        "name": "synergydev",
        "email": "synergye@codefi.re",
        "time": "Sun Oct 06 12:57:51 2013 -0700"
      },
      "committer": {
        "name": "synergydev",
        "email": "synergye@codefi.re",
        "time": "Sun Oct 06 13:25:02 2013 -0700"
      },
      "message": "libc: Remove deprecated register\n\nIn c++11, register has been deprecated, and\nlibc is now built as gnu++11\n\nFrom the documentation:\nA register specifier is a hint to the implementation\nthat the variable so declared will be heavily used.\n[ Note: The hint can be ignored and in most implementations\nit will be ignored if the address of the variable is taken.\nThis use is deprecated (see D.2)\n\nChange-Id: I459dc3f5f9de63fc09eeda3bc6700f31bdf20f6f\n"
    },
    {
      "commit": "9d3b4b48d87cb1f8a2ab41d3f5c431ce50418f94",
      "tree": "74c624fc71e6b696e6d4b5c001a26d964924a81b",
      "parents": [
        "be7b6408b383f4d2ba5a696a3fc64275d11b1c14",
        "71e0b240ed980e77f736be2a27d255d64747b388"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Oct 04 09:58:23 2013 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Fri Oct 04 09:58:23 2013 -0700"
      },
      "message": "am 71e0b240: am 41ba05e2: Merge \"x86_64: Fix get_tls and statvfs\"\n\n* commit \u002771e0b240ed980e77f736be2a27d255d64747b388\u0027:\n  x86_64: Fix get_tls and statvfs\n"
    },
    {
      "commit": "1e52a54a47c00af689b7d8d503c4d69e53ae26fc",
      "tree": "46580702630f0cda815f53916360a0ef09928127",
      "parents": [
        "141029327cdc62629e248b3be1d7a58d4e9e5ba8"
      ],
      "author": {
        "name": "Pavel Chupin",
        "email": "pavel.v.chupin@intel.com",
        "time": "Fri Sep 20 18:46:42 2013 +0400"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Oct 03 17:31:50 2013 -0700"
      },
      "message": "x86_64: Fix get_tls and statvfs\n\n* bionic_tls.h - Add x86_64 version of get_tls macro;\n* statvfs.h - 64-bit kernels don\u0027t have __statfs64/__fstatfs64, applying\nworkaround;\n\nChange-Id: I20d7ddad74c7b7243866373d0142da6627c08280\nSigned-off-by: Pavel Chupin \u003cpavel.v.chupin@intel.com\u003e\n"
    },
    {
      "commit": "58413fe73561e8f230092a2b83db64e58fcb061d",
      "tree": "da6388f32853fe01404977a14d2f654637da13b8",
      "parents": [
        "6c8dc464068816986278d152a7c39d477924b360",
        "4b5a0e1ad76d76d6a8793f61e3c0902ea4628ce7"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Oct 01 10:04:29 2013 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Tue Oct 01 10:04:29 2013 -0700"
      },
      "message": "am 4b5a0e1a: am 693bd73f: Merge \"Remove 32-bit assumptions from the ELF code.\"\n\n* commit \u00274b5a0e1ad76d76d6a8793f61e3c0902ea4628ce7\u0027:\n  Remove 32-bit assumptions from the ELF code.\n"
    },
    {
      "commit": "c620059479c47a78d57086d73726c9adc2f337ad",
      "tree": "ef410fffb4d853aaf7dbfee41743c197c4985856",
      "parents": [
        "6dee3b9aeec40bb518c1a29b4462300869a03d8e"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Sep 30 18:43:46 2013 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Sep 30 18:43:46 2013 -0700"
      },
      "message": "Remove 32-bit assumptions from the ELF code.\n\nChange-Id: I2c1f3d34c33685799aade8866eec44479ff9f963\n"
    },
    {
      "commit": "a3285dc9143a8175ff82bf1074720d04bed81faa",
      "tree": "24982112f145c21008f39017e580808db6e27e5f",
      "parents": [
        "823a4e0a7eab7859611189630d7748c254981ebf",
        "8ff879a528b8876db811f5abd4dbf0640e3a0408"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Sep 19 11:46:46 2013 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Thu Sep 19 11:46:46 2013 -0700"
      },
      "message": "am 8ff879a5: am a259472c: Merge \"Fix mismatch between declaration and forward declaration\"\n\n* commit \u00278ff879a528b8876db811f5abd4dbf0640e3a0408\u0027:\n  Fix mismatch between declaration and forward declaration\n"
    },
    {
      "commit": "edad1e1558bf5a561ffb33c5bf5ca0553711e1ee",
      "tree": "7eeacc66f902057bfb0a96da342aef09d13d032c",
      "parents": [
        "8512992f50e8444c1985bbeb17c3385a58fc0fed"
      ],
      "author": {
        "name": "Bernhard Rosenkraenzer",
        "email": "Bernhard.Rosenkranzer@linaro.org",
        "time": "Wed Sep 18 23:37:00 2013 +0200"
      },
      "committer": {
        "name": "Bernhard Rosenkraenzer",
        "email": "Bernhard.Rosenkranzer@linaro.org",
        "time": "Wed Sep 18 23:40:19 2013 +0200"
      },
      "message": "Fix mismatch between declaration and forward declaration\n\nKernelArgumentBlock is defined as a class in KernelArgumentBlock.h, but\nforward declarations refer to it as a struct.\n\nWhile this is essentially the same, the mismatch causes a compiler\nwarning in clang (and may cause warnings in future versions of gcc) in\ncode that is supposed to be compiled with -Werror.\n\nChange-Id: I4ba49d364c44d0a42c276aff3a8098300dbdcdf0\nSigned-off-by: Bernhard Rosenkraenzer \u003cBernhard.Rosenkranzer@linaro.org\u003e\n"
    },
    {
      "commit": "59a13c122ebc4191583b67c846a95d690dcda5cf",
      "tree": "70d47582d6e0c4c18847e3f74649b2bca0fef5c6",
      "parents": [
        "c85e0dbb0b8d602f930cf7ae99901730c1c6a26a"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Thu Aug 01 13:13:33 2013 -0700"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Wed Aug 14 18:14:43 2013 -0700"
      },
      "message": "Optimize __memset_chk, __memcpy_chk. DO NOT MERGE.\n\nThis change creates assembler versions of __memcpy_chk/__memset_chk\nthat is implemented in the memcpy/memset assembler code. This change\navoids an extra call to memcpy/memset, instead allowing a simple fall\nthrough to occur from the chk code into the body of the real\nimplementation.\n\nTesting:\n\n- Ran the libc_test on __memcpy_chk/__memset_chk on all nexus devices.\n- Wrote a small test executable that has three calls to __memcpy_chk and\n  three calls to __memset_chk. First call dest_len is length + 1. Second\n  call dest_len is length. Third call dest_len is length - 1.\n  Verified that the first two calls pass, and the third fails. Examined\n  the logcat output on all nexus devices to verify that the fortify\n  error message was sent properly.\n- I benchmarked the new __memcpy_chk and __memset_chk on all systems. For\n  __memcpy_chk and large copies, the savings is relatively small (about 1%).\n  For small copies, the savings is large on cortex-a15/krait devices\n  (between 5% to 30%).\n  For cortex-a9 and small copies, the speed up is present, but relatively\n  small (about 3% to 5%).\n  For __memset_chk and large copies, the savings is also small (about 1%).\n  However, all processors show larger speed-ups on small copies (about 30% to\n  100%).\n\nBug: 9293744\n\nMerge from internal master.\n\n(cherry-picked from 7c860db0747f6276a6e43984d43f8fa5181ea936)\n\nChange-Id: I916ad305e4001269460ca6ebd38aaa0be8ac7f52\n"
    }
  ],
  "next": "6771b9cef635f0da98932a1f0f877a07257ca088"
}
