)]}'
{
  "log": [
    {
      "commit": "a6a3ac59243d8c95c94c3069e9332051f785c05f",
      "tree": "1a8567d1852f147f346240ac6f8187f9e9b526c3",
      "parents": [
        "3db2fc5acb4894a2cb22533b165a0de1bbafc3f6"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Jan 29 15:02:50 2013 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Jan 29 15:02:50 2013 -0800"
      },
      "message": "Use the NetBSD \u003csys/exec_elf.h\u003e.\n\nReplace a kernel header file dependency with files from NetBSD.\nThey\u0027re more complete, and ELF is ELF, whether you\u0027re on Linux or a BSD.\n\nBug: 7973611\nChange-Id: I83ee719e7efdf432ec2ddbe8be271d05b2f558d7\n"
    },
    {
      "commit": "6b8e321e610c0683062c0e8d8deabb64565c7403",
      "tree": "8840b7b04702236a2243660768bd5d691746bcbb",
      "parents": [
        "02f96b9db0242711fe1dfe0713c0c4e698561da5"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Jan 22 14:17:14 2013 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Jan 22 14:17:14 2013 -0800"
      },
      "message": "Clean up debuggerd-related logging.\n\nBug: 7291287\nChange-Id: Ia7aa386e8b75b8058d7d9e707e11b1da7dc62f00\n"
    },
    {
      "commit": "ca483765bd0dc16294b9e67dd0de5c6d53b1bfa3",
      "tree": "f3676bbac701bc026573ee833e8e9cb50478c445",
      "parents": [
        "5496bbf6a3592fd99cee6b8c20c8624c2aeea0c1",
        "1e980b6bc8315d00a07312b25486531247abd98c"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Jan 22 17:44:15 2013 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Jan 22 17:44:15 2013 +0000"
      },
      "message": "Merge \"Fix the duplication in the debugging code.\""
    },
    {
      "commit": "1e980b6bc8315d00a07312b25486531247abd98c",
      "tree": "539f2c0c63fca27d5eb6ba184d658bb0e11a32d9",
      "parents": [
        "e4ca88d9fa8757e4fb4056fcafa5bc15b406a2fd"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Jan 17 18:36:06 2013 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Jan 18 22:20:06 2013 -0800"
      },
      "message": "Fix the duplication in the debugging code.\n\nWe had two copies of the backtrace code, and two copies of the\nlibcorkscrew /proc/pid/maps code. This patch gets us down to one.\n\nWe also had hacks so we could log in the malloc debugging code.\nThis patch pulls the non-allocating \"printf\" code out of the\ndynamic linker so everyone can share.\n\nThis patch also makes the leak diagnostics easier to read, and\nmakes it possible to paste them directly into the \u0027stack\u0027 tool (by\nusing relative PCs).\n\nThis patch also fixes the stdio standard stream leak that was\ncausing a leak warning every time tf_daemon ran.\n\nBug: 7291287\nChange-Id: I66e4083ac2c5606c8d2737cb45c8ac8a32c7cfe8\n"
    },
    {
      "commit": "4df577fef74063507cba229bce352bbcf89df279",
      "tree": "11763e24578a64b6706cdfdc97df5c95ce79ac58",
      "parents": [
        "4bfaf1e5f62748b305406ff4ceebd5f4b750038c"
      ],
      "author": {
        "name": "Guang Zhu",
        "email": "guangzhu@google.com",
        "time": "Thu Jan 17 23:25:24 2013 -0800"
      },
      "committer": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Fri Jan 18 11:28:47 2013 -0800"
      },
      "message": "Revert \"Filter ANDROID_PROPERTY_WORKSPACE\"\n\nTemporarily revert the change since DNS resolution seems\nbroken right now in ping util.\n\nBug: 8029617\n\nThis reverts commit a0f64756a4a55ab48b2b5511d4e7c45583dac44b.\n"
    },
    {
      "commit": "d89ce40d8e6b4a6a8074a6fddca9570abbfa4b9d",
      "tree": "b1c1dbd1e99229de5539d76a599a6fe33714faac",
      "parents": [
        "1271cdc1c91c6ae688917bc8f4ae59d2a97b3e99"
      ],
      "author": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Wed Jan 16 16:43:15 2013 -0800"
      },
      "committer": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Wed Jan 16 16:43:58 2013 -0800"
      },
      "message": "linker: add -Wl,--exclude-libs,ALL to LDFLAGS\n\nThe linker is essentially a shared library, and incorporates\nit\u0027s own copy of libc. Even though it\u0027s unnecessary, currently\n/system/bin/linker is exporting various libc symbols (only to\napps which explicitly dlopen /system/bin/linker)\n\nAdd --exclude-libs,ALL, which tells the static linker to mark\nall of the imported libc symbols as hidden. This reduces the\nsize of /system/bin/linker from 92K to 67K with no obvious\nloss in functionality.\n\n  $ adb shell ls -l /system/bin/linker\n  -rwxrwxrwx root     root        92260 2013-01-16 16:52 linker\n\n  $ adb shell ls -l /system/bin/linker\n  -rwxrwxrwx root     root        67660 2013-01-16 16:49 linker\n\nDocumentation on exclude-libs can be found at\nhttp://sourceware.org/binutils/docs-2.21/ld/Options.html\n\nChange-Id: I4508287770e4b7a845def2e6b4af969f9c866c6a\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": "ba117e4172fe6f160bf5f4d58b37e12c08c34245",
      "tree": "5b2772abb2afe1fbbaf443ede822789160140475",
      "parents": [
        "1b34228bb289723c4ba0534eae57d0d085a3d0fa",
        "e3a49a8661125f24aec8a1453e54b3b78005e21e"
      ],
      "author": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Wed Jan 16 11:23:25 2013 -0800"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Jan 16 11:23:26 2013 -0800"
      },
      "message": "Merge \"stack protector: use AT_RANDOM\""
    },
    {
      "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": "a0f64756a4a55ab48b2b5511d4e7c45583dac44b",
      "tree": "eea5b3968df7b2e46585732f79357114c44e8bb4",
      "parents": [
        "791e26d9598a72376b8a16a5ccfb5d1ae0010965"
      ],
      "author": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Tue Jan 15 16:02:03 2013 -0800"
      },
      "committer": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Tue Jan 15 16:02:03 2013 -0800"
      },
      "message": "Filter ANDROID_PROPERTY_WORKSPACE\n\nWhen executing a setuid executable, filter out ANDROID_PROPERTY_WORKSPACE\nfrom the environment. Some applications implicitly trust the property\nspace and don\u0027t realize that it\u0027s passed by an environment variable\nwhich can be modified by the caller.\n\nChange-Id: I3e3a98941f0a1f249a2ff983ecbcfe1278aa9159\n"
    },
    {
      "commit": "99c32055cb50443f722c55914869c1f6bb941959",
      "tree": "9919075545798c33fd0a74700adbb43cce5d706a",
      "parents": [
        "48c632a381b10996ec72a53cc95b009b06785d09"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Jan 14 09:56:21 2013 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Jan 14 09:56:21 2013 -0800"
      },
      "message": "Fix my git mistake.\n\nThis was the formatting change that was supposed to be in\ncf23905a4bcc7bfdd109be5b6d69ad06877aa217.\n\nChange-Id: Ib79fa031b68f6f541f532507eb589afeaedb831f\n"
    },
    {
      "commit": "cf23905a4bcc7bfdd109be5b6d69ad06877aa217",
      "tree": "76f72d3b20ea41a0ba60daa9dd1bd7a3d3acffc1",
      "parents": [
        "2c5153b043b44e9935a334ae9b2d5a4bc5258b40"
      ],
      "author": {
        "name": "Chris Dearman",
        "email": "chris@mips.com",
        "time": "Fri Jan 11 15:32:20 2013 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Jan 14 09:30:25 2013 -0800"
      },
      "message": "[MIPS] Set DT_DEBUG dyntab entry if it is writable\n\nThis is primarily for MIPS exutables that do not have a\nDT_MIPS_RLD_MAP entry.\n\nChange-Id: I4c221d92debcfed961eeee2515123f3fb21ec8e6\nSigned-off-by: Chris Dearman \u003cchris@mips.com\u003e\n"
    },
    {
      "commit": "db492b3ca753c4ef688d0daf648294de0c89145e",
      "tree": "aed7c4b15968d65c06e2d9ac6184153e611bf2d4",
      "parents": [
        "b1b5317799a34ac9e93f568af82952e52a9e9a13"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Jan 03 15:44:03 2013 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Jan 03 15:44:03 2013 -0800"
      },
      "message": "Fix debug malloc.\n\n...which has been broken since the linker data structures went read-only.\n\nBug: 7941716\nChange-Id: If28f6bac0fcb13e371e4d85b064544f561c8d692\n"
    },
    {
      "commit": "918d776f7edf1a9c4209ada4c2401ef0ea0bf660",
      "tree": "8f2bd595ba8b8ac1b92c1df2535e65b82df2e65b",
      "parents": [
        "f6524f8bda87f7d25dad7bed7091a93f3de58728",
        "cade4c36e7c9c62db3f476a0f9cfc329bac9acb7"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Dec 21 17:46:22 2012 -0800"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Dec 21 17:46:22 2012 -0800"
      },
      "message": "Merge \"Support System.loadLibrary for libraries with transitive dependencies.\""
    },
    {
      "commit": "eababde2141c7128155200b213e45291cd876e46",
      "tree": "97afc8552a53b9902e7cb0728ac6fb59d896e59d",
      "parents": [
        "4b58214205d3d29dbdfed49964010235ef3f0403"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Dec 20 18:59:05 2012 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Dec 20 19:00:48 2012 -0800"
      },
      "message": "Fix format_number.\n\nI broke this the other day when silencing x86 gcc warnings.\n\nBug: 7904160\nChange-Id: I8e60cc1f8cbaff95248c8738d84e515413d839e4\n"
    },
    {
      "commit": "cade4c36e7c9c62db3f476a0f9cfc329bac9acb7",
      "tree": "ba27e7e4734b952421de2d7060a7a53e295a60d3",
      "parents": [
        "4b58214205d3d29dbdfed49964010235ef3f0403"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Dec 20 14:42:14 2012 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Dec 20 14:42:14 2012 -0800"
      },
      "message": "Support System.loadLibrary for libraries with transitive dependencies.\n\nAlso fix the FLAG_ERROR annoyance --- it\u0027s not helpful to cache failures.\n\nBug: 7896159\nBug: http://code.google.com/p/android/issues/detail?id\u003d34416\nBug: http://code.google.com/p/android/issues/detail?id\u003d22143\nChange-Id: I60f235edb4ea4756e1f7ce56f7739f18e8a50789\n"
    },
    {
      "commit": "45288c5ce3d2a40f1426fbeb099e3a90cd10dc20",
      "tree": "c5ff94a9262cb8ed31ad913fa1226b14b729af46",
      "parents": [
        "a4ebdcf5bd20072f9a0e48c22fff401acda43e1e"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Dec 18 18:13:19 2012 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Dec 18 18:13:19 2012 -0800"
      },
      "message": "Fix x86 dynamic linker build.\n\nChange-Id: Ia9fc6342e3d409de86dcd187c7402e8ac2ae96c8\n"
    },
    {
      "commit": "e66190d2a97a713ae4b4786e60ca3d67ab8aa192",
      "tree": "0bacac6bbb8916d803e2b6f2c991030790e0f718",
      "parents": [
        "4c4b08a32eace878e4780ee340a57c43be950159"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Dec 18 15:57:55 2012 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Dec 18 15:57:55 2012 -0800"
      },
      "message": "Check for unknown flags passed to dlopen(3).\n\nChange-Id: I56f4aab0e5a1487bc32d2c4d231e8bd15c4ac8da\n"
    },
    {
      "commit": "97b70b2bda47af46adf58dfde61050357114aa1f",
      "tree": "b9158b242f0beaacf3c9f6eb72fcc818cc812b87",
      "parents": [
        "07c0b73a7fc9214e50fc6b9a15a06aeef0506e0f",
        "20c4a3a8eee5ca8c87ae377732f541baffce1fda"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Nov 30 10:06:53 2012 -0800"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Nov 30 10:07:19 2012 -0800"
      },
      "message": "Merge \"Replace .S version of x86 crtfiles with .c version\""
    },
    {
      "commit": "20c4a3a8eee5ca8c87ae377732f541baffce1fda",
      "tree": "73b9ac8f6749da7b637f90727f5f7051bf0e36aa",
      "parents": [
        "8784709a2cfe6d32b5fff2c6b826b8d9cbf73d7b"
      ],
      "author": {
        "name": "Pavel Chupin",
        "email": "pavel.v.chupin@intel.com",
        "time": "Wed Nov 28 18:31:14 2012 +0400"
      },
      "committer": {
        "name": "Pavel Chupin",
        "email": "pavel.v.chupin@intel.com",
        "time": "Fri Nov 30 17:41:25 2012 +0400"
      },
      "message": "Replace .S version of x86 crtfiles with .c version\n\nThis patch replaces .S versions of x86 crtfiles with .c which are much\neasier to support. Some of the files are matching .c version of Arm\ncrtfiles. x86 files required some cleanup anyway and this cleanup actually\nled to matching Arm files.\n\nI didn\u0027t change anything to share the same crt*.c between x86 and Arm. I\nprefer to keep them separate for a while in case any change is required\nfor one of the arch, but it\u0027s good thing to do in the following patches.\n\nChange-Id: Ibcf033f8d15aa5b10c05c879fd4b79a64dfc70f3\nSigned-off-by: Pavel Chupin \u003cpavel.v.chupin@intel.com\u003e\n"
    },
    {
      "commit": "20a24403bc333cd92996cd43cef2e6a79c72d055",
      "tree": "051f811859b2f7de25e89562e103120854bcc9a6",
      "parents": [
        "429b05a1dfa71c6085590d60e0bdfa09beb50844"
      ],
      "author": {
        "name": "Chris Dearman",
        "email": "chris@mips.com",
        "time": "Wed Oct 31 05:39:27 2012 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Nov 26 15:43:17 2012 -0800"
      },
      "message": "Do not include \u0027\\0\u0027 when writing error messages to stderr\n\nChange-Id: I6adc806c3920e5a4ae61ca55c40613fcf338b18c\nSigned-off-by: Chris Dearman \u003cchris@mips.com\u003e\n"
    },
    {
      "commit": "8784709a2cfe6d32b5fff2c6b826b8d9cbf73d7b",
      "tree": "1add80a91e9cc5ae4d0e2435b89cbed2e6b15137",
      "parents": [
        "fe07ca04e4af6c43d068df0e23dc83431053fc22",
        "c5db969aa4a24a76fc0964f2ff89533e832b47a6"
      ],
      "author": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Mon Nov 19 10:45:18 2012 -0800"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Nov 19 10:45:18 2012 -0800"
      },
      "message": "Merge \"We should use load_bias.  This patch fixes MIPS NDK device exception test failures.\""
    },
    {
      "commit": "c5db969aa4a24a76fc0964f2ff89533e832b47a6",
      "tree": "fa672d1431b4d7a58a305c61f1cacf198c9b4ad4",
      "parents": [
        "c079dfe4153941e6da881be9a143b41a1112c2ac"
      ],
      "author": {
        "name": "Chao-Ying Fu",
        "email": "fu@mips.com",
        "time": "Thu Nov 15 02:00:17 2012 -0800"
      },
      "committer": {
        "name": "Chao-Ying Fu",
        "email": "fu@mips.com",
        "time": "Mon Nov 19 10:30:15 2012 -0800"
      },
      "message": "We should use load_bias.  This patch fixes MIPS NDK device exception test failures.\n\nChange-Id: I4b718c36666e66062c1f13e4deea1ec7a7951c54\n"
    },
    {
      "commit": "83697b8b76501cc09b3f1963485184bc7cae06ee",
      "tree": "a1e2c795cd45f1cc366f71c9e371993566bb2898",
      "parents": [
        "c079dfe4153941e6da881be9a143b41a1112c2ac"
      ],
      "author": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Thu Nov 15 15:21:43 2012 -0800"
      },
      "committer": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Thu Nov 15 15:48:19 2012 -0800"
      },
      "message": "Temporarily address gcc 4.7 breakage.\n\nChange-Id: I8ebb2d5df2f8f8aedf252c94ff69505e61ed0a74\n"
    },
    {
      "commit": "ce876bebf250d386a06ebc1145c6959e30bf413c",
      "tree": "7a91bee8cefa02ac2c59c65dad802c3ff01b9fbe",
      "parents": [
        "bc35807fc6c5f11b6d057b20250d41ebc419da62",
        "a41e6426073c57881f49bdaec46ca90a5b164401"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Nov 05 09:19:57 2012 -0800"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Mon Nov 05 09:19:57 2012 -0800"
      },
      "message": "am a41e6426: Merge \"Tone down some of the overly-verbose linker logging.\"\n\n* commit \u0027a41e6426073c57881f49bdaec46ca90a5b164401\u0027:\n  Tone down some of the overly-verbose linker logging.\n"
    },
    {
      "commit": "9c94fc9fbefe55836c1e1b949850f7726e64c118",
      "tree": "033c7cca172faadc593b7f0c1e7f0b9371e8e57b",
      "parents": [
        "9df2e000b5d56b2e529656034d684e370aa6a8d1"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Nov 05 09:11:43 2012 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Nov 05 09:11:43 2012 -0800"
      },
      "message": "Tone down some of the overly-verbose linker logging.\n\nWe don\u0027t need to see every dlopen(3)/dlsym(3) failure unless LD_DEBUG is on.\n\nChange-Id: I1edfe8b72f32ff54dd30e1acf32e20d470d5e9f7\n"
    },
    {
      "commit": "bc35807fc6c5f11b6d057b20250d41ebc419da62",
      "tree": "12aeb52f8ba41353093a0104aaf0a60e50eb9136",
      "parents": [
        "cfb47daf4eb4741ac462c7350c73ad1cf96cf83f",
        "9df2e000b5d56b2e529656034d684e370aa6a8d1"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Nov 02 13:56:00 2012 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Fri Nov 02 13:56:00 2012 -0700"
      },
      "message": "am 9df2e000: Merge \"Cleaning the linker environment as we initialize it requires less API.\"\n\n* commit \u00279df2e000b5d56b2e529656034d684e370aa6a8d1\u0027:\n  Cleaning the linker environment as we initialize it requires less API.\n"
    },
    {
      "commit": "cfb47daf4eb4741ac462c7350c73ad1cf96cf83f",
      "tree": "9e524c7ebdb759ea363fb4320f64bfebed1550dc",
      "parents": [
        "cdc5a17cef00c49086e1bfe4c3715d2ebd61addb",
        "01271b1812f2cec8aaf3c105b9f960f027b33a95"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Nov 02 13:55:59 2012 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Fri Nov 02 13:55:59 2012 -0700"
      },
      "message": "am 01271b18: Merge \"Make dynamic linker debugging always available.\"\n\n* commit \u002701271b1812f2cec8aaf3c105b9f960f027b33a95\u0027:\n  Make dynamic linker debugging always available.\n"
    },
    {
      "commit": "9df2e000b5d56b2e529656034d684e370aa6a8d1",
      "tree": "9f47d48fe012e7b8ceb0697199fcc3965a81dea1",
      "parents": [
        "01271b1812f2cec8aaf3c105b9f960f027b33a95",
        "0894b2c5d35c9c3a7483ed8faaf65fd6d9ffb00b"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Nov 02 13:47:50 2012 -0700"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Nov 02 13:47:50 2012 -0700"
      },
      "message": "Merge \"Cleaning the linker environment as we initialize it requires less API.\""
    },
    {
      "commit": "61a9ccb41eba8c35cae6e21318aca7160a402c5b",
      "tree": "45635217570d9cb83b4da14cac70beefdaa73f53",
      "parents": [
        "ed537239a94ebd11a8c262a319d81fd1f0d3f73f"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Nov 02 12:37:13 2012 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Nov 02 13:46:23 2012 -0700"
      },
      "message": "Make dynamic linker debugging always available.\n\nIf you need to build your own linker to get debugging, the debugging\nis never available when you need it.\n\nChange-Id: I5ff7e55753459d49a2990f25d9aa155e0b8602e0\n"
    },
    {
      "commit": "0894b2c5d35c9c3a7483ed8faaf65fd6d9ffb00b",
      "tree": "a5351e20ef1f0e0ca89b430d5fb2c6b45b1ba7f4",
      "parents": [
        "ed537239a94ebd11a8c262a319d81fd1f0d3f73f"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Nov 02 12:40:11 2012 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Nov 02 12:40:11 2012 -0700"
      },
      "message": "Cleaning the linker environment as we initialize it requires less API.\n\nChange-Id: I612fd699e46833a411589478564a1f859223c380\n"
    },
    {
      "commit": "cdc5a17cef00c49086e1bfe4c3715d2ebd61addb",
      "tree": "ab0c53f92f0b9c1dc34303e0e2a95688a23cbdac",
      "parents": [
        "e109930e9fd0922280e6f74b3df270093ee95fa6",
        "ed537239a94ebd11a8c262a319d81fd1f0d3f73f"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Nov 02 11:37:40 2012 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Fri Nov 02 11:37:40 2012 -0700"
      },
      "message": "am ed537239: Merge \"Adjust symbol lookup for DT_SYMBOLIC case\"\n\n* commit \u0027ed537239a94ebd11a8c262a319d81fd1f0d3f73f\u0027:\n  Adjust symbol lookup for DT_SYMBOLIC case\n"
    },
    {
      "commit": "ed537239a94ebd11a8c262a319d81fd1f0d3f73f",
      "tree": "d8ea63e3b8968216a4ab87f7f97872005b0fa707",
      "parents": [
        "dc77a22850e31eb369ec9776c13c967566bf61d0",
        "c77c434149959e135ba21d1dd8a78a408fef2489"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Nov 02 11:25:48 2012 -0700"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Nov 02 11:25:49 2012 -0700"
      },
      "message": "Merge \"Adjust symbol lookup for DT_SYMBOLIC case\""
    },
    {
      "commit": "c77c434149959e135ba21d1dd8a78a408fef2489",
      "tree": "416bcd464428bc39d772e636e2898eb46da07533",
      "parents": [
        "084be591923d3d509cea0a0f4b11b073e362d730"
      ],
      "author": {
        "name": "Pavel Chupin",
        "email": "pavel.v.chupin@intel.com",
        "time": "Wed Oct 31 13:55:51 2012 +0400"
      },
      "committer": {
        "name": "Pavel Chupin",
        "email": "pavel.v.chupin@intel.com",
        "time": "Fri Nov 02 18:34:22 2012 +0400"
      },
      "message": "Adjust symbol lookup for DT_SYMBOLIC case\n\nAccording ELF spec re. DT_SYMBOLIC:\nThis element\u0027s presence in a shared object library alters the dynamic\nlinker\u0027s symbol resolution algorithm for references within the library.\nInstead of starting a symbol search with the executable file, the\ndynamic linker starts from the shared object itself. If the shared\nobject fails to supply the referenced symbol, the dynamic linker then\nsearches the executable file and other shared objects as usual.\n\nThis change implements the last part.\n\nChange-Id: Iae95d53d455313a4306f11733941bcd3596ac85f\nSigned-off-by: Pavel Chupin \u003cpavel.v.chupin@intel.com\u003e\n"
    },
    {
      "commit": "e109930e9fd0922280e6f74b3df270093ee95fa6",
      "tree": "2e2b3ea39d42bfe668635a526b31dc9fa1b8354b",
      "parents": [
        "7f7ac8cd19f1a7fc61aa640505747dee9036fa61",
        "dc77a22850e31eb369ec9776c13c967566bf61d0"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Nov 01 23:08:27 2012 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Thu Nov 01 23:08:27 2012 -0700"
      },
      "message": "am dc77a228: Merge \"Allow dlopen(\"egl/blah.so\").\"\n\n* commit \u0027dc77a22850e31eb369ec9776c13c967566bf61d0\u0027:\n  Allow dlopen(\"egl/blah.so\").\n"
    },
    {
      "commit": "6971fe4ca52ebdaa85ba676a044412b01d2ef1bf",
      "tree": "0d2b4800e7b56894d7b46bb9cd9c57809f59804a",
      "parents": [
        "e3c7b5192e65eeb0bd90bf884d3435ed9adfad0e"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Nov 01 22:59:19 2012 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Nov 01 22:59:19 2012 -0700"
      },
      "message": "Allow dlopen(\"egl/blah.so\").\n\nNVIDIA binary blobs construct strings to pass to dlopen(3) that\ncontain \u0027/\u0027 but require that we fall back to LD_LIBRARY_PATH.\n\nChange-Id: Iad831899986baace6962f4b335eeb288250a1e22\n"
    },
    {
      "commit": "6db8f5bb75bb79e0b4873e6d293aa25e2c9f090b",
      "tree": "1ecb7fb41088f98f9fbd179601a5a9d7539e65dd",
      "parents": [
        "65ba5b62c5a59181317b86f772d9ebb756d4741f",
        "d30116cf4a590e7bea3b73fa49bb27502a920819"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Nov 01 17:00:13 2012 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Thu Nov 01 17:00:13 2012 -0700"
      },
      "message": "am d30116cf: Merge \"Keep the dynamic linker\\\u0027s soinfo pools mostly read-only.\"\n\n* commit \u0027d30116cf4a590e7bea3b73fa49bb27502a920819\u0027:\n  Keep the dynamic linker\u0027s soinfo pools mostly read-only.\n"
    },
    {
      "commit": "d23736e4f228e46304b7cbc674a1d0094d73e0f5",
      "tree": "a3604b996016d73b2ccaf2982d338dc5d5ae53a3",
      "parents": [
        "064f862d557ab741575dfae479499a07ca0ab742"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Nov 01 15:16:56 2012 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Nov 01 16:48:14 2012 -0700"
      },
      "message": "Keep the dynamic linker\u0027s soinfo pools mostly read-only.\n\nWe\u0027ll need a lot more refactoring of this code before we can reduce\nthe granularity, but this is a step forward.\n\nChange-Id: I07061720e734b571a8399c1d5b4f2f35cd681307\n"
    },
    {
      "commit": "65ba5b62c5a59181317b86f772d9ebb756d4741f",
      "tree": "1076e134e730084844ca752bc1510f3aa1d682f5",
      "parents": [
        "3bb62578beb36a35d3b1d2fbe18bd34a9d4ecca4",
        "064f862d557ab741575dfae479499a07ca0ab742"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Nov 01 14:14:00 2012 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Thu Nov 01 14:14:00 2012 -0700"
      },
      "message": "am 064f862d: Merge \"Stop defining our own PAGE_SIZE and PAGE_MASK, and test dlclose(3) too.\"\n\n* commit \u0027064f862d557ab741575dfae479499a07ca0ab742\u0027:\n  Stop defining our own PAGE_SIZE and PAGE_MASK, and test dlclose(3) too.\n"
    },
    {
      "commit": "1a6961650c82168864afe040dbdc05977db701df",
      "tree": "37e1243251773431c52c106026b0cb405babb7c3",
      "parents": [
        "0be1819b22b33fbedcb150f96a196ed096abe2fc"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Nov 01 13:49:32 2012 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Nov 01 13:53:26 2012 -0700"
      },
      "message": "Stop defining our own PAGE_SIZE and PAGE_MASK, and test dlclose(3) too.\n\nAlso remove an unnecessary #include and a now-obsolete TODO.\n\nChange-Id: I36d923721e349a286934b9534090a67ce0786e7b\n"
    },
    {
      "commit": "3bb62578beb36a35d3b1d2fbe18bd34a9d4ecca4",
      "tree": "c4f93e3323a793f76f87c5f281fecc87fde9a304",
      "parents": [
        "1de3af51d459c2ced602f10e4f7e7fe704400cdc",
        "0be1819b22b33fbedcb150f96a196ed096abe2fc"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Nov 01 11:44:29 2012 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Thu Nov 01 11:44:29 2012 -0700"
      },
      "message": "am 0be1819b: Merge \"Dynamically allocate soinfo-structs in linker\"\n\n* commit \u00270be1819b22b33fbedcb150f96a196ed096abe2fc\u0027:\n  Dynamically allocate soinfo-structs in linker\n"
    },
    {
      "commit": "ba98d9237b0eabc1d8caf2600fd787b988645249",
      "tree": "f9072e739578645fc5ec927b6c7ed511b15ba144",
      "parents": [
        "c0ac7eba934fb88f321c75a71312ea482e9a85e9"
      ],
      "author": {
        "name": "Magnus Malmborn",
        "email": "magnus.malmborn@sonymobile.com",
        "time": "Wed Sep 12 13:00:55 2012 +0200"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Nov 01 11:31:39 2012 -0700"
      },
      "message": "Dynamically allocate soinfo-structs in linker\n\nRequest memory from the system when needed instead of having a fixed\narray for soinfo structs. Note that malloc() et al can\u0027t be used in\nlinker, so use mmap() instead.\n\nChange-Id: I4b495995931d7752b0e8c944e64d1fe41b9f7144\n"
    },
    {
      "commit": "1de3af51d459c2ced602f10e4f7e7fe704400cdc",
      "tree": "bb3e1800b42fd5fb8999bcb675b708d473eb5971",
      "parents": [
        "f510fc789a67344080543b9ae06d0ff3322561d5",
        "c0ac7eba934fb88f321c75a71312ea482e9a85e9"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Oct 31 15:13:30 2012 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Wed Oct 31 15:13:30 2012 -0700"
      },
      "message": "am c0ac7eba: Merge \"Reject .so files with no sysv hash table.\"\n\n* commit \u0027c0ac7eba934fb88f321c75a71312ea482e9a85e9\u0027:\n  Reject .so files with no sysv hash table.\n"
    },
    {
      "commit": "124fae9eabd7a25d80dfa8c3b56bed0f0fba16f1",
      "tree": "4e7b568b09fef856dbc1a7f0cab9770c96a15d39",
      "parents": [
        "b46530bd3e5984047bd780f5d3a6a5ebabd9f02d"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Oct 31 14:20:03 2012 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Oct 31 14:30:50 2012 -0700"
      },
      "message": "Reject .so files with no sysv hash table.\n\nAlso ensure that dlopen(3) errors always include the name of the library we\nfailed to open.\n\nAlso fix a bug where we\u0027d fall back to searching LD_LIBRARY_PATH and the\nbuilt-in paths for names that include slashes.\n\nBug: http://code.google.com/p/android/issues/detail?id\u003d38479\nChange-Id: Ib2c009ed083344a7a012749d58f8679db2f26c78\n"
    },
    {
      "commit": "3cd7a1653aa579213cb68a666bd9949e2b8fff95",
      "tree": "cd989147d5b36fbda8ca413c698f1270eb429eb4",
      "parents": [
        "914112ea21a62c7658dc4b094a369358009be6a9",
        "084be591923d3d509cea0a0f4b11b073e362d730"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Oct 30 17:18:04 2012 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Tue Oct 30 17:18:04 2012 -0700"
      },
      "message": "am 084be591: Merge \"linker: handle R_ARM_COPY relocations in a proper way\"\n\n* commit \u0027084be591923d3d509cea0a0f4b11b073e362d730\u0027:\n  linker: handle R_ARM_COPY relocations in a proper way\n"
    },
    {
      "commit": "5ae44f302b7d1d19f25c4c6f125e32dc369961d9",
      "tree": "1dde02285286f2f48e4becd2c89d8b2ffc1085db",
      "parents": [
        "155e8d1df5b8fdfeabda3e7b61d95beb5b8d1467"
      ],
      "author": {
        "name": "Ard Biesheuvel",
        "email": "ard.biesheuvel@gmail.com",
        "time": "Thu Aug 30 12:48:32 2012 +0200"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Oct 30 17:09:21 2012 -0700"
      },
      "message": "linker: handle R_ARM_COPY relocations in a proper way\n\nIf an executable contain copy relocations, other references\nto the symbol it points to should be preempted and made to\npoint to the copy instead.\n\nAlso, the linker should make sure the target area has\nsufficient space to contain the copy. It also checks\nwhether the library that supplies the symbol is built\nwith -Bsymbolic, and errors out if this is the case.\n\nChange-Id: If135c83590092741cfd8f82f54816f363a4a4a3b\nSigned-off-by: Ard Biesheuvel \u003card.biesheuvel@gmail.com\u003e\n"
    },
    {
      "commit": "914112ea21a62c7658dc4b094a369358009be6a9",
      "tree": "28e4c63b5744a9ffb308ee5f012de8262a5f0c6b",
      "parents": [
        "b0ac82e9baf969236be1174b49784500b33e6f48",
        "155e8d1df5b8fdfeabda3e7b61d95beb5b8d1467"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Oct 30 16:56:29 2012 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Tue Oct 30 16:56:29 2012 -0700"
      },
      "message": "am 155e8d1d: Merge \"More dynamic linker cleanup.\"\n\n* commit \u0027155e8d1df5b8fdfeabda3e7b61d95beb5b8d1467\u0027:\n  More dynamic linker cleanup.\n"
    },
    {
      "commit": "18a206c81d9743481e364384affd43306911283d",
      "tree": "2f211404b359cb7278f6963bb82f507e6c9a2050",
      "parents": [
        "06b596104a9ed3ac089abd00186a5698d7e8544f"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Oct 29 17:37:13 2012 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Oct 30 16:35:38 2012 -0700"
      },
      "message": "More dynamic linker cleanup.\n\nI still want to break linker_format out into its own library so we can reuse\nit for malloc debugging and so forth. (There are many similar pieces of code\nin bionic, but the linker\u0027s one seems to be the most complete/functional.)\n\nChange-Id: If3721853d28937c8e821ca1d23cf200e228a409a\n"
    },
    {
      "commit": "8cacc639b6ae660c494aca07c537cb443c6c6cd9",
      "tree": "db341c32fc8d0af2434cbae47de7924b40d58804",
      "parents": [
        "85819efe8f771759d12ab86f0bd47ede621dbb7d",
        "7193731ae6b8083bc7a5e5e468fb98b1dbcf3f3d"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Oct 25 15:20:29 2012 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Thu Oct 25 15:20:29 2012 -0700"
      },
      "message": "am 7193731a: Merge \"Workaround g++ 4.7 compfail\"\n\n* commit \u00277193731ae6b8083bc7a5e5e468fb98b1dbcf3f3d\u0027:\n  Workaround g++ 4.7 compfail\n"
    },
    {
      "commit": "20aa6c0f4cbe6fdaba8938536a7b80270cfe7203",
      "tree": "0212cfae4f91012942afd11e742969bd891b80be",
      "parents": [
        "d0f2b7e7e65f19f978c59abcbb522c08e76b1508"
      ],
      "author": {
        "name": "Pavel Chupin",
        "email": "pavel.v.chupin@intel.com",
        "time": "Thu Oct 25 12:17:05 2012 +0400"
      },
      "committer": {
        "name": "Pavel Chupin",
        "email": "pavel.v.chupin@intel.com",
        "time": "Thu Oct 25 17:58:45 2012 +0400"
      },
      "message": "Workaround g++ 4.7 compfail\n\nerror: C99 designator \u0027name\u0027 outside aggregate initializer\n\nG++ 4.7+ can\u0027t handle some of C99 designated initializers.\nMost likely it\u0027s just not implemented yet. Other possible workarounds is\nto compile this as C not C++ or define name as char* instead of char[SIZE].\n\nAppeared after this change https://android-review.googlesource.com/#/c/44470\n\nChange-Id: Ib28157848ce759b8bb5dbb2ac0d9a768fa4e5107\nSigned-off-by: Pavel Chupin \u003cpavel.v.chupin@intel.com\u003e\n"
    },
    {
      "commit": "06abe13c5f7a318eef316268d0d25d92ff128c19",
      "tree": "fa34b869e37b43e413db275369207b2a3dbca15a",
      "parents": [
        "c7dc842529ea6f8801164eb8b4f7d036acc53955",
        "a2f596b65075db7916ffffa2f5059e7953719578"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Oct 17 11:03:12 2012 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Wed Oct 17 11:03:12 2012 -0700"
      },
      "message": "am a2f596b6: Merge \"Make dlerror(3) thread-safe.\"\n\n* commit \u0027a2f596b65075db7916ffffa2f5059e7953719578\u0027:\n  Make dlerror(3) thread-safe.\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": "c2483ea9b63de373e7521e39162395a8c667239a",
      "tree": "08052e6a9b58aa0bd898e1797537c8277dec5b33",
      "parents": [
        "ab4e2ed182011998751ff5d6c321ff5bae20c6cd",
        "9434e8febc8b223db2d49e7f97140771700113b9"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Oct 12 11:21:59 2012 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Fri Oct 12 11:21:59 2012 -0700"
      },
      "message": "am 9434e8fe: Merge \"Make the dlfcn mutex static.\"\n\n* commit \u00279434e8febc8b223db2d49e7f97140771700113b9\u0027:\n  Make the dlfcn mutex static.\n"
    },
    {
      "commit": "22d629211d72adaf46f3fc48f59540f8e5798b1e",
      "tree": "98ff73ae376f40abae72a869702276b0d35d2adc",
      "parents": [
        "db4fdf1aafb63b09ee967066d9b8107a9812db2d"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Oct 12 10:50:21 2012 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Oct 12 10:50:21 2012 -0700"
      },
      "message": "Make the dlfcn mutex static.\n\nMore style fixes too, and removal of yet another lingering SH reference!\n\nChange-Id: Iebc34a46475dd11845ad172b9108bb6ddd7585bb\n"
    },
    {
      "commit": "ab4e2ed182011998751ff5d6c321ff5bae20c6cd",
      "tree": "ac2c6e121a9f8289cda63a4096a86f2423112419",
      "parents": [
        "cf3fa7f45742c870f1478b1bf7717d3042d599d7",
        "db4fdf1aafb63b09ee967066d9b8107a9812db2d"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Oct 12 10:47:59 2012 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Fri Oct 12 10:47:59 2012 -0700"
      },
      "message": "am db4fdf1a: Merge \"Fix dlerror(3).\"\n\n* commit \u0027db4fdf1aafb63b09ee967066d9b8107a9812db2d\u0027:\n  Fix dlerror(3).\n"
    },
    {
      "commit": "3b297c40794b23d50cb5240f9b03f6ef25fd98db",
      "tree": "ebcb95b3cd9f249f08257e8654307f88c98e6dbb",
      "parents": [
        "417fd2334a694cf6a831b81cd672b4ca31ff2f54"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Oct 11 16:08:51 2012 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Oct 11 16:08:51 2012 -0700"
      },
      "message": "Fix dlerror(3).\n\nAdd unit tests for dlerror(3) in various situations. I think We\u0027re at least\nas good as glibc now.\n\nAlso factor out the ScopedPthreadMutexLock and use it here too.\n\nBug: http://code.google.com/p/android/issues/detail?id\u003d38398\nChange-Id: I040938b4366ab836e3df46d1d8055b92f4ea6ed8\n"
    },
    {
      "commit": "a55f0a1007423837ff8dc26336a1976469439def",
      "tree": "a4af85430711f2cacf38519bdc9f07137588ffdf",
      "parents": [
        "7e7853230fcf141477d7332634858c08d8eec5b9",
        "b04598a63c3f0df597f6186beea3adafc665ef56"
      ],
      "author": {
        "name": "Ying Wang",
        "email": "wangying@google.com",
        "time": "Mon Oct 08 14:21:38 2012 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Mon Oct 08 14:21:38 2012 -0700"
      },
      "message": "am b04598a6: Set up the private variables.\n\n* commit \u0027b04598a63c3f0df597f6186beea3adafc665ef56\u0027:\n  Set up the private variables.\n"
    },
    {
      "commit": "b04598a63c3f0df597f6186beea3adafc665ef56",
      "tree": "e80a622f76ef810fa9488c0fb536380e0da9f215",
      "parents": [
        "6b1ba1184a5e0884686b63da837a85f8c861d1fc"
      ],
      "author": {
        "name": "Ying Wang",
        "email": "wangying@google.com",
        "time": "Tue Sep 25 18:32:24 2012 -0700"
      },
      "committer": {
        "name": "Joe Onorato",
        "email": "joeo@google.com",
        "time": "Mon Oct 08 14:12:56 2012 -0700"
      },
      "message": "Set up the private variables.\n\nNow we use private variables in transform-o-to-executable to support\nbuild executables against the NDK.\n\nBug: 7170098\nChange-Id: I6e505b33001b76f4b11fcbbb1d35392c4ddf4c70\n"
    },
    {
      "commit": "1db6f2db499490e125a92e2c859a6dc3bef81d72",
      "tree": "9e829f379100972b8adf9014f722ebe16a78a5dd",
      "parents": [
        "95a2a7f325330830d6227aa683948b325e38e653"
      ],
      "author": {
        "name": "Andy McFadden",
        "email": "fadden@android.com",
        "time": "Tue Oct 02 13:53:13 2012 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Oct 03 17:20:06 2012 -0700"
      },
      "message": "Test flags before using \"info\"\n\nOur debugger signal catcher expects to receive three args, but if\nsomebody cleared SA_SIGINFO we only get one, and bad things happen\nwhen we try to use the second one.  Test to see if SA_SIGINFO is\nstill set before we try to use the argument.\n\n(cherry-pick of f84bc8d6f6368f1c846124a8168761ee8cc589c0.)\n\nBug: 7272866\nChange-Id: I69a65c25e833aea70acb78f9ba40ed93308583e6\n"
    },
    {
      "commit": "51c7167d2245286e3458ffb06b0b5068d8f04e1b",
      "tree": "796fe05d768ffe674c23db30d311a1a512cd988d",
      "parents": [
        "3a0aa5e0a01c26278438513a73bc0150d5fc215c",
        "7c67e4e423f7608c50a1fc7c355d87593cfdbcca"
      ],
      "author": {
        "name": "Andy McFadden",
        "email": "fadden@android.com",
        "time": "Tue Oct 02 15:27:09 2012 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Tue Oct 02 15:27:09 2012 -0700"
      },
      "message": "am 7c67e4e4: am 98957db5: Merge \"Test flags before using \"info\"\" into jb-mr1-dev\n\n* commit \u00277c67e4e423f7608c50a1fc7c355d87593cfdbcca\u0027:\n  Test flags before using \"info\"\n"
    },
    {
      "commit": "f84bc8d6f6368f1c846124a8168761ee8cc589c0",
      "tree": "85c6a5ca23faae5b1d243c1191515556248a1d25",
      "parents": [
        "204b26b4402249566e0190154cddb2cfc2cf42a7"
      ],
      "author": {
        "name": "Andy McFadden",
        "email": "fadden@android.com",
        "time": "Tue Oct 02 13:53:13 2012 -0700"
      },
      "committer": {
        "name": "Andy McFadden",
        "email": "fadden@android.com",
        "time": "Tue Oct 02 14:30:41 2012 -0700"
      },
      "message": "Test flags before using \"info\"\n\nOur debugger signal catcher expects to receive three args, but if\nsomebody cleared SA_SIGINFO we only get one, and bad things happen\nwhen we try to use the second one.  Test to see if SA_SIGINFO is\nstill set before we try to use the argument.\n\nBug: 7272866\nChange-Id: If682a2262fe8a575f3802fb0c60a53eea3082456\n"
    },
    {
      "commit": "5b6346f6d5dca4022fe0044dd2807c19ac596788",
      "tree": "a857b9fcb602f4109a1f1b3235a01fedb2123a8a",
      "parents": [
        "d03bfe689a6e29aa010a927741f42c08f89ef04d",
        "9c3449ecd9d5e9cdb1e995e35e53334a4a288a5e"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Oct 01 09:09:17 2012 -0700"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Oct 01 09:09:17 2012 -0700"
      },
      "message": "Merge \"bionic: linker: Need update the map-\u003el_addr for execution.\""
    },
    {
      "commit": "e6dc2a664e7c06fe02a100d6d1a5b0eba3d92935",
      "tree": "72d9b23004feaadd9b127fb83999a7a0e00469e8",
      "parents": [
        "6e0e03c38bc0e864225b89b3fb273fb56ded8940"
      ],
      "author": {
        "name": "Raghu Gandham",
        "email": "raghu@mips.com",
        "time": "Tue Sep 25 15:50:33 2012 -0700"
      },
      "committer": {
        "name": "Raghu Gandham",
        "email": "raghu@mips.com",
        "time": "Tue Sep 25 15:58:01 2012 -0700"
      },
      "message": "Revert dl_fbase initialization to the address where the shared object is loaded.\n\nChange-Id: If868cab774a1ae5ff370208216cecda9b8c3b9fd\n"
    },
    {
      "commit": "c1993cac4072e2d0c48cd9b55e3861d879ada224",
      "tree": "db94822952dd32a211212bbc3282017f85c744a6",
      "parents": [
        "47dc4d431017e701239dd7d9a16333e0ad56a0ac"
      ],
      "author": {
        "name": "Raghu Gandham",
        "email": "raghu@mips.com",
        "time": "Fri Sep 21 12:21:02 2012 -0700"
      },
      "committer": {
        "name": "Raghu Gandham",
        "email": "raghu@mips.com",
        "time": "Fri Sep 21 17:00:30 2012 -0700"
      },
      "message": "Fix dlsym and dladdr to use load_bias instead of base\n\nChange-Id: If0f9aa944ccb1f90451aa6674428e34494331d2d\n"
    },
    {
      "commit": "9c3449ecd9d5e9cdb1e995e35e53334a4a288a5e",
      "tree": "8c7dd651a96cfae737adad1bfc6b0ec9cbc6d7a4",
      "parents": [
        "7593fa8eb7d8c3950a069e5edd244fb68872ec17"
      ],
      "author": {
        "name": "Xiaokang Qin",
        "email": "xiaokang.qin@intel.com",
        "time": "Thu Sep 13 18:07:24 2012 +0800"
      },
      "committer": {
        "name": "Xiaokang Qin",
        "email": "xiaokang.qin@intel.com",
        "time": "Thu Sep 13 18:09:20 2012 +0800"
      },
      "message": "bionic: linker: Need update the map-\u003el_addr for execution.\n\nCurrently, linker doesn\u0027t update the map-\u003el_addr for execution.\nWhich could break the Unwind_Backtrace with PT_GNU_EH_FRAME enabled\nin new toolchain.\n\nChange-Id: Ifbd853134da64a962f7e4c4105e56a3f20def1b2\nAuthor: Fengwei Yin \u003cfengwei.yin@intel.com\u003e\nSigned-off-by: Jack Ren \u003cjack.ren@intel.com\u003e\nAuthor-tracking-BZ: 57077\n"
    },
    {
      "commit": "e9b6fc6f82276188404a2839e31a2f4c19f6c336",
      "tree": "ed8f68b580c5192289369c1b79f26b3fa1aadd3e",
      "parents": [
        "0d7177c0d47517514c81713427fc28e04dc3cd37"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Aug 29 13:10:54 2012 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Aug 29 13:10:54 2012 -0700"
      },
      "message": "Improve the dynamic linker diagnostics.\n\nLose the pid, only show the name of the function (not its whole signature),\nand include the name of the library we failed to load. (I hadn\u0027t noticed\nthat the library name was missing before because in Java we add that into\nthe UnsatisfiedLinkError detail message.)\n\nThe new output looks like this:\n\n  Cannot load library: soinfo_relocate(linker.cpp:968): cannot locate symbol \"__libc_malloc_default_dispatch\" referenced by \"libc_malloc_debug_leak.so\"...\n\nChange-Id: I3bb5c9780d9aaf3a9e4418ea55bc98122a81f80f\n"
    },
    {
      "commit": "ad18073897378d3a13aaa6a7e7005f254ab8c1c8",
      "tree": "1abcd8b4141b83d7ab2a32d29645e69b40bd0cb3",
      "parents": [
        "c410a9613a837790d2ea13aee3f88881e0d54c17",
        "d39c3abd5ad8600fb1d79a0b95a58197197087e0"
      ],
      "author": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Tue Aug 28 12:48:00 2012 -0700"
      },
      "committer": {
        "name": "android code review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Aug 28 12:48:01 2012 -0700"
      },
      "message": "Merge \"linker: Fix ARM_R_COPY relocations\""
    },
    {
      "commit": "d39c3abd5ad8600fb1d79a0b95a58197197087e0",
      "tree": "9ff42ae50601253e9401fc4e582b415cb6680a99",
      "parents": [
        "a37ce7faa6d6c7355e3c6f6e09e5268cbf29c291"
      ],
      "author": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Fri Aug 24 13:25:51 2012 -0700"
      },
      "committer": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Tue Aug 28 11:48:32 2012 -0700"
      },
      "message": "linker: Fix ARM_R_COPY relocations\n\nPer http://infocenter.arm.com/help/topic/com.arm.doc.ihi0044d/IHI0044D_aaelf.pdf\nSection 4.7.1.10, ARM_R_COPY relocations are only suppose to reference shared\nlibraries, not the executable itself.  When resolving an R_ARM_COPY symbol,\nensure we don\u0027t look in our own symbol.\n\nThis partially addresses\nhttp://code.google.com/p/android/issues/detail?id\u003d28598 .  After this\npatch, the printfs generated by the test program are:\n\nglobal \u003d 0x42 (0x401c7000)\nglobal \u003d 0x42 (0x11000)\n\nbefore, the output was:\n\nglobal \u003d 0x42 (0x40071000)\nglobal \u003d 0x0 (0x11000)\n\nI\u0027m still not very happy with this patch, but I think it\u0027s an improvement\nover where we were at before.\n\nThis change was modeled after https://android-review.googlesource.com/38871\n\nChange-Id: Id7ad921e58395e76a36875bcc742ec5eeba53f08\n"
    },
    {
      "commit": "3697b52605230d1479b662dceb27b4ef1fab0567",
      "tree": "77912852a45c476a7f6439145c01c809324a6082",
      "parents": [
        "a37ce7faa6d6c7355e3c6f6e09e5268cbf29c291"
      ],
      "author": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Fri Aug 24 13:40:25 2012 -0700"
      },
      "committer": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Fri Aug 24 17:11:45 2012 -0700"
      },
      "message": "Allow linker to compile with -DLINKER_DEBUG\u003d1\n\nChange-Id: I27e734048cbcb9ed936369115582b3c734de1280\n"
    },
    {
      "commit": "b7beb6907599b36809effe1b4db76039ac649518",
      "tree": "6629ebe3ee4167d4383022edf4fa7882144a5445",
      "parents": [
        "6c98cdb1924afd3e71d39904557933fa10adaebf"
      ],
      "author": {
        "name": "Pavel Chupin",
        "email": "pavel.v.chupin@intel.com",
        "time": "Fri Aug 17 12:53:29 2012 +0400"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Aug 17 12:44:23 2012 -0700"
      },
      "message": "Add link.h for all platforms with dl_phdr_info\n\nThis header is used on bionic build and should be propagated into\nsysroot on toolchain rebuild. Discussion re. this header is here:\nhttp://gcc.gnu.org/ml/gcc-patches/2012-08/msg00936.html\n\nIt is available already in mips NDK platforms:\ndevelopment/ndk/platforms/android-9/arch-mips/include/link.h\n\nChange-Id: I39ff467cdac9f448e31c11ee3e14a6200e82ab57\nSigned-off-by: Pavel Chupin \u003cpavel.v.chupin@intel.com\u003e\n"
    },
    {
      "commit": "105bc26fa6e5f6a946a2ff144ae316e69c6ce08e",
      "tree": "3f5629b0ee6a0939d471408c20aeb6d3c9e468a0",
      "parents": [
        "e1cd69a708d30fbc3b9e0e8d4db67f67fc123b65"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Aug 15 16:56:00 2012 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Aug 15 16:56:00 2012 -0700"
      },
      "message": "Fix comment typos.\n\nChange-Id: I8feeec1ee9935a6d6baebe57f1c0043ff90ff94f\n"
    },
    {
      "commit": "32dbc03c73dc1f9d1fcd072086d894a9eb25aecd",
      "tree": "cd9ba7f5de95b4435c6eb99695ba15246806d9de",
      "parents": [
        "fe43c768ec803a1febde0424bb5e69c343dd7ae9"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Aug 15 15:43:13 2012 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Aug 15 15:43:13 2012 -0700"
      },
      "message": "Regenerate all NOTICE files with the latest version of the script.\n\nThis sorts every entry, so we should have more stability and fewer\nmerge conflicts in future.\n\nChange-Id: Ifc5347dc53352da22c82d41ca59b483966fcfc6b\n"
    },
    {
      "commit": "bedfe38b8ba512dd6236c00e8b4a9b01c2bd1281",
      "tree": "7c395dc45e732e921d65fe0baaa0315b954fbc87",
      "parents": [
        "b7c6991c9af3882bd13cbf6bc42da85c884aa5f5"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Aug 14 14:07:59 2012 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Aug 14 14:07:59 2012 -0700"
      },
      "message": "More cleanup.\n\nMake more stuff static, remove some dead code, and fix a few typos.\n\nChange-Id: I010b0eadeaf61e2899c37014ad1e7082c70bd510\n"
    },
    {
      "commit": "12c78bbded8ec03f821dfa09174464c04836e4ea",
      "tree": "bcf31e000dc214688694a6538568b3a49624352c",
      "parents": [
        "54655eaf92ca91bfe2fa293896059a181e27b6eb"
      ],
      "author": {
        "name": "Ard Biesheuvel",
        "email": "ard.biesheuvel@gmail.com",
        "time": "Tue Aug 14 12:30:09 2012 +0200"
      },
      "committer": {
        "name": "Ard Biesheuvel",
        "email": "ard.biesheuvel@gmail.com",
        "time": "Tue Aug 14 19:38:28 2012 +0200"
      },
      "message": "linker: avoid clobbering the .dynamic section of shared libs\n\nThis patch removes the DT_NEEDED hack which stores pointers\nto soinfo structs in the .dynamic section of the library\nbeing loaded.\n\nInstead, it caches the soinfo struct pointers on the stack\nduring relocation time. After relocation time, i.e. when\ncalling constructors and destructors of the shared library\nand its dependencies, uncached access is used instead,\ndoing lookups using the string table entries pointed to by\nthe DT_NEEDED entries.\n\nBy removing this hack, it is no longer needed to undo the\nPT_GNURELRO protection, i.e., all non-writable mappings\ncan remain non-writable during their entire lifespan.\n\nEven though, strictly speaking, the algorithmic complexity\nhas increased somewhat, the real-world adverse effect\nis negligible on the systems I have tested.\n\nChange-Id: I2361502560b96b5878f7f94a8e8a215350d70d64\nSigned-off-by: Ard Biesheuvel \u003card.biesheuvel@gmail.com\u003e\n"
    },
    {
      "commit": "ae5c64413bf72bc18d7fc81e1f5761824bc01f49",
      "tree": "910859328e35be8af64308ad002b0d290bc738f1",
      "parents": [
        "66fba00991f03d07c72f809d033b88748f839bda"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Aug 13 14:06:05 2012 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Aug 13 14:06:05 2012 -0700"
      },
      "message": "Add dependencies on all the makefiles.\n\nThis should help prevent broken builds next time I\u0027m messing with\nassembler/compiler/linker flags...\n\nChange-Id: I30f15a3ce3c3f3c60cad7bc59aaba9f42d792224\n"
    },
    {
      "commit": "9181a5dcfe69199415c7aebf93524cc3dd6f8a6f",
      "tree": "381d31f88ca04d15d5f83845b02cf1a04abc7ce6",
      "parents": [
        "20b94c0ce99ea3d2315535091c8bcd02f831d252"
      ],
      "author": {
        "name": "Evgeniy Stepanov",
        "email": "eugenis@google.com",
        "time": "Mon Aug 13 17:58:37 2012 +0400"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Aug 13 11:05:47 2012 -0700"
      },
      "message": "Fix module constructor order.\n\n.preinit_array goes before the constructors of LD_PRELOAD-ed libraries.\n\nChange-Id: I1af32ce29eaf3ca4351ae8a0f7f5da5165853216\n"
    },
    {
      "commit": "5135b3ae6ebc460418f7917bd36b368340e48d5a",
      "tree": "9352c1ef42d3972e8e202eeabd0e7bfb73799b95",
      "parents": [
        "0bf5cf87c6b7d3de8962ba132ecfb6f0e4b84f06"
      ],
      "author": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Fri Aug 10 21:08:42 2012 -0700"
      },
      "committer": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Mon Aug 13 08:50:11 2012 -0700"
      },
      "message": "linker: don\u0027t perform unnecessary mprotects\n\nThe linker only needs to mark the text segment as\nwritable iff the file has text relocations. Unnecessarily\ncalling mprotect when it isn\u0027t necessary is slow, and some\nsecurity enhanced kernels don\u0027t like it. Pages which are\nsimultaneously writable and executable are considered a no-no.\n\nThe vast majority of executables / shared libraries on Android\ndo NOT have text relocations.\n\nChange-Id: Ic38ce30a99b7e33ecf21efd9c108547a58eafa35\n"
    },
    {
      "commit": "0bf5cf87c6b7d3de8962ba132ecfb6f0e4b84f06",
      "tree": "426d35e13761faf006baf4c824a7141214cc6efc",
      "parents": [
        "316ee626b729e3f66a5505a20128af26440cfd19",
        "06f0e74a2b957db93fed3fdd49fe939ab2fe1595"
      ],
      "author": {
        "name": "Ben Cheng",
        "email": "bccheng@google.com",
        "time": "Fri Aug 10 16:46:09 2012 -0700"
      },
      "committer": {
        "name": "android code review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Aug 10 16:46:09 2012 -0700"
      },
      "message": "Merge \"Set the dynamic field in the link map for the linker itself.\""
    },
    {
      "commit": "06f0e74a2b957db93fed3fdd49fe939ab2fe1595",
      "tree": "264d6b411c8ab418a7fbcf4a88b075fe4d8d2286",
      "parents": [
        "709bb0f79ced522e5fb145182472ee4063b85368"
      ],
      "author": {
        "name": "Ben Cheng",
        "email": "bccheng@google.com",
        "time": "Fri Aug 10 16:07:02 2012 -0700"
      },
      "committer": {
        "name": "Ben Cheng",
        "email": "bccheng@google.com",
        "time": "Fri Aug 10 16:07:02 2012 -0700"
      },
      "message": "Set the dynamic field in the link map for the linker itself.\n\nOtherwise gdb will print a spurious warning each time gdb is used:\n\nwarning: .dynamic section for \"/system/bin/linker\" is not at the expected\naddress (wrong library or version mismatch?)\n\nBUG:6946614\nChange-Id: Ib21b8db0615751189c1601140deb43bc089289b6\n"
    },
    {
      "commit": "387d4b7de9af2afd0c37a895ff9d012eb1f66156",
      "tree": "a515a4be8d2881d734a6b1c2a2e4f1fdd0c43e1d",
      "parents": [
        "709bb0f79ced522e5fb145182472ee4063b85368"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Aug 09 15:17:46 2012 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Aug 09 16:05:31 2012 -0700"
      },
      "message": "Auto-generate a complete NOTICE file.\n\nRemove the hand-collated ones, and switch to a script that pulls the\ncopyright headers out of every file and collects the unique ones.\n\nChange-Id: Ied3b98b3f56241df97166c410ff81de4e0157c9d\n"
    },
    {
      "commit": "57e6d9ab48219467bee0ab28a96533f98552581c",
      "tree": "c2fd47b36321f2807df9cf97cdc98c1e12cba140",
      "parents": [
        "7812920487070d392984f94c9f80006dad8c198a"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Aug 08 16:06:51 2012 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Aug 08 16:06:51 2012 -0700"
      },
      "message": "Fix x86 build.\n\nChange-Id: Ice50ca71a19f3bf26de7cfd4c02075f1e6e0823f\n"
    },
    {
      "commit": "4688279db5dcc4004941e7f133c4a1c3617d842c",
      "tree": "db614aaf2e0a02cef4b5f643fa91e9cbcfd7d5ff",
      "parents": [
        "1c861728e5c8dda7589e6595f4850d77ec21a236"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Aug 03 16:49:39 2012 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Aug 07 11:41:10 2012 -0700"
      },
      "message": "Clean up the linker a bit, remove prelinking support.\n\nAlso make the errors more readable, since none of us seemed to know\nwhat they actually meant. The new style is still as verbose as the\nold, but that\u0027s probably necessary in the absence of chained exceptions\nin C. Here\u0027s what you\u0027d see if you try to boot after removing\nlibsurfaceflinger.so:\n\n  32267 32267 E AndroidRuntime: java.lang.UnsatisfiedLinkError: Cannot load library: (linker.c:1629, pid 32259) soinfo_link_image: could not load library \"libsystem_server.so\" needed by \"libandroid_servers.so\"; caused by (linker.c:1629, pid 32259) soinfo_link_image: could not load library \"libsurfaceflinger.so\" needed by \"libsystem_server.so\"; caused by (linker.c:709, pid 32259) load_library: library \"libsurfaceflinger.so\" not found\n\nThis patch also fixes almost all of the compiler warnings.\n\nChange-Id: I64bb59aed6d4e039c15ea45be2367f319ef879f8\n"
    },
    {
      "commit": "d7daacb46372132ae3f0121647074936c304b572",
      "tree": "c6bbaccbf2d36b1c4494b5bce7e7b489bec6442b",
      "parents": [
        "0ca9d0748e3229c849e3ee17259e0e55d7214800"
      ],
      "author": {
        "name": "Raghu Gandham",
        "email": "raghu@mips.com",
        "time": "Tue Jul 31 12:07:22 2012 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Aug 02 14:39:50 2012 -0700"
      },
      "message": "MIPS support to the linker\n\nChange-Id: I37ec2d6c51d82bb9e9dbfef4b38c85366bead255\nSigned-off-by: Chris Dearman \u003cchris@mips.com\u003e\nSigned-off-by: Raghu Gandham \u003craghu@mips.com\u003e\nSigned-off-by: Bhanu Chetlapalli \u003cbhanu@mips.com\u003e\n"
    },
    {
      "commit": "8dfc073b1487ab25ab483ab346cee1d9e584adb1",
      "tree": "7423f6a87858e187e5b8ccbc5396ee7096f27285",
      "parents": [
        "9061c6e7ae1d9b0e4d2f8a62b3682a565282f9b9"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Jul 27 15:30:51 2012 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Jul 27 15:30:51 2012 -0700"
      },
      "message": "Fix a TEMP_FAILURE_RETRY usage error in the linker.\n\nSimilar to the fix in c20d0f3993ebb0d3dec958a306a68ebb48bfeadd.\n\ngrep(1) says this was the only other instance in bionic.\n\nChange-Id: I1729038762ee1c7c4743a6bd11d5558afd6f5749\n"
    },
    {
      "commit": "f6ee33cee717f9878d3a43bf76c35547649676d7",
      "tree": "93d200becc2ae2e17794901b03ff69a5d32b5382",
      "parents": [
        "3fd5e91e58ba40a7321a3f2c4c64970584e9bb56",
        "326e85eca6916eb904649f7bff65244a40088ba7"
      ],
      "author": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Wed Jul 18 14:02:21 2012 -0700"
      },
      "committer": {
        "name": "android code review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Jul 18 14:02:22 2012 -0700"
      },
      "message": "Merge \"linker: Fix LD_PRELOADS for calling constructors\""
    },
    {
      "commit": "3fd5e91e58ba40a7321a3f2c4c64970584e9bb56",
      "tree": "9327cd649b5f512a9927ee8aaf256513f5beb94c",
      "parents": [
        "05f03b8875ed4aab95e5587d066d62a781af97bc",
        "bb5c30a3ee40324effd4daa346505e16faf91728"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Jul 16 11:38:23 2012 -0700"
      },
      "committer": {
        "name": "android code review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Jul 16 11:38:23 2012 -0700"
      },
      "message": "Merge \"bionic: Report linker relocation address to gdb\""
    },
    {
      "commit": "8211bc6325ef61f2fe2021fac9e0f4219abaccf2",
      "tree": "6be741ab104858dba834bc84ecb75fabec4ddfab",
      "parents": [
        "decb531ce29e0472d5d3117c4bfda674f374a771"
      ],
      "author": {
        "name": "Robin Burchell",
        "email": "robin.burchell@collabora.co.uk",
        "time": "Thu Jul 05 09:23:19 2012 +0200"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Jul 16 10:03:35 2012 -0700"
      },
      "message": "linker: cleanup of undefined state handling, which is really dead code\n\nGiven that _elf_lookup (and thus, _do_lookup) cannot possibly return an\nundefined symbol (due to the check for SHN_UNDEF in _elf_lookup), there\u0027s\nno need for spurious checks for SHN_UNDEF on its return value.\n\nConflicts:\n\n\tlinker/linker.c\n\nChange-Id: Ic73cf439924b45f72d4d9ba3f64a888c96cbbd9b\n"
    },
    {
      "commit": "439fa8ea8c33a7945258dfe84a71ab2665efaa9a",
      "tree": "f9e9312620e9d142605257434e495c716f1ef559",
      "parents": [
        "8d7355ac2f19f72e03989aab6b47990a34fd6123"
      ],
      "author": {
        "name": "Robin Burchell",
        "email": "robin.burchell@collabora.co.uk",
        "time": "Thu Jul 05 09:21:07 2012 +0200"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Jul 16 09:51:17 2012 -0700"
      },
      "message": "linker: Use SHN_UNDEF instead of describing what it is trying to do.\n"
    },
    {
      "commit": "856512ea9c933c5fe0fff14ee123496730df6b19",
      "tree": "9b346559570609f1ac2bdf63dbeaf6ab30f78c46",
      "parents": [
        "fabddfe833097ecca92b3547a725879234780468"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Jul 16 09:43:14 2012 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Jul 16 09:43:14 2012 -0700"
      },
      "message": "Use std\u003dgnu99 for the dynamic linker as well as libc.\n\nChange-Id: I76dd78576c5af6eb6282555f069647b6260edc31\n"
    },
    {
      "commit": "bb5c30a3ee40324effd4daa346505e16faf91728",
      "tree": "2d985059f3306f6237749893fb1793f21ba46b4f",
      "parents": [
        "6334c662cae4cd9b61f5f3185048b0cd3633dad7"
      ],
      "author": {
        "name": "Ryan V. Bissell",
        "email": "ryan@bissell.org",
        "time": "Mon Jul 16 02:16:18 2012 -0500"
      },
      "committer": {
        "name": "Ryan V. Bissell",
        "email": "ryan@bissell.org",
        "time": "Mon Jul 16 02:16:18 2012 -0500"
      },
      "message": "bionic: Report linker relocation address to gdb\n\nGDB needs the runtime linker\u0027s base address in order to\nlocate the latter\u0027s \".text\" and \".plt\" sections, for the\npurpose of detecting solib trampolines.  It also can\npotentially use this to calculate the relocated address\nof rtld_db_dlactivity.\n\nBug: http://code.google.com/p/android/issues/detail?id\u003d34856\nChange-Id: I63d3e7ae4e20a684ceb25967f2241e7d58dd685d\nSigned-off-by: Ryan V. Bissell \u003cryan@bissell.org\u003e\n"
    },
    {
      "commit": "326e85eca6916eb904649f7bff65244a40088ba7",
      "tree": "ba1a91f237d5a013bb89af9a3d2f4c41800125e9",
      "parents": [
        "e1d909f71e183ac3d1e21af5bb1af35d30e9de5b"
      ],
      "author": {
        "name": "Kito Cheng",
        "email": "kito@0xlab.org",
        "time": "Sun Jul 15 00:49:27 2012 +0800"
      },
      "committer": {
        "name": "Kito Cheng",
        "email": "kito@0xlab.org",
        "time": "Sun Jul 15 00:49:34 2012 +0800"
      },
      "message": "linker: Fix LD_PRELOADS for calling constructors\n\nChange-Id: I1eae77a4c59e8a5acc009127d271455bb6fc01b6\n"
    },
    {
      "commit": "793e6aedf2dfb6cc9bdf0cf9fd60dd87ec21f658",
      "tree": "49ed031c801cbbb423baf37927e4cb83b8833608",
      "parents": [
        "2ddf77b37731dff3a271c1312fc0bef2e7d41473",
        "67636eea20f7789e6689ee8cf6017e7d48735ca1"
      ],
      "author": {
        "name": "Andrew Hsieh",
        "email": "andrewhsieh@google.com",
        "time": "Mon Jul 09 11:07:46 2012 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Mon Jul 09 11:07:46 2012 -0700"
      },
      "message": "am 67636eea: am 40e7ed58: Unhide rtld_db_dlactivity()\n\n* commit \u002767636eea20f7789e6689ee8cf6017e7d48735ca1\u0027:\n  Unhide rtld_db_dlactivity()\n"
    },
    {
      "commit": "67636eea20f7789e6689ee8cf6017e7d48735ca1",
      "tree": "d3e4c139b5285fa5bc43c013e8ad7dd5f6d4edb9",
      "parents": [
        "5af97ca8514d9fb4175bff3a79abf26889b94530",
        "40e7ed58d73eae59d0cf2fed61284d16692e307b"
      ],
      "author": {
        "name": "Andrew Hsieh",
        "email": "andrewhsieh@google.com",
        "time": "Mon Jul 09 11:05:16 2012 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Mon Jul 09 11:05:16 2012 -0700"
      },
      "message": "am 40e7ed58: Unhide rtld_db_dlactivity()\n\n* commit \u002740e7ed58d73eae59d0cf2fed61284d16692e307b\u0027:\n  Unhide rtld_db_dlactivity()\n"
    },
    {
      "commit": "40e7ed58d73eae59d0cf2fed61284d16692e307b",
      "tree": "07def7271e63e1367672dc37bcffe89627f4ad9b",
      "parents": [
        "4d0128f13a3ca9f7a0c81b6e69f7e20d28e9e6e3"
      ],
      "author": {
        "name": "Andrew Hsieh",
        "email": "andrewhsieh@google.com",
        "time": "Mon Jul 02 11:17:04 2012 -0700"
      },
      "committer": {
        "name": "Andrew Hsieh",
        "email": "andrewhsieh@google.com",
        "time": "Mon Jul 02 11:17:04 2012 -0700"
      },
      "message": "Unhide rtld_db_dlactivity()\n\nSince linker is built with -fvisibility\u003dhidden rtld_db_dlactivity()\nif hidden from gdb.  Unhide it otherwise gdb may not know linker\nactivity and rescan solib\n\nChange-Id: Ia8cd8d9738c6ea5696ba2ef0ebf2cf783f9ca70a\n"
    },
    {
      "commit": "b52e4385c403d18a68309e568ac729c787d900c4",
      "tree": "ffeaf6389772780623222f84cd1ad8c241e9c38a",
      "parents": [
        "63f99f4a4e05353de2e8ba3d7bd4d882d716167a"
      ],
      "author": {
        "name": "David \u0027Digit\u0027 Turner",
        "email": "digit@google.com",
        "time": "Tue Jun 19 01:24:17 2012 +0200"
      },
      "committer": {
        "name": "David \u0027Digit\u0027 Turner",
        "email": "digit@google.com",
        "time": "Tue Jun 26 10:39:55 2012 +0200"
      },
      "message": "linker: improve loadable segment protection.\n\nUse the functions in linker_phdr.c to load the PT_LOAD segments\nin memory, and toggle their mapping\u0027s writable protection bit\nas needed. In particular:\n\n  - when loading a library, load the segments then unprotected\n    them to allow relocations to work.\n\n  - when relocating the linker of the executable, unprotect\n    the segments loaded by the kernel to make relocations work\n    too.\n\n  - after all relocations are done, re-protect the segments,\n    and apply GNU RELRO protection if needed.\n\n  - just before calling the destructors, undo the GNU RELRO\n    protection.\n\nChange-Id: I50e709f03958204b8d6140c0f51ebe24fe089a1b\n"
    },
    {
      "commit": "63f99f4a4e05353de2e8ba3d7bd4d882d716167a",
      "tree": "a7a3af579dc0f14191c014543d889237e69916f8",
      "parents": [
        "8941cfa17a60133f3896b84f6517aa849bafb050"
      ],
      "author": {
        "name": "David \u0027Digit\u0027 Turner",
        "email": "digit@google.com",
        "time": "Tue Jun 19 00:08:39 2012 +0200"
      },
      "committer": {
        "name": "David \u0027Digit\u0027 Turner",
        "email": "digit@google.com",
        "time": "Tue Jun 26 10:39:55 2012 +0200"
      },
      "message": "linker: simplify code for dynamic and ARM exidx sections.\n\nThis moves the code that determines where the .dynamic and .ARM.exidx\nsections are to a single place in soinfo_link_image().\n\nChange-Id: I98adcb440577bed86442349f03f3c629c945efec\n"
    },
    {
      "commit": "bea23e59f7145537fd4e600ae67fa92a798872cf",
      "tree": "b3e7eb1fccbb6a8e0966eed9ec8e62d245f55980",
      "parents": [
        "23363ed7503c25ef4024ce0d517f7415c096645d"
      ],
      "author": {
        "name": "David \u0027Digit\u0027 Turner",
        "email": "digit@google.com",
        "time": "Mon Jun 18 23:38:46 2012 +0200"
      },
      "committer": {
        "name": "David \u0027Digit\u0027 Turner",
        "email": "digit@google.com",
        "time": "Mon Jun 25 11:52:40 2012 +0200"
      },
      "message": "linker: rename load_offset to load_bias.\n\nThis patch changes the definition of the \u0027load_offset\u0027 field\nin struct soinfo. The field is renamed because it is not the\nbasic load bias to add to every p_vaddr value read from the ELF\nfile to get the corresponding memory address.\n\nThis also slightly simplifies the relocation code.\n\n+ Fix for proper load_bias computation for relocatable executables.\n\nChange-Id: I72502c75a70751cba324deee7d313ae61f96609e\n"
    },
    {
      "commit": "23363ed7503c25ef4024ce0d517f7415c096645d",
      "tree": "2892f3246f211cf3c5a4d17ecec3194d00294bda",
      "parents": [
        "a6545f46784e67edd5dbcd2bb714c60549f9192d"
      ],
      "author": {
        "name": "David \u0027Digit\u0027 Turner",
        "email": "digit@google.com",
        "time": "Mon Jun 18 18:13:49 2012 +0200"
      },
      "committer": {
        "name": "David \u0027Digit\u0027 Turner",
        "email": "digit@google.com",
        "time": "Mon Jun 25 11:52:40 2012 +0200"
      },
      "message": "linker: avoid mapping the whole library before load.\n\nThis patch changes the load_library() function in the\ndynamic linker to avoid reserving a huge read-only\naddress-space range just to read the ELF header and\nprogram header (which are typically very small and easily\nfit in the first page).\n\nInstead, we use the functions in linker_phdr.c to only\nload the data that we need in a temporary mmap-allocated\npage of memory, which we release when the function exits.\n\nThis avoids issues when loading very large libraries, or\nsimply debug versions that only need to load a tiny percentage\nof their overall file content in RAM.\n\nChange-Id: Id3a189fad2119a870a1b3d43dd81380c54ea6044\n"
    },
    {
      "commit": "a6545f46784e67edd5dbcd2bb714c60549f9192d",
      "tree": "c085649fb2772c21fa01b0dd750038cb41251073",
      "parents": [
        "c1bd559d5b0fdcc25db2b6ae2705914103b24699"
      ],
      "author": {
        "name": "David \u0027Digit\u0027 Turner",
        "email": "digit@google.com",
        "time": "Mon Jun 18 11:15:54 2012 +0200"
      },
      "committer": {
        "name": "David \u0027Digit\u0027 Turner",
        "email": "digit@google.com",
        "time": "Mon Jun 25 11:52:40 2012 +0200"
      },
      "message": "linker: Add PAGE_START/OFFSET/END convenience macros\n\nThis patch adds a few macros related to memory pages to help\nclarify some of the code in linker.c\n\nChange-Id: I36c727132d257b1497398dd0a9e8a5a4505467ca\n"
    },
    {
      "commit": "c1bd559d5b0fdcc25db2b6ae2705914103b24699",
      "tree": "14593885df4f31db54a2c615febf4031cc8ea8d4",
      "parents": [
        "20bc061dc7a03249c90f8765ae757395587ce4f1"
      ],
      "author": {
        "name": "David \u0027Digit\u0027 Turner",
        "email": "digit@google.com",
        "time": "Tue Jun 19 11:21:29 2012 +0200"
      },
      "committer": {
        "name": "David \u0027Digit\u0027 Turner",
        "email": "digit@google.com",
        "time": "Mon Jun 25 11:52:40 2012 +0200"
      },
      "message": "linker: New sources to manage the ELF program header table.\n\nThis patch introduces two new source files containing a set of functions\nto manage the program header table in an ELF binary, including the ability\nto load PT_LOAD segments, and apply PT_GNU_RELRO protection.\n\nNote: the files are not used currently, this will appear in a series\n      of future patches that will gradually modify linker.c to use\n      the phdr_table_xxx functions properly.\n\nChange-Id: Ia3d4c1ff5fc3e265d8258b64b492f4e643f51bdc\n"
    }
  ],
  "next": "20bc061dc7a03249c90f8765ae757395587ce4f1"
}
