)]}'
{
  "log": [
    {
      "commit": "d3920b3a996b358e48232f417aa0a1e44a60f155",
      "tree": "b0520d0d300dbca1e6e54a9a7c26e6d2cd81ed08",
      "parents": [
        "f6afd3b670e23f56bf341d12136416aee17ea249"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Feb 07 18:39:34 2013 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Feb 08 11:16:13 2013 -0800"
      },
      "message": "Switch to using AT_RANDOM for the stack guards.\n\nBug: 7959813\nChange-Id: I8db4b8912ba649bfe668c6f22aa44690ddd401a2\n"
    },
    {
      "commit": "42b2c6a5eed5e4ef35315b8cd32d1355f12a69b6",
      "tree": "0fb55a369b620ef79cfa103f67a5184f067dadeb",
      "parents": [
        "d32fdbaf03f688497adbec885e85c0a69f7a4542"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Feb 07 10:14:39 2013 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Feb 07 11:44:21 2013 -0800"
      },
      "message": "Clean up the argc/argv/envp/auxv handling.\n\nThere\u0027s now only one place where we deal with this stuff, it only needs to\nbe parsed once by the dynamic linker (rather than by each recipient), and it\u0027s\nnow easier for us to get hold of auxv data early on.\n\nChange-Id: I6314224257c736547aac2e2a650e66f2ea53bef5\n"
    },
    {
      "commit": "d2b1a7311f023a1c532b5b418fc4bc7bd835be34",
      "tree": "ddac423f79ac86d0076a0d8d251308d253d5cc0b",
      "parents": [
        "d7ff139fec5cec08793523aa97503ade2b13c38e"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Feb 06 11:02:28 2013 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Feb 06 11:02:28 2013 -0800"
      },
      "message": "Remove partial implementation of MIPS non-PIC support.\n\nChange-Id: I3c287e52aae10559508174e73113367aea40e5c2\n"
    },
    {
      "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": "36bd371e26c716cbc18e11801b13eff0352d91b0",
      "tree": "b63e06f7a65f3ac2df09449bb65172644f230386",
      "parents": [
        "ba117e4172fe6f160bf5f4d58b37e12c08c34245"
      ],
      "author": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Wed Jan 16 13:13:22 2013 -0800"
      },
      "committer": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Wed Jan 16 13:16:42 2013 -0800"
      },
      "message": "Revert \"stack protector: use AT_RANDOM\"\n\nThe AT_RANDOM changes broke setuid / setgid executables\nsuch as \"ping\". When the linker executes a setuid program,\nit cleans the environment, removing any invalid environment\nentries, and adding \"NULL\"s to the end of the environment\narray for each removed variable. Later on, we try to determine\nthe location of the aux environment variable, and get tripped\nup by these extra NULLs.\n\nReverting this patch will get setuid executables working again,\nbut getauxval() is still broken for setuid programs because of\nthis bug.\n\nThis reverts commit e3a49a8661125f24aec8a1453e54b3b78005e21e.\n\nChange-Id: I05c58a896b1fe32cfb5d95d43b096045cda0aa4a\n"
    },
    {
      "commit": "e3a49a8661125f24aec8a1453e54b3b78005e21e",
      "tree": "a6a1be7dbdf1901db051fcfa1bd19f823e7a7f2b",
      "parents": [
        "14e1975e13c197180ed0481f305f83a362b16a24"
      ],
      "author": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Mon Jan 14 14:46:26 2013 -0800"
      },
      "committer": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Wed Jan 16 10:09:52 2013 -0800"
      },
      "message": "stack protector: use AT_RANDOM\n\nPopulate the stack canaries from the kernel supplied\nAT_RANDOM value, which doesn\u0027t involve any system calls.\nThis is slightly faster (6 fewer syscalls) and avoids\nunnecessarily reading /dev/urandom, which depletes entropy.\n\nBug: 7959813\n\nChange-Id: If2b43100a2a9929666df3de56b6139fed969e0f1\n"
    },
    {
      "commit": "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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "20bc061dc7a03249c90f8765ae757395587ce4f1",
      "tree": "41bf1f05ba88f835bd7a47843c4757ed356e4b0c",
      "parents": [
        "63d0ceec75927155947c07bc45cb9fed5e527922"
      ],
      "author": {
        "name": "Evgeniy Stepanov",
        "email": "eugenis@google.com",
        "time": "Fri Jun 22 14:52:52 2012 +0400"
      },
      "committer": {
        "name": "Evgeniy Stepanov",
        "email": "eugenis@google.com",
        "time": "Fri Jun 22 14:56:01 2012 +0400"
      },
      "message": "Add module base to main executable\u0027s ARM_exidx.\n\nBUG:6697872\n\nChange-Id: I448f4b86397307086231776da38a7af334a75fe5\n"
    },
    {
      "commit": "16084168111cd7d2ac8a6b92e6fa6df5696928a5",
      "tree": "2fdb97283d519d1a54a79962509b54af73048130",
      "parents": [
        "ca622f57480f996f1d7b8d8660fba9e6d717db2d"
      ],
      "author": {
        "name": "David \u0027Digit\u0027 Turner",
        "email": "digit@google.com",
        "time": "Tue Jun 12 16:25:37 2012 +0200"
      },
      "committer": {
        "name": "David \u0027Digit\u0027 Turner",
        "email": "digit@google.com",
        "time": "Wed Jun 13 22:47:20 2012 +0200"
      },
      "message": "linker: small code-cleanup\n\nThis patch adds to make the linker a little bit easier to understand\nby making all functions that acts on a sofino object with a soinfo_\nprefix.\n\nThis is to more easily distinguish functions that operate on global\nstate, and those that operate on individual libraries.\n\nThis should be purely stylistic, i.e. no feature/behaviour change.\n\nChange-Id: Ie510d13d743aa4317644caefa9910b8af7e84f44\n"
    },
    {
      "commit": "f186a1819a4489c8d73485042670a3002742b683",
      "tree": "aaefa1f83fcb5357ab0d4535a2400a3f27fb1cdb",
      "parents": [
        "31431f454a9d3d3dde46de0e3c39cc409a39c436"
      ],
      "author": {
        "name": "Ji-Hwan Lee",
        "email": "jihwan@google.com",
        "time": "Thu May 31 20:20:36 2012 +0900"
      },
      "committer": {
        "name": "Ji-Hwan Lee",
        "email": "jihwan@google.com",
        "time": "Mon Jun 04 07:44:10 2012 -0700"
      },
      "message": "Support non-zero p_vaddr in first PT_LOAD segment\n\nBefore changing mmap() permission to PROT_NONE in alloc_mem_region(),\nsuch libraries once worked with a bug that uses mmap\u0027ed region outside of\nmemory region allocated by alloc_mem_region().  This possibly incurs\nSIGSEGV because it can overwrite memory region of previously loaded\nlibrary, but it sometimes worked, depending on loading order.\n\nAfter PROT_NONE, this caused SIGSEGV earlier during calculation of\nsi-\u003ephdr in load_library(), but this was fixed by:\n\n    75917c84d16c35b8fceff6977fa717a3de9ef65d  Use mmap to read an ...\n\nNow the behaviour is the same as before applying PROT_NONE in\nalloc_mem_region().\n\nThis CL fixed the original issue, supporting shared libraries that have\nnon-zero p_vaddr in first (\u003d with lowest p_vaddr) PT_LOAD segment.\n\nBug: 6561258\nChange-Id: Ib6176dd3e44c4d99a340eb1cbd16fb037586b0bc\n"
    },
    {
      "commit": "75917c84d16c35b8fceff6977fa717a3de9ef65d",
      "tree": "a599da04e2e062dc747d27eed333b774b3df9cbb",
      "parents": [
        "15ed08d065e865c7a1a2937e429a1fe80a870461"
      ],
      "author": {
        "name": "Ji-Hwan Lee",
        "email": "jihwan@google.com",
        "time": "Fri May 25 22:36:00 2012 +0900"
      },
      "committer": {
        "name": "Ji-Hwan Lee",
        "email": "jihwan@google.com",
        "time": "Sat May 26 06:15:50 2012 +0900"
      },
      "message": "Use mmap to read an initial ELF header of library\n\nAlso, fixes SIGSEV during calculation of si-\u003ephdr in load_library(),\nwhich is caused by accessing PHDR area, which is not guaranteed to be\nloaded.\n\nNote that this usually does not happen because program header area is\ncovered by immediately following PT_LOAD entry.  But it does not hold\nalways.\n\nBug: 6561258\nChange-Id: Ie376253c773b5420279ca89044e81b1aad5a5736\n"
    },
    {
      "commit": "94179a509ee3f6ba7b4ba45fb90477b01049dab8",
      "tree": "c26445b77fe8d4b289208db58f754deb4c2d16cf",
      "parents": [
        "baeacba04dc09ab269cd75806fdefab7f4a6505e"
      ],
      "author": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Mon Apr 23 16:50:00 2012 -0700"
      },
      "committer": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Mon Apr 23 16:50:34 2012 -0700"
      },
      "message": "linker: remove STB_LOCAL hack\n\nThe ARM static linker wasn\u0027t properly handling __exidx_start\nand __exidx_end symbols. Now that the static linker has been fixed,\nwe don\u0027t need the dynamic linker to work around this problem.\n\nChange-Id: I041b94903609fafab33663a7d441a5e70b7ffcdd\n"
    },
    {
      "commit": "1a78fbb5c8228e4aea2a516818828b76044310f2",
      "tree": "4de785711dbfa8923d721f9180473328b6228a5c",
      "parents": [
        "d5099016f70b5acbfeb969787687099df703a4f4"
      ],
      "author": {
        "name": "Evgeniy Stepanov",
        "email": "eugenis@google.com",
        "time": "Thu Mar 22 18:01:53 2012 +0400"
      },
      "committer": {
        "name": "Evgeniy Stepanov",
        "email": "eugenis@google.com",
        "time": "Fri Apr 13 00:08:11 2012 +0400"
      },
      "message": "Initialize TLS before any application code is run.\n\nSince e19d702b8e33, dlsym and friends use recursive mutexes that\nrequire the current thread id, which is not available before the libc\nconstructor. This prevents us from using dlsym() in .preinit_array.\n\nThis change moves TLS initialization from libc constructor to the earliest\npossible point - immediately after linker itself is relocated. As a result,\npthread_internal_t for the initial thread is available from the start.\n\nAs a bonus, values stored in TLS in .preinit_array are not lost when libc is\ninitialized.\n\nChange-Id: Iee5a710ee000173bff63e924adeb4a4c600c1e2d\n"
    },
    {
      "commit": "7f03d2356f1380637d5a38fca20d2cd9b3f6c900",
      "tree": "80fffbb1d4b4d8c3c85610fd312ccc32a9d15dc0",
      "parents": [
        "8777e2f54e3743b3f1361f30bed8932b17959644"
      ],
      "author": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Tue Apr 10 13:42:06 2012 -0700"
      },
      "committer": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Tue Apr 10 13:49:35 2012 -0700"
      },
      "message": "Revert \"linker: remove STB_LOCAL hack\"\n\nThis reverts commit 61ff83475c6f3a3bb05a01ac89d668a331bfe9e9.\n\nThis code is harmless, and only applies to the linker, so\nthere\u0027s no harm in keeping it in the tree a little bit longer.\nLet\u0027s roll this back while we try to figure out the root cause\nof bug 6314858.\n\nBug: 6314858\nChange-Id: I9f5ed81d23a7abe273baf792aa8a0a2839ef094c\n"
    },
    {
      "commit": "61ff83475c6f3a3bb05a01ac89d668a331bfe9e9",
      "tree": "bcd5da23d32a73c9fe88b054e14cbd597db19690",
      "parents": [
        "048822d6afa12683e693a459e6efa558a1f39d33"
      ],
      "author": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Mon Apr 09 12:50:17 2012 -0700"
      },
      "committer": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Mon Apr 09 12:50:17 2012 -0700"
      },
      "message": "linker: remove STB_LOCAL hack\n\nThe ARM static linker wasn\u0027t properly handling __exidx_start\nand __exidx_end symbols. Now that the static linker has been fixed,\nwe don\u0027t need the dynamic linker to work around this problem.\n\nChange-Id: Ic567122b6c7746cc016795e2befba2c6bd7c0478\n"
    },
    {
      "commit": "8c4f3ce8d084e3949d77ad8743593b5c83c3d41c",
      "tree": "4061fa7982521c070a1a9bc688ddfc279e722c08",
      "parents": [
        "3a7ea52f17b68f62fa088d57f96ff24a76f50ea2"
      ],
      "author": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Wed Apr 04 12:43:32 2012 -0700"
      },
      "committer": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Wed Apr 04 12:43:32 2012 -0700"
      },
      "message": "linker: surround \"debug_verbosity\" by \"#if LINKER_DEBUG\"\n\nAvoid executing useless code when we\u0027re not compiled\nwith debugging support.\n\nChange-Id: Iea1821b241acacdf65d1a91d743356058dfef273\n"
    },
    {
      "commit": "aac0dc97a9ad91231fa89878e745548d693366c1",
      "tree": "f6e117bc03dc1662455d4cfc8c62245e697acbb8",
      "parents": [
        "0814eea3ec6767e2957da9b32261ef52ec881fee",
        "d73b5cafa0ef381f7c63a75e968fb7eec8e9f555"
      ],
      "author": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Tue Mar 20 10:52:42 2012 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Mar 20 10:52:42 2012 -0700"
      },
      "message": "Merge \"linker: fix off-by-one error in GNU_RELRO handling\""
    },
    {
      "commit": "d73b5cafa0ef381f7c63a75e968fb7eec8e9f555",
      "tree": "d28334136a7a2580531c85ddc4ddaef7006675b3",
      "parents": [
        "adb6989786dcc7248d51a3a5a76221b93951f84a"
      ],
      "author": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Fri Mar 16 11:38:58 2012 -0700"
      },
      "committer": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Tue Mar 20 09:24:58 2012 -0700"
      },
      "message": "linker: fix off-by-one error in GNU_RELRO handling\n\nFix a bug where the GNU_RELRO end address could be exactly\nthe end of the loadable segment.\n\nChange-Id: If6c43acabc06e9aff9217c0f6016e158b28bb41f\n"
    },
    {
      "commit": "6625986f3a5c7989b45022413c851f611783f361",
      "tree": "de566f83421e8b4c31d7bab4fdbbc0e0ae51fe79",
      "parents": [
        "adb6989786dcc7248d51a3a5a76221b93951f84a"
      ],
      "author": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Fri Mar 16 13:06:12 2012 -0700"
      },
      "committer": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Fri Mar 16 13:06:12 2012 -0700"
      },
      "message": "linker: initially reserved memory as PROT_NONE\n\nWhen the dynamic linker loads a shared library into memory, it\ninitially allocates a chunk of memory. The memory is then carved\ninto smaller chunks for each LOAD region, and appropriate memory\nprotections applied.\n\nModify the initial memory allocation so that the pages are mapped\nas PROT_NONE, rather than PROT_READ / PROT_EXEC. This ensures that\ngaps between LOAD regions are not inadvertantly readable / executable.\n\n(Long term, we should munmap() these gaps entirely)\n\nChange-Id: If128a203ccc6fe12dcbbd2bfe0cf13a2045675af\n"
    },
    {
      "commit": "9ec0f03a0d0b17bbb94ac0b9fef6add28a133c3a",
      "tree": "dde5e86b6ae51f92087a9034750c282e11884164",
      "parents": [
        "1fe109ecf3b1acd10d55091f3e0eed7efeca98f1"
      ],
      "author": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Tue Feb 28 10:40:00 2012 -0800"
      },
      "committer": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Mon Mar 05 16:44:42 2012 -0800"
      },
      "message": "Add relro support\n\nAdd support for PT_GNU_RELRO. This allows the static linker to\nindicate that certain regions of memory should be marked as\n\"read-only\" after dynamic linking is complete.\n\nSee:\n  * http://www.akkadia.org/drepper/nonselsec.pdf (section 6)\n  * http://tk-blog.blogspot.com/2009/02/relro-not-so-well-known-memory.html\n\nNote that this change has no effect on Android right now, because\nwe don\u0027t compile our code with relro enabled.\n\nChange-Id: I6541f8775367e8558b4388f7d105b1ae6e8f046b\n"
    },
    {
      "commit": "25b7a16a6ee73248192909862f03f95d2363ad14",
      "tree": "97d420779e6b79917ba5ac65b9bc182a8ceaa68d",
      "parents": [
        "b118b9c5cd6a99fd3368a01ee9de8849d869afc7",
        "c4cb87f367fc33b36c9988b4f42fc07876abccd1"
      ],
      "author": {
        "name": "Jean-Baptiste Queru",
        "email": "jbq@google.com",
        "time": "Wed Feb 01 09:46:08 2012 -0800"
      },
      "committer": {
        "name": "Jean-Baptiste Queru",
        "email": "jbq@google.com",
        "time": "Wed Feb 01 09:46:08 2012 -0800"
      },
      "message": "Merge c4cb87f3\n\nChange-Id: I4cc14eba43fde75a7702fdc7ad07d3d949e9c092\n"
    },
    {
      "commit": "70b1668a76d3b719ae690903ea790fda964a5458",
      "tree": "674232e6152fa67c0db8b07b0083bb3ac6c9bd8c",
      "parents": [
        "e80044455961005ac95e405c8d553f2418d8e50c"
      ],
      "author": {
        "name": "David \u0027Digit\u0027 Turner",
        "email": "digit@google.com",
        "time": "Mon Jan 30 17:17:58 2012 +0100"
      },
      "committer": {
        "name": "David \u0027Digit\u0027 Turner",
        "email": "digit@android.com",
        "time": "Tue Jan 31 20:28:23 2012 +0100"
      },
      "message": "remove obsolete SuperH support\n\nWe don\u0027t have a toolchain anymore, we don\u0027t have working original\nkernel headers, and nobody is maintaining this so there is really\nno point in keeping this here. Details of the patch:\n\n- removed code paths from Android.mk files related to the SuperH\n  architecture (\"sh\")\n\n- removed libc/arch-sh, linker/arch-sh, libc/kernel/arch-sh\n\n- simplified libc/SYSCALLS.TXT\n\n- simplified the scripts in libc/tools/ and libc/kernel/tools\n\nChange-Id: I26b0e1422bdc347489e4573e2fbec0e402f75560\n\nSigned-off-by: David \u0027Digit\u0027 Turner \u003cdigit@android.com\u003e\n"
    },
    {
      "commit": "f5d1693e3ca8cfd089e6259f320044833eae2991",
      "tree": "ff93255f90ae3cfdca7256ebb32e4f1da0d0eac2",
      "parents": [
        "632c07c09297324565fd7adeda7322f1fafb3a1a"
      ],
      "author": {
        "name": "Jesse Hall",
        "email": "jessehall@google.com",
        "time": "Mon Jan 30 15:39:57 2012 -0800"
      },
      "committer": {
        "name": "Jesse Hall",
        "email": "jessehall@google.com",
        "time": "Mon Jan 30 15:39:57 2012 -0800"
      },
      "message": "Fix recursive ELF constructor check\n\nThe flag to avoid calling ELF constructors recursively (in the case\nof recursive .so dependencies) was being set after the dangerous\nrecursive constructor call had already been made.\n\nThis fixes the libc\u0027s debug malloc implementation.\n\nChange-Id: I5e601f0ea19ab1df81b8b1ad4df25c3eab0ccda4\n"
    },
    {
      "commit": "f20d59e69137336a2555844ce9f74ece96ad60ea",
      "tree": "b2327c6280733482bb036a8a5c47256bba47eb8e",
      "parents": [
        "c3650d6a4be812989bcc6b4938af6da644168a09",
        "c83c1da54831ef1c9ff59cf9df8d5c0173893ee5"
      ],
      "author": {
        "name": "Jean-Baptiste Queru",
        "email": "jbq@google.com",
        "time": "Fri Jan 20 17:23:52 2012 -0800"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Fri Jan 20 17:23:52 2012 -0800"
      },
      "message": "am c83c1da5: am cee8425f: Merge \"Move variable declaration on its own line\"\n\n* commit \u0027c83c1da54831ef1c9ff59cf9df8d5c0173893ee5\u0027:\n  Move variable declaration on its own line\n"
    },
    {
      "commit": "c3650d6a4be812989bcc6b4938af6da644168a09",
      "tree": "c1b83b447f0daf79de0c1d804658d939e2060bf4",
      "parents": [
        "73fa5fdaf9ec27741a17b0b793ff6890e6dcecd5",
        "5b44655f22dd05c7cd8afcd218102616a6f5f4da"
      ],
      "author": {
        "name": "Jean-Baptiste Queru",
        "email": "jbq@google.com",
        "time": "Fri Jan 20 17:23:51 2012 -0800"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Fri Jan 20 17:23:51 2012 -0800"
      },
      "message": "am 5b44655f: am 7e6a5773: Merge \"Use the AT_SECURE auxv flag to determine whether to enable secure mode.\"\n\n* commit \u00275b44655f22dd05c7cd8afcd218102616a6f5f4da\u0027:\n  Use the AT_SECURE auxv flag to determine whether to enable secure mode.\n"
    },
    {
      "commit": "bb44055d0a3515410f45417d5b0e047cc60f0dc6",
      "tree": "7f90e07be004732ed16c1ea70c6d637d5f2a808c",
      "parents": [
        "7e6a5773133e4b65d678535418b1f5d594859da2"
      ],
      "author": {
        "name": "Stephen Smalley",
        "email": "sds@tycho.nsa.gov",
        "time": "Fri Jan 20 10:59:15 2012 -0800"
      },
      "committer": {
        "name": "Jean-Baptiste Queru",
        "email": "jbq@google.com",
        "time": "Fri Jan 20 10:59:15 2012 -0800"
      },
      "message": "Move variable declaration on its own line\n\nChange-Id: Ied54ffabccdc867ea4e124a0f0324a217270d6e7\n"
    },
    {
      "commit": "861b42a2d83f72f11b4271b5b8431595a097c7c2",
      "tree": "cde9712f4d6e19dcc2a81f140845567bdba3b53d",
      "parents": [
        "eae1f1fba33cb105302227b044a14e5abcbe55e7"
      ],
      "author": {
        "name": "Stephen Smalley",
        "email": "sds@tycho.nsa.gov",
        "time": "Fri Jan 13 07:48:11 2012 -0500"
      },
      "committer": {
        "name": "Stephen Smalley",
        "email": "sds@tycho.nsa.gov",
        "time": "Fri Jan 20 13:35:57 2012 -0500"
      },
      "message": "Use the AT_SECURE auxv flag to determine whether to enable secure mode.\n\nThe Linux kernel provides an AT_SECURE auxv flag to inform userspace\nwhether or not a security transition has occurred.  This is more reliable\nthan directly checking the uid/gid against the euid/egid, because it covers\nnot only setuid/setgid but also file capabilities, SELinux, and AppArmor\nsecurity transitions.  It is also a more efficient test since it does\nnot require any additional system calls.\n\nChange-Id: I9752a4f6da452273258d2876d13b05e402fb0409\n"
    },
    {
      "commit": "e83c56dfbb6a9a61f0f18031620322af97e80162",
      "tree": "4d173357ad7cffa5e8e01066653afde7ed2473d5",
      "parents": [
        "334379dadaf481785909367cfc26600514b6119c"
      ],
      "author": {
        "name": "Evgeniy Stepanov",
        "email": "eugenis@google.com",
        "time": "Wed Dec 21 13:03:54 2011 +0400"
      },
      "committer": {
        "name": "Evgeniy Stepanov",
        "email": "eugenis@google.com",
        "time": "Tue Jan 10 13:30:41 2012 +0400"
      },
      "message": "Execute .preinit_array before any shared object initialization functions.\n\nThis change makes linker handling of .preinit_array compliant with the\nSystem V ABI:\n\n\"These [pre-initialization] functions are executed after the dynamic linker has\nbuilt the process image and performed relocations but before any shared object\ninitialization functions.\"\nhttp://www.sco.com/developers/gabi/latest/ch5.dynamic.html#init_fini\n\nChange-Id: Iebfee22bb1ebe1d7c7e69cb4686e4ebae0dfc4bb\n"
    },
    {
      "commit": "253b7631606e47de720f38082394a5791fe4bf0d",
      "tree": "fd5a8b1aecf4768de9920d8285e7ef9e5d5f5e98",
      "parents": [
        "bec5dec947b1ad097c200888365a3ec61f9e7a28"
      ],
      "author": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Mon Dec 05 16:09:30 2011 -0800"
      },
      "committer": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Mon Dec 05 16:09:30 2011 -0800"
      },
      "message": "get rid of unused \"main\" function.\n\nconfuses gdb.\n\nChange-Id: I1c64357ce122fe5a2564ee96bb4caa32b733f6ea\n"
    },
    {
      "commit": "0e0bd586319b25e6e8e797b426a0adcce7612577",
      "tree": "19bb88e8516738784a57ee744c0041834f79c86b",
      "parents": [
        "e796d39d80d97ebe0e36476dff3189d155a99c98",
        "1ad08626a143dc684e92f56754c7176cc4914ce8"
      ],
      "author": {
        "name": "Zhenghua Wang",
        "email": "zhenghua.wang@intel.com",
        "time": "Wed Nov 30 10:50:57 2011 -0800"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Wed Nov 30 10:50:57 2011 -0800"
      },
      "message": "am 1ad08626: am 897815a1: bionic: add machine type check\n\n* commit \u00271ad08626a143dc684e92f56754c7176cc4914ce8\u0027:\n  bionic: add machine type check\n"
    },
    {
      "commit": "897815a1feff230be3ea42655a77dcbb9a8dcca9",
      "tree": "e2cbe576afb2d97fbecaa59e1b4f8229d6aca00b",
      "parents": [
        "faa7c1d29f9ed0b3eb252bb0bd43e7596eed5d9c"
      ],
      "author": {
        "name": "Zhenghua Wang",
        "email": "zhenghua.wang@intel.com",
        "time": "Wed Oct 19 00:29:14 2011 +0800"
      },
      "committer": {
        "name": "Jean-Baptiste Queru",
        "email": "jbq@google.com",
        "time": "Tue Nov 29 17:01:08 2011 -0800"
      },
      "message": "bionic: add machine type check\n\nandroid linker doesn\u0027t check machine type, it may load some\nlibraries which it doesn\u0027t support sometimes.\n\nAuthor: Zhenghua Wang \u003czhenghua.wang@intel.com\u003e\nSigned-off-by: Bruce Beare \u003cbruce.j.beare@intel.com\u003e\n"
    },
    {
      "commit": "7e2daefe6cec40e143f519c46aec877ee053b407",
      "tree": "5d7ddec5e8b274d86073673d5609fdc33b2e81fb",
      "parents": [
        "b38522983712432ba143c046343ba4fa01baf7c8",
        "468319ce4f3f7383d788b76c09cda2a405311f36"
      ],
      "author": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Wed Nov 16 10:43:56 2011 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Nov 16 10:43:56 2011 -0800"
      },
      "message": "Merge \"Make the linker relocatable.\""
    },
    {
      "commit": "8180b08fb2f27052f9df2ae4787bb5bf409f13e0",
      "tree": "edcb7742bc8dab8519c535849f21155799d78ef2",
      "parents": [
        "4b469eae40368913b2841b390dada6c58296c602"
      ],
      "author": {
        "name": "David \u0027Digit\u0027 Turner",
        "email": "digit@google.com",
        "time": "Tue Nov 15 17:17:28 2011 +0100"
      },
      "committer": {
        "name": "David \u0027Digit\u0027 Turner",
        "email": "digit@google.com",
        "time": "Tue Nov 15 17:17:28 2011 +0100"
      },
      "message": "linker: Fix the computation of si-\u003ebase\n\nThe computation of si-\u003ebase assumed that the first entry in the\nprogram header table is a PT_PHDR. This results in the dynamic\nlinker crashing with a SIGSEGV/MAPERR when trying to load some\nof the NDK unit test programs, which happen to have an EXIDX\nheader first, followed byu a PHDR one.\n\nThis patch fixes the computation by parsing the program header\ntable, looking explicitely for the PHDR entry. This fixes the\nload of the NDK unit test programs, and doesn\u0027t affect system\nlibraries.\n\nChange-Id: Id18ea6037dbe950b5abbbce816c2960321f0b81d\n"
    },
    {
      "commit": "468319ce4f3f7383d788b76c09cda2a405311f36",
      "tree": "75be29e8c9b3f67fcfe51c8ec84fe1520282f8a9",
      "parents": [
        "0aa8289c6fddda6502fa97c8789341f1462c4224"
      ],
      "author": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Fri Nov 11 15:53:17 2011 -0800"
      },
      "committer": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Fri Nov 11 18:01:53 2011 -0800"
      },
      "message": "Make the linker relocatable.\n\nPreviously, the linker always loaded itself into the same\nlocation in memory, which inhibited the effectiveness of Android\u0027s\nASLR implementation. Modify the linker code so it can be relocatable\nand link itself at runtime.\n\nChange-Id: Ia80273d7a00ff648b4da545f4b69debee6343968\n"
    },
    {
      "commit": "8e8a7b1f0fb9daf8d4434e18a9fff5c28f849cb8",
      "tree": "94d387ed8c58504162550b1b2ae8c93f3dfffa30",
      "parents": [
        "994e9a5ed1c4e9f23a8bed79caea684eaa270027"
      ],
      "author": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Thu Nov 03 09:25:06 2011 -0700"
      },
      "committer": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Thu Nov 03 09:25:06 2011 -0700"
      },
      "message": "Revert \"Make the linker relocatable.\"\n\nThis reverts commit 994e9a5ed1c4e9f23a8bed79caea684eaa270027.\n\nBroke x86 build.\n"
    },
    {
      "commit": "994e9a5ed1c4e9f23a8bed79caea684eaa270027",
      "tree": "0c860675ec867f02616a74cac6d2adfc58b07d10",
      "parents": [
        "29992cf9787496216440ed9c6c60dc40377aebe1"
      ],
      "author": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Tue Nov 01 10:51:22 2011 -0700"
      },
      "committer": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Wed Nov 02 16:20:06 2011 -0700"
      },
      "message": "Make the linker relocatable.\n\nPreviously, the linker always loaded itself into the same\nlocation in memory, which inhibited the effectiveness of Android\u0027s\nASLR implementation. Modify the linker code so it can be relocatable\nand link itself at runtime.\n\nChange-Id: I90d064743abdd29450ac0482ed28752b2196286c\n"
    },
    {
      "commit": "d9ad62343c2db6b66a5fa597c9b20a6faabd7a9a",
      "tree": "32c3b060bfdc7f792ddb0d0cf95007dc2e809137",
      "parents": [
        "b0641d4a446fa98c72fd6252e5a5ca7e44c41f1f"
      ],
      "author": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Thu Oct 20 14:57:56 2011 -0700"
      },
      "committer": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Sat Oct 22 13:19:23 2011 -0700"
      },
      "message": "Add linker support for PIE\n\nModify the dynamic linker so that executables can be loaded\nat locations other than 0x00000000.\n\nModify crtbegin* so that non-PIC compilant \"thumb interwork\nveneers\" are not created by the linker.\n\nBug: 5323301\nChange-Id: Iece0272e2b708c79034f302c20160e1fe9029588\n"
    },
    {
      "commit": "bda5da074eab4bdf374e1f4a19d480c62c72f5ff",
      "tree": "87a4c2fd35e6b071476d4a5fd02aca7c61c6e3f9",
      "parents": [
        "00964912745f0bb7e081f84ddcc74940f973149f"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Tue Sep 27 22:30:19 2011 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Wed Sep 28 12:17:34 2011 -0700"
      },
      "message": "fix prototype of dladdr\n\nthis breaks C++ source code in particular.\n\nChange-Id: Ie06b5d31d23b5455e6950c470adc64dd5e7784df\n"
    },
    {
      "commit": "96e5faccdc5616bb6d4a55d50a0e6148f99d943b",
      "tree": "c7e923bc66241f56fb6b83899f8362bbcb3cf562",
      "parents": [
        "09b36dc7a939c68b519fc0f46d6dad25c5f7637c",
        "91966c30efbdc7feecd6c45a46ab488e715c0a35"
      ],
      "author": {
        "name": "David \u0027Digit\u0027 Turner",
        "email": "digit@android.com",
        "time": "Tue Aug 30 09:50:54 2011 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Tue Aug 30 09:50:54 2011 -0700"
      },
      "message": "am 91966c30: am 0acdbe08: am 89ea107d: Merge \"linker: allow debugging of constructors\"\n\n* commit \u002791966c30efbdc7feecd6c45a46ab488e715c0a35\u0027:\n  linker: allow debugging of constructors\n"
    },
    {
      "commit": "91966c30efbdc7feecd6c45a46ab488e715c0a35",
      "tree": "6cb4c9461f086e40650f43b6b9af670294e1457e",
      "parents": [
        "35aebd36c771f32656996b02595fad8953f29916",
        "0acdbe0892105d01a38de9baf4e34eef22b8259c"
      ],
      "author": {
        "name": "David \u0027Digit\u0027 Turner",
        "email": "digit@android.com",
        "time": "Mon Aug 29 18:01:05 2011 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Mon Aug 29 18:01:05 2011 -0700"
      },
      "message": "am 0acdbe08: am 89ea107d: Merge \"linker: allow debugging of constructors\"\n\n* commit \u00270acdbe0892105d01a38de9baf4e34eef22b8259c\u0027:\n  linker: allow debugging of constructors\n"
    },
    {
      "commit": "e5ea45547e131ae842b7c79cd45b164470137367",
      "tree": "02b0023da33cca526fb7b628944eb8e0fdc242b5",
      "parents": [
        "c57fd963817afa8894af49d6c98a80d8f9100937"
      ],
      "author": {
        "name": "David \u0027Digit\u0027 Turner",
        "email": "digit@android.com",
        "time": "Sat Aug 27 10:21:01 2011 +0200"
      },
      "committer": {
        "name": "David \u0027Digit\u0027 Turner",
        "email": "digit@android.com",
        "time": "Sat Aug 27 10:21:01 2011 +0200"
      },
      "message": "linker: allow debugging of constructors\n\nThis patch allows the debugging of constructors in shared\nlibraries and executables. It does so by ensuring that the\ncorresponding binary is visible to gdb before running the\nconstructors.\n\nChange-Id: I0a3df726a04ad109944c834dcbba672b85d3991e\n"
    },
    {
      "commit": "48527c3f740a80b45acb5a6efc217f771ae50143",
      "tree": "1c7afd06061ae1d488dd15c0c343e2c562b66ab5",
      "parents": [
        "de75876c3faa6e94ff80f3b9566d8e51b39700ed"
      ],
      "author": {
        "name": "Shih-wei Liao",
        "email": "sliao@google.com",
        "time": "Sun Jul 17 12:32:43 2011 -0700"
      },
      "committer": {
        "name": "Shih-wei Liao",
        "email": "sliao@google.com",
        "time": "Sun Jul 17 12:32:43 2011 -0700"
      },
      "message": "Revert \"Revert \"linker: get rid of the buddy allocator\"\"\n\nThis reverts commit f9a9cda23a6afc1c2dfdfd624cde23b61941eb5e.\nThis revert is promised once b/5039224, b/5036755, b/5036610 are resolved.\n"
    },
    {
      "commit": "f9a9cda23a6afc1c2dfdfd624cde23b61941eb5e",
      "tree": "b0a12123fbfa78be81e8b9c9965e964f593606c0",
      "parents": [
        "7059b1f02ea9197728c851edd9ae0dd7688fa700"
      ],
      "author": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Fri Jul 15 16:12:45 2011 -0700"
      },
      "committer": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Fri Jul 15 16:12:45 2011 -0700"
      },
      "message": "Revert \"linker: get rid of the buddy allocator\"\n\nThis reverts commit 7059b1f02ea9197728c851edd9ae0dd7688fa700.\nBug: 5036610\n"
    },
    {
      "commit": "7059b1f02ea9197728c851edd9ae0dd7688fa700",
      "tree": "ed51d4be5ce65e0cdb9d7d81dc3a68975bdd6e04",
      "parents": [
        "30e30acf106166bf65ad781bb4a63eead1d2c3a6"
      ],
      "author": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Thu Jul 14 12:45:40 2011 -0700"
      },
      "committer": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Thu Jul 14 13:48:13 2011 -0700"
      },
      "message": "linker: get rid of the buddy allocator\n\nCurrently, the Android linker is placing shared libraries into\na well-known spot in memory.  This is interfering with the kernel\u0027s\nASLR support.\n\nThis change stops forcing non-prelinked libraries into a particular\naddress space.\n\nAlso, get rid of FLAG_PRELINKED.  As best I can tell, this flag\nis never used.\n\nChange-Id: I527af12fb54f821c2b5ca7693dbf63d022f8f4ae\n"
    },
    {
      "commit": "1af88c97432c88ec5b39d155e8c296d2a6eb1225",
      "tree": "1d9be3b5daa03386ebc1b93af075600ec1ea1f28",
      "parents": [
        "4b3b89ec763899390b15461dd6617bb4ed6fe846",
        "d004dc9957cd8944d3db8ed92544c8ee65b117ca"
      ],
      "author": {
        "name": "David Turner",
        "email": "digit@android.com",
        "time": "Mon May 02 12:34:57 2011 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Mon May 02 12:34:57 2011 -0700"
      },
      "message": "am d004dc99: Merge \"Use MAP_FIXED when allocating prelinked shared library regions\"\n\n* commit \u0027d004dc9957cd8944d3db8ed92544c8ee65b117ca\u0027:\n  Use MAP_FIXED when allocating prelinked shared library regions\n"
    },
    {
      "commit": "db4bce05493d09a20f1ebc0ab68c82e906327afd",
      "tree": "9aae682c98e2c49e6480b9329b16d5153c030334",
      "parents": [
        "fed58049d50083e4c960d89f4bbd516a181c2d18"
      ],
      "author": {
        "name": "Chris Dearman",
        "email": "chris@mips.com",
        "time": "Thu Mar 10 10:48:14 2011 -0800"
      },
      "committer": {
        "name": "Raghu Gandham",
        "email": "raghu@mips.com",
        "time": "Thu Mar 10 10:48:14 2011 -0800"
      },
      "message": "Use MAP_FIXED when allocating prelinked shared library regions\n\nPrelinked libraries must be mapped to a fixed address. MAP_FIXED is ignored\nfor non-prelinked libraries (si-\u003ebase\u003d\u003d0)\n\nSigned-off-by: Raghu Gandham \u003craghu@mips.com\u003e\n"
    },
    {
      "commit": "72f9a5c374bf559e9c69a62c1d95304f913ef6b2",
      "tree": "9f5e358d45bd2e60589960f031afdaf715a68556",
      "parents": [
        "9c2e97e9d3510f49c6f2697ef47b85f92df524dd"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Thu Feb 10 17:02:21 2011 -0800"
      },
      "committer": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Thu Feb 10 17:02:23 2011 -0800"
      },
      "message": "Increase SO_MAX to accomodate valgrind\n\nsystem_server loads up 87 shared libraries upon start. Running under\nvalgrind pushes this just over the edge of 96. Increase SO_MAX to 128 to\ngive us some more headroom.\n\nChange-Id: Iadceb14ab6d9621bdccd292570d50867828057d9\n"
    },
    {
      "commit": "be5755969d70668bbab0e0c0ed75ebd867189723",
      "tree": "ae81e0c297f23cf98a5492dc9de7073746cbce8a",
      "parents": [
        "d4a65d28d4dd7dab4ad66d2d65903296d183d47c"
      ],
      "author": {
        "name": "David \u0027Digit\u0027 Turner",
        "email": "digit@google.com",
        "time": "Thu Dec 16 19:52:02 2010 +0100"
      },
      "committer": {
        "name": "David \u0027Digit\u0027 Turner",
        "email": "digit@google.com",
        "time": "Mon Dec 20 12:06:45 2010 +0100"
      },
      "message": "linker: Remove unsecure env. variable for setuid programs.\n\nThis removes several unsecure environment variables from the\nenvironment block when the program being loaded is setuid. The\nlist of env. variables is the same than what GLibc uses at this\npoint.\n\nChange-Id: I456d3ea0880fe0d4de0d3c5dd51871dd36e87fd6\n"
    },
    {
      "commit": "fedbcde6ef552e84bf7ce7598bca7dddf1722d6a",
      "tree": "5e8eb35552984b9eab610fc717ae4638966cf90e",
      "parents": [
        "cb99ab98c99291a6c90043009ab8d64ec8058f9d"
      ],
      "author": {
        "name": "Brian Swetland",
        "email": "swetland@google.com",
        "time": "Sun Sep 19 03:39:13 2010 -0700"
      },
      "committer": {
        "name": "Brian Swetland",
        "email": "swetland@google.com",
        "time": "Sun Sep 19 03:39:13 2010 -0700"
      },
      "message": "add /vendor support\n\n- add /vendor/lib to front of default library search path\n- remove long-obsolete /lib from default library search path\n\nChange-Id: I7d33bf899be018e7cc4c213d5790bbd991023a62\n"
    },
    {
      "commit": "a716190241da07f42cf874b04bf044261f36381c",
      "tree": "6fb82682708512110ac0118603056ba94cc1c351",
      "parents": [
        "52e7d3d91ab6a5bab77c5dfb1ed47381fd52f9ba"
      ],
      "author": {
        "name": "Dima Zavin",
        "email": "dima@android.com",
        "time": "Tue Aug 17 15:56:40 2010 -0700"
      },
      "committer": {
        "name": "Dima Zavin",
        "email": "dima@android.com",
        "time": "Tue Aug 17 15:57:55 2010 -0700"
      },
      "message": "linker: fix overwriting the real linker error string\n\nChange-Id: Ia9165fd9aa1951b2bb81d0ac8f5bb3057aded8bd\nSigned-off-by: Dima Zavin \u003cdima@android.com\u003e\n"
    },
    {
      "commit": "6774809b6249d9d4efd982b6e3ca377c84482d9a",
      "tree": "2604b1ff619cc69aea02ac37c39c61d9b0c8c7c2",
      "parents": [
        "9d1f5afc34efb8c10672f765704941036fd40da8"
      ],
      "author": {
        "name": "David \u0027Digit\u0027 Turner",
        "email": "digit@google.com",
        "time": "Wed Jul 21 16:18:21 2010 -0700"
      },
      "committer": {
        "name": "David \u0027Digit\u0027 Turner",
        "email": "digit@google.com",
        "time": "Fri Jul 23 12:16:15 2010 -0700"
      },
      "message": "linker: Support dlopen(NULL, ...) properly.\n\nChange-Id: Icba37823cb350c34848cc466d144c3a0af87c94c\n"
    },
    {
      "commit": "f4394458301909a83b7ee7f3b436c038b7235ea8",
      "tree": "e2647ebf9aa7491c5cb3a96fb00af61ab89f1eae",
      "parents": [
        "bb7928ccdae0cc5766f290e18ab14b07d80c6912"
      ],
      "author": {
        "name": "Jean-Baptiste Queru",
        "email": "jbq@google.com",
        "time": "Wed May 12 10:05:59 2010 -0700"
      },
      "committer": {
        "name": "Jean-Baptiste Queru",
        "email": "jbq@google.com",
        "time": "Wed May 12 10:05:59 2010 -0700"
      },
      "message": "fix build\n\nChange-Id: I243c98e20a250e0d40d481f16af481ff070219fd\n"
    },
    {
      "commit": "bb7928ccdae0cc5766f290e18ab14b07d80c6912",
      "tree": "76468dcde3da9d42bdc3a2146463583e65593205",
      "parents": [
        "f450fa5f991af3c0814f96265cb3b2aafdce2309",
        "c3581dc78a51180d3550d0d04596657cb2db852c"
      ],
      "author": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Wed May 12 09:22:50 2010 -0700"
      },
      "committer": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Wed May 12 09:22:50 2010 -0700"
      },
      "message": "merge from open-source master\n\nChange-Id: Iecfd2bd3069f70bbe508042cc249fcf7ff24800d\n"
    },
    {
      "commit": "4fd42c1dc002fa19349fa0d4ef97757eb1815032",
      "tree": "76b67f6f6f087f8aced1da660754f7f3086c184f",
      "parents": [
        "d791da79432064bc954fedf8d4e4394aaafefe75"
      ],
      "author": {
        "name": "Matt Fischer",
        "email": "matt.fischer@garmin.com",
        "time": "Thu Dec 31 12:09:10 2009 -0600"
      },
      "committer": {
        "name": "Jean-Baptiste Queru",
        "email": "jbq@google.com",
        "time": "Mon May 10 15:09:19 2010 -0700"
      },
      "message": "Added support for LD_PRELOAD\n\nThe LD_PRELOAD environment variable allows the user to specify a list of\nlibraries which should be unconditionally loaded before any others.  This\nmakes possible some useful tricks, such as library interposers.\n\nChange-Id: I433d775ab08ef63a5fbe7b21f87a5642954fc32f\n"
    },
    {
      "commit": "5ef5272be985dfdeafa86077c306f6b64d334240",
      "tree": "bad11901e83b227c7bac5e773ad6e06cf4eda089",
      "parents": [
        "95faecefdea0f55edafdba09052a904df7cd2405",
        "1698d9ebfc7e27271852a1fdf305a2ac37b3ebe4"
      ],
      "author": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Wed Apr 21 09:10:08 2010 -0700"
      },
      "committer": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Wed Apr 21 09:10:08 2010 -0700"
      },
      "message": "merge from open-source master\n\nChange-Id: I518bb4ae9d7269957365561d4d609f22cde519db\n"
    },
    {
      "commit": "1698d9ebfc7e27271852a1fdf305a2ac37b3ebe4",
      "tree": "0affbb40a92f4391db962805610d78e71ac5f043",
      "parents": [
        "350bb359fa5e31e3dfae8be6b1ce7ee3495f0da7"
      ],
      "author": {
        "name": "Matt Fischer",
        "email": "matt.fischer@garmin.com",
        "time": "Thu Dec 31 12:17:56 2009 -0600"
      },
      "committer": {
        "name": "Garmin Android technology group",
        "email": "android@garmin.com",
        "time": "Thu Apr 08 10:14:47 2010 -0500"
      },
      "message": "Fixed support for RTLD_NEXT in dlsym()\n\nThe previous implementation of this flag was broken--it behaved identically\nto RTLD_DEFAULT.  This adds a proper implementation, which examines the address\nof the calling function, and uses it to determine which library to use to begin\nthe symbol search process.\n\nChange-Id: I2ad2b46363f68932af63a3828a22f9c7987eea67\n"
    },
    {
      "commit": "d04672513351af4eb302692e0f39fd5bd17191cb",
      "tree": "0ea1cef08bcfedafa705e3374863d51ec69080e1",
      "parents": [
        "5ffedb22c856ae5731324b43832ab3f5309683f2",
        "4ad72f89b12fe0157074a253190f6aa2cbfe15ac"
      ],
      "author": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Wed Mar 31 14:19:51 2010 -0700"
      },
      "committer": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Wed Mar 31 14:19:51 2010 -0700"
      },
      "message": "merge from open-source master\n\nChange-Id: I483fedf77d978b1c6e52d73eebc14f011bb9f809\n"
    }
  ],
  "next": "3cab22c8cf0dcf30718a1452ce9cbb637876cea3"
}
