)]}'
{
  "log": [
    {
      "commit": "72007ee68f507c0ab952a0b98888fc19473ba6f0",
      "tree": "4bdcac59ad9a945fa4eccf4c604fa04bb90bfe9a",
      "parents": [
        "0fc84517abe3082f201a340dafe20403613ddf94"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Apr 19 17:44:57 2017 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Apr 19 17:49:43 2017 -0700"
      },
      "message": "Decode the common EM_ values.\n\nWe know what \"3\" and \"40\" are, but most folks not on our team don\u0027t.\n\nI don\u0027t think we need to support all the weird values, because only the\nsupported architectures actually occur in practice.\n\nBug: N/A\nTest: manually overwrote aarch64 libcrypto.so with an x86-64 .so and ran \"date\"\nTest: CANNOT LINK EXECUTABLE \"date\": \"/system/lib64/libcrypto.so\" has unexpected e_machine: 62 (EM_X86_64)\nChange-Id: Ic4c6325fe7968f0c96fc0bfe15a50ed922a5ba55\n"
    },
    {
      "commit": "0a3637d3eb2424d8e825ad1825f843450a888406",
      "tree": "dc0d4c31cddc2ff06902fcbdf4233f7759258764",
      "parents": [
        "1b2975d54b9c17ced29883aef24490773a4a9fe6"
      ],
      "author": {
        "name": "Evgenii Stepanov",
        "email": "eugenis@google.com",
        "time": "Wed Jul 06 13:20:59 2016 -0700"
      },
      "committer": {
        "name": "Evgenii Stepanov",
        "email": "eugenis@google.com",
        "time": "Wed Jan 18 13:13:52 2017 -0800"
      },
      "message": "Runtime support for CFI\n\nControl Flow Integrity support in bionic.\n\nGeneral design:\nhttp://clang.llvm.org/docs/ControlFlowIntegrityDesign.html#shared-library-support\n\nThis CL implements subsections \"CFI Shadow\" and \"CFI_SlowPath\" in the above document.\n\nBug: 22033465\nTest: bionic device tests\nChange-Id: I14dfea630de468eb5620e7f55f92b1397ba06217\n"
    },
    {
      "commit": "e30c17fb6e1acb06df01ee3cc716d144140866cc",
      "tree": "fe089ec40970a76f11107534632b1fc5789660ed",
      "parents": [
        "c816e9fa03c67b3a5a112836a8e52b988c42f7ee"
      ],
      "author": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Wed Dec 28 16:21:49 2016 -0800"
      },
      "committer": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Wed Dec 28 16:21:49 2016 -0800"
      },
      "message": "Downgrade dynamic section checks to warning\n\nFor apps targeting pre-O releases print warn about\ninvalid dynamic section.\n\nBug: http://b/33842263\nTest: Start an app in question and check logs for warning.\nTest: Run bionic-unit-test --gtest_filter\u003ddl*:Dl*\nChange-Id: I80bd51f2133b956fc04e20a6538cccd50118c1b8\n"
    },
    {
      "commit": "12b918743d63351b62ca93924e27a4fea0e115df",
      "tree": "314209b87db9cc963769cfce41c42ef7ee58d696",
      "parents": [
        "60ba60dd25870fcc20bff19063dd68ba166f7592"
      ],
      "author": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Wed Nov 16 12:29:37 2016 -0800"
      },
      "committer": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Wed Nov 16 18:43:06 2016 -0800"
      },
      "message": "Relax ELF header checks - warn for apps targeting pre-O\n\nBug: http://b/32581440\nTest: bionic-unit-tests --gtest_filter\u003ddl*:Dl*\nChange-Id: I2fe356c67eb9665c671758117679a29b207219e4\n"
    },
    {
      "commit": "5bc78c8bcd0c1e634c04029309ede3ec05f2d424",
      "tree": "ba41f009cdf5fb27c766b4efe05c4cbb566d2a85",
      "parents": [
        "8945d5e43a25737f3f888a90742cc918b1124a05"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Nov 16 11:35:43 2016 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Nov 16 16:55:42 2016 -0800"
      },
      "message": "Add and use constants for the Android API levels.\n\nTest: bionic tests still pass\nChange-Id: If1b619cfc9db1d3f5d91f14f2ace71058dca0c4a\n"
    },
    {
      "commit": "4cc5a60f9113d7cb5bae01334df06e6ccd0018e5",
      "tree": "d26c93b81f74b378518331e3e93bec607cf69788",
      "parents": [
        "d5aa03600e796b894bec7662852f5715bed9e19e"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Nov 15 16:54:16 2016 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Nov 15 16:59:33 2016 -0800"
      },
      "message": "Downgrade W+E load segments to a warning unless targeting O.\n\nI don\u0027t think we\u0027re getting any value from more dupes of the same dodgy\nmiddleware, and I worry that we\u0027re hiding other, more subtle, compatibility\nissues behind this one.\n\nTest: bionic tests\nChange-Id: I556cf36eac96c90976bae32621d1c133bbb8fcc7\n"
    },
    {
      "commit": "9700babc051f5839b4fc861587d63bf06bab6324",
      "tree": "9a98bffcda9eb741b937947d781e8bdf33025b93",
      "parents": [
        "3e35b26704b17139f6cd49d66d1be8e1a74d43dc"
      ],
      "author": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Wed Aug 10 18:54:06 2016 -0700"
      },
      "committer": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Thu Aug 11 17:24:47 2016 -0700"
      },
      "message": "linker: disallow W + E PT_LOAD segments\n\nNo mapped segment from the elf file can be writable and\nexecutable at the same time. This commit adds a check\nfor malformed PT_LOAD segments in the elf-files.\n\nBug: http://b/30146890\nTest: run bionic-unit-tests --gtest_filter\u003ddlfcn.*\nChange-Id: Ia23acbe5a48780b65d7e4a50bbe024cd528079f4\n"
    },
    {
      "commit": "bd90675111967e5f0e07ff6a1df61c9b4b7a48a3",
      "tree": "bda3fb6e7a78f836c8a7a4ac68e76fd3d3afb06b",
      "parents": [
        "f5042cab109f7136191fd316be1471532d2ddf71"
      ],
      "author": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Mon Aug 08 17:12:18 2016 -0700"
      },
      "committer": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Wed Aug 10 10:52:55 2016 -0700"
      },
      "message": "Check alignment along with range of mapped file fragments\n\nImprove sanity-checks of elf-file by adding alignment check\nof mapped sections and section headers.\n\nBug: http://b/30687964\nChange-Id: I7f06ddaa56a13989ce7be847b3a73c352e32c008\n(cherry picked from commit 7e2d49ae3ebbae7ebf1ca033f86e87002c0dd83c)\n"
    },
    {
      "commit": "48ec288d40d272e6fe5e68c4c0a9778b55e24f8a",
      "tree": "4070843ac34ee5924221c2885b9ed6a26d03a5dd",
      "parents": [
        "b943f303a2d67d1e4c2fc8c4df3b4407888d777b"
      ],
      "author": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Thu Aug 04 11:50:36 2016 -0700"
      },
      "committer": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Mon Aug 08 16:12:53 2016 -0700"
      },
      "message": "Extract soinfo and globals to separate files.\n\nMove soinfo and globals out of linker.cpp to\nseparate files.\n\nBreaking up huge linker.cpp into smaller peaces\nin order to make it easier to extract part of the\ncode that belongs to libdl.so and remove parts of\nthe code that do not belong to linker\n\n(refactoring part 2 of many)\n\nChange-Id: I868417f4b8d2b84d0e8265e354bc7977161497e2\n"
    },
    {
      "commit": "c73eec159f287ce8911cfcfd122e24c37d584eb9",
      "tree": "f606eebe267c97c68545b78e797826853b88957e",
      "parents": [
        "91f33cd5ae3f09b7d2e614f5d0809037c1708db1"
      ],
      "author": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Fri Jul 22 12:50:59 2016 -0700"
      },
      "committer": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Fri Jul 22 12:53:28 2016 -0700"
      },
      "message": "Add sanity checks for e_shentsize and e_shstrndx\n\nThis helps us avoid situations when malformed elf-files\nare mistakenly loaded, - which might result in unexpected\nbehavior.\n\nBug: http://b/30166532\nTest: bionic-unit-tests --gtest_filter\u003ddl*:Dl*\nChange-Id: Idd6b4fa20e1d69a9f8d8391ba69c724d930fee51\n"
    },
    {
      "commit": "d13e9a603fa7e490853e6065240cdbfe532ada7a",
      "tree": "638cb927828a152ff13531c5795f74c0edb356ab",
      "parents": [
        "d941f72e75c744a2493bbdbf759e96c32f764e68"
      ],
      "author": {
        "name": "Evgenii Stepanov",
        "email": "eugenis@google.com",
        "time": "Fri Jul 15 16:31:42 2016 -0700"
      },
      "committer": {
        "name": "Evgenii Stepanov",
        "email": "eugenis@google.com",
        "time": "Tue Jul 19 18:18:22 2016 -0700"
      },
      "message": "Align-up and randomize shared libraries.\n\nThis change implements the following property:\n  Any 2**N aligned memory region on size 2**N contains no more than one DSO.\n\nThe value N can be configured, with 16 or 18 looking like a good choice.\nAdditionally, DSOs are loaded at random page-aligned address inside these large\nregions.\n\nThis change has dual purpose:\n1. Larger values of N allow a lot more compact CFI shadow implementation.\n   See change I14dfea630de468eb5620e7f55f92b1397ba06217.\n   For example, CFI shadow for the system_server process has the following size (RSS, KB):\n   152 for N \u003d 12, 32 for N \u003d 16, 16 for N \u003d 18.\n2. Extra randomization is good for security.\n\nThis change does not result in extra RAM usage, because everything is still page-aligned.\nIt does result in a bit more VM fragmentation because of the gaps between shared libraries.\nAs it turns out, this fragmentation is barely noticeable because the kernel creates new mapping\nat the highest possible address, and we do enough small mappings to almost completely fill the\ngaps (ex. in the Zygote the gaps are filled with .ttf file mappings and thread stacks).\n\nI\u0027ve measured VM fragmentation as the sum of all VM gaps (unmapped regions) that are larger\nthan 1MB according to /proc/$PID/maps. On aosp_angler-userdebug, the numbers are (in GB):\n\n                |   N \u003d 12  |  N \u003d 18\nsystem_server   |   521.9   |  521.1\nzygote64        |   522.1   |  521.3\nzygote32        |   2.55    |  2.55\nmediaserver     |   4.00    |  4.00\n\nChange-Id: Ia6df840dd409c82837efd1f263be420d9723c84a\n"
    },
    {
      "commit": "ebe5af75365e7531e3bf083eaacba9361cccc963",
      "tree": "c25ad704386e1daa9397aef26000cc49bf7bbe33",
      "parents": [
        "0c9d30f3c83bb451412ad5fdda73529d661cb0fc"
      ],
      "author": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Thu Jul 14 11:15:44 2016 -0700"
      },
      "committer": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Thu Jul 14 11:15:44 2016 -0700"
      },
      "message": "Fix typo in the comment\n\nAddressing review comment from change I11bc2567b0cff89f48699ec74015991fee5b137b\n\nChange-Id: I5d479ef61421c86fae06167815aa0a2681d9142d\n"
    },
    {
      "commit": "0c9d30f3c83bb451412ad5fdda73529d661cb0fc",
      "tree": "853a3581992521a9d976e9c027dfa99ce589ad5e",
      "parents": [
        "cc55bd831318d485dcf04149d423d91756379153"
      ],
      "author": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Wed Jul 13 17:06:36 2016 -0700"
      },
      "committer": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Wed Jul 13 17:06:36 2016 -0700"
      },
      "message": "linker: Improve elf-file validation\n\n1. Make sure that the .dynamic section offset and size matches\n   PT_DYNAMIC segment offset and filesz\n2. No section offset can be 0\n\nBug: http://b/16548758\nBug: http://b/29637134\nChange-Id: I11bc2567b0cff89f48699ec74015991fee5b137b\nTest: Install and start the app from http://b/29637134\n"
    },
    {
      "commit": "1b84afcfb19375926c7d4910caa43266a4c4edd8",
      "tree": "6bcf45f614a288b2b998c16ebf866e36abaf743c",
      "parents": [
        "fd799baf81e7642f2d91968ba01c39f097c0f357"
      ],
      "author": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Wed Jan 27 18:12:03 2016 -0800"
      },
      "committer": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Wed Jan 27 18:12:03 2016 -0800"
      },
      "message": "linker: mark library .bss pages with anon:.bss\n\nBug: http://b/26778774\nChange-Id: Ie2cdd841b7238de50ef389a897d79f915229616b\n"
    },
    {
      "commit": "f45b0e9edee72e97106c4b3d393b9bf1582303b3",
      "tree": "4058875667899bec12774f4843a0e123aa7c4b6c",
      "parents": [
        "df2f5fbe6f3d3937c3caf95138e43ee15f6d8497"
      ],
      "author": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Fri Jan 15 11:13:35 2016 -0800"
      },
      "committer": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Wed Jan 20 20:57:47 2016 -0800"
      },
      "message": "Do not unmap reserved region on dlclose\n\ndlclose used to unmap the part of the reserved region\nfor ANDROID_DLEXT_RESERVED_ADDRESS that was neccessary\nto map PT_LOAD segments. With this change dlclose\nreplaces mapped PT_LOAD segments with a PROT_NONE,\nMAP_ANONYMOUS | MAP_NORESERVE.\n\nPreviously caller was unmapping the reserved region after\nthe failed dlclose which led to race condition when someone\nelse reused the region freed by dlclose but before the unmap\nby the chromium code.\n\nBug: http://code.google.com/p/chromium/issues/detail?id\u003d568880\nChange-Id: I0f5eaa2bf6641f83dde469b631c518482acc59a2\n"
    },
    {
      "commit": "3c5248182e591a5039deda5dc203b0f602b21fa2",
      "tree": "2ed36af039a8d960f3506ab94d72790b6a3030c8",
      "parents": [
        "fb3219fbd1dbb0a369d52cbd0200330fd8852bc1"
      ],
      "author": {
        "name": "Dmitriy Ivanov",
        "email": "dimitry@google.com",
        "time": "Fri Nov 20 17:28:12 2015 -0800"
      },
      "committer": {
        "name": "Dmitriy Ivanov",
        "email": "dimitry@google.com",
        "time": "Sun Nov 22 23:25:06 2015 -0800"
      },
      "message": "Handling invalid section headers\n\nThe linker crashes if native library has invalid section\nheaders. This change adds boundary checks on target offsets\nand generates dlerror instead of crash.\n\nBug: http://b/25800330\nChange-Id: Ibe282029997302b9b557637c3aad064d7d0febc5\n"
    },
    {
      "commit": "b76123fed80eb3cf45a8b0b82b40fde516642a88",
      "tree": "3a6f63d1b75c3486bf0e3469afab0ddc8d4795c6",
      "parents": [
        "43c90450174ab8839c05702ac01c4092f5b6cd19"
      ],
      "author": {
        "name": "Dmitriy Ivanov",
        "email": "dimitry@google.com",
        "time": "Fri Nov 20 10:42:02 2015 -0800"
      },
      "committer": {
        "name": "Dmitriy Ivanov",
        "email": "dimitry@google.com",
        "time": "Fri Nov 20 10:49:12 2015 -0800"
      },
      "message": "Improve error message for files with no sections\n\nBug: http://b/25801618\nChange-Id: I4f4f368e727ff48c84781279e3d17d4ac2d1b6b0\n"
    },
    {
      "commit": "126af757c6d6a6447c19236df8d98ba07f21996f",
      "tree": "b303f921749f2bb077096218b22ab20bf789d4be",
      "parents": [
        "6a4ddeb56ef2144e98437ae82f84b09ea785e411"
      ],
      "author": {
        "name": "Dmitriy Ivanov",
        "email": "dimitry@google.com",
        "time": "Wed Oct 07 16:34:20 2015 -0700"
      },
      "committer": {
        "name": "Dmitriy Ivanov",
        "email": "dimitry@google.com",
        "time": "Tue Oct 27 11:27:34 2015 -0700"
      },
      "message": "Implement load at fixed address feature\n\nBug: http://b/24683631\nChange-Id: I3a39ab526c8f9e213339b60e135e5459d0f41381\n"
    },
    {
      "commit": "4f7a7ad3fed2ea90d454ec9f3cabfffb0deda8c4",
      "tree": "d2c2196b7f765aa3699b33dbd94b40112af98aa4",
      "parents": [
        "cf1cbbe43293b05e564b9d044147efbcfbcc993e"
      ],
      "author": {
        "name": "Dmitriy Ivanov",
        "email": "dimitry@google.com",
        "time": "Thu Oct 15 12:07:25 2015 -0700"
      },
      "committer": {
        "name": "Dmitriy Ivanov",
        "email": "dimitry@google.com",
        "time": "Thu Oct 22 18:26:07 2015 -0700"
      },
      "message": "Implement Library Load Order Randomization\n\nBug: http://b/24047022\nChange-Id: I36e05b403bfbaae8542a95147f9114a8b9c8ac0e\n"
    },
    {
      "commit": "cf1cbbe43293b05e564b9d044147efbcfbcc993e",
      "tree": "4c838cec973542e1bfcfabe2e7478311eecfaa2c",
      "parents": [
        "5edf077c5b92f0db212e45ed5402339a6e4c7334"
      ],
      "author": {
        "name": "Dmitriy Ivanov",
        "email": "dimitry@google.com",
        "time": "Mon Oct 19 16:57:46 2015 -0700"
      },
      "committer": {
        "name": "Dmitriy Ivanov",
        "email": "dimitry@google.com",
        "time": "Thu Oct 22 18:01:56 2015 -0700"
      },
      "message": "refactoring: introduce MappedFileFragment\n\nChange-Id: I97b0c1131711ed0ac13ab33e3357e99e0b6b1a4e\n"
    },
    {
      "commit": "93ce35434ca5af43a7449e289959543f0a2426fa",
      "tree": "190b2db5c158c5ae7c039e9f5ebca09dfc361c6c",
      "parents": [
        "079fc833137d5067c0cd3dc5211e72019314dd80"
      ],
      "author": {
        "name": "skvalex",
        "email": "skvalex@gmail.com",
        "time": "Thu Aug 20 01:06:42 2015 +0300"
      },
      "committer": {
        "name": "skvalex",
        "email": "skvalex@gmail.com",
        "time": "Thu Aug 20 01:06:42 2015 +0300"
      },
      "message": "Fix a mistype in segment overrange checking\n\nChange-Id: Ibea93514aa7ba3b1ac2bc00420f5124fb34f5f66\nSigned-off-by: skvalex \u003cskvalex@gmail.com\u003e\n"
    },
    {
      "commit": "d640b225ecdd6d2fb74076e9b80ce8afb42e31a0",
      "tree": "3c84d89a588a465e7ba3b6f0fcb7ac5be8700861",
      "parents": [
        "60a11dcb44992f610e696fc246c70731012080dd"
      ],
      "author": {
        "name": "Evgenii Stepanov",
        "email": "eugenis@google.com",
        "time": "Fri Jul 10 17:54:01 2015 -0700"
      },
      "committer": {
        "name": "Evgenii Stepanov",
        "email": "eugenis@google.com",
        "time": "Tue Jul 14 16:12:27 2015 -0700"
      },
      "message": "A special linker for ASan executables.\n\nSetup a /system/bin/linker_asan as a symlink to \"linker\".\nRead the linker name from PT_INTERP, and if it is linker_asan,\nswitch default library lookup paths to the ASan set, which\nstarts with the path to the instrumented libraries\n(/data/lib), followed by /system/lib as a fallback.\n\nThis ensures that ASan binaries prefer ASan libraries, when\navailable. This approach is way better then RPATH/RUNPATH and even\nbetter than LD_LIBRARY_PATH:\n- RUNPATH is per-DSO, while default paths are global.\n- LD_LIBRARY_PATH is overwritten by android_update_LD_LIBRARY_PATH.\n- neither RUNPATH nor LD_LIBRARY_PATH appear in\n  android_get_LD_LIBRARY_PATH which is used to build java.lang.path.\n  Having ASan libraries in java.lang.path is a good thing.\n\nBug: 22355945\nChange-Id: I1d2791fbf5740618f18f71a3ae3d873714669d3f\n"
    },
    {
      "commit": "3f987f5b3eeb2e0e94c0d826429dfb418fce945f",
      "tree": "332cbe9dbced4189cd59fcae74a81b72506dfd83",
      "parents": [
        "d19c271599a4b8881213c7bfbb81f87d8e56a101"
      ],
      "author": {
        "name": "Dmitriy Ivanov",
        "email": "dimitry@google.com",
        "time": "Thu Jun 25 15:51:41 2015 -0700"
      },
      "committer": {
        "name": "Dmitriy Ivanov",
        "email": "dimitry@google.com",
        "time": "Thu Jun 25 20:05:50 2015 -0700"
      },
      "message": "Fix crash when trying to load invalid ELF file.\n\nBug: http://b/22047255\nBug: http://b/22091640\nChange-Id: I6c51cff43287a6ac4b25fa9ce6a6fc3d232fd047\n(cherry picked from commit 06700b2b5e92a365505b15d0d05e2d5b0706c511)\n"
    },
    {
      "commit": "8a1162835597be38705b381ac34c07da17932568",
      "tree": "13fb64618cf74789d9f47d7d438eda0e3fd27607",
      "parents": [
        "d9dc13d4172516342ceebf1b16624ed9fdf3fca2"
      ],
      "author": {
        "name": "Dmitriy Ivanov",
        "email": "dimitry@google.com",
        "time": "Fri Jun 05 22:16:23 2015 -0700"
      },
      "committer": {
        "name": "Dmitriy Ivanov",
        "email": "dimitry@google.com",
        "time": "Tue Jun 09 13:44:31 2015 -0700"
      },
      "message": "Add flag that makes linker honor min(p_vaddr)\n\nBug: http://b/21523078\nChange-Id: Ice72766fb6ad3bd333c32b496e7870121e17a763\n"
    },
    {
      "commit": "8fdb3419a51ffeda64f9c811f22a42edf9c7f633",
      "tree": "f2d296c911330a320ad74ad78e248fbe1ded7b4f",
      "parents": [
        "ab7c79e22e5495a2aa171047a044ce1037e461a9"
      ],
      "author": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Wed Apr 01 16:57:50 2015 -0700"
      },
      "committer": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Wed Apr 01 18:05:19 2015 -0700"
      },
      "message": "linker: never mark pages simultaneously writable / executable\n\nWhen the Android dynamic linker handles a text relocation,\nit first relaxes the permissions on the segment being modified,\nperforms the modifications, and then restores the page permissions.\nThe relaxation worked by adding PROT_WRITE to whatever protection\nbits were set in the section. In effect, the pages were getting set\nto PROT_READ|PROT_WRITE|PROT_EXEC, modified, then restored to\nPROT_READ|PROT_EXEC\n\nThe SELinux kernel code differentiates between 4 different kinds\nof executable memory:\n* Executable stack (execstack)\n* Executable heap (execheap)\n* File-based executable code which has been modified (execmod)\n* All other executable memory (execmem)\n\nThe execmod capability is only triggered by the kernel when a\ndirty but non-executable mmap()ed page becomes executable. When that\noccurs, an SELinux policy check is done to see if the execmod capability\nis provided by policy.\n\nHowever, if the page is already executable, and PROT_WRITE is added\nto the page, it\u0027s considered an execmem permission check, not an execmod\npermission check.\n\nThere are certain circumstances where we may want to distinguish between\nexecmod and execmem. This change adjusts the dynamic linker to avoid\nusing RWX pages, so that an RX -\u003e RW -\u003e RX transition will properly\nbe detected as an execmod permission check instead of an execmem permission\ncheck.\n\nBug: 20013628\nChange-Id: I14d7be29170b156942f9809023f3b2fc1f37846c\n"
    },
    {
      "commit": "56be6ed9e4ac99fdd920090ee89c57e3cf55e885",
      "tree": "ddb0b8ad32f7929c5553114c181cbbd09c3f278f",
      "parents": [
        "cb00add1b382d1e3045876d7e1ccbee2fdce976b"
      ],
      "author": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Wed Apr 01 21:18:48 2015 +0000"
      },
      "committer": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Wed Apr 01 21:18:48 2015 +0000"
      },
      "message": "Revert \"Remove text-relocation support for lp32\"\n\nThis reverts commit cb00add1b382d1e3045876d7e1ccbee2fdce976b.\n\nBug: 20020312\nBug: 20013628\nChange-Id: I8baa3d4b6c7fef50c9e2531257d5b96762099eb3\n"
    },
    {
      "commit": "cb00add1b382d1e3045876d7e1ccbee2fdce976b",
      "tree": "f8acab61b2d9b27731880997ace6ce0033e9bc62",
      "parents": [
        "52a0f01421fde3cd4f879b491a9f491d792fa2d5"
      ],
      "author": {
        "name": "Dmitriy Ivanov",
        "email": "dimitry@google.com",
        "time": "Tue Mar 31 17:28:24 2015 -0700"
      },
      "committer": {
        "name": "Dmitriy Ivanov",
        "email": "dimitry@google.com",
        "time": "Tue Mar 31 17:42:45 2015 -0700"
      },
      "message": "Remove text-relocation support for lp32\n\nBug: 20013628\nChange-Id: Idaf8012f00ee1304d429c3b42f9ebc6b648c55b8\n"
    },
    {
      "commit": "20d89cb5b0d5eb7546a8fe8da44bbd91564dbdda",
      "tree": "0dad262c1284ec393f11eae840e7603905a2204c",
      "parents": [
        "16c77212792808b9e4d8229e64c5b42f4327b6dc"
      ],
      "author": {
        "name": "Dmitriy Ivanov",
        "email": "dimitry@google.com",
        "time": "Mon Mar 30 18:43:38 2015 -0700"
      },
      "committer": {
        "name": "Dmitriy Ivanov",
        "email": "dimitry@google.com",
        "time": "Tue Mar 31 11:49:25 2015 -0700"
      },
      "message": "Fix long lines and replace macros with functions.\n\nChange-Id: I4e1cab488d5b2c8e4289da617350a86e72a4ba12\n"
    },
    {
      "commit": "18a6956b76a071097fc658c5fe13ef010e31864a",
      "tree": "9a5213aeddb62ffcf0002986808b6699c5988e9e",
      "parents": [
        "fa26eee77685e8dee7986e62a7d263003f5bd25a"
      ],
      "author": {
        "name": "Dmitriy Ivanov",
        "email": "dimitry@google.com",
        "time": "Wed Feb 04 16:05:30 2015 -0800"
      },
      "committer": {
        "name": "Dmitriy Ivanov",
        "email": "dimitry@google.com",
        "time": "Fri Mar 06 17:12:47 2015 -0800"
      },
      "message": "Add support for packed relocations.\n\nChange-Id: I796a4ce86d3fccb8361c19889419c96147ee3c9f\n"
    },
    {
      "commit": "05fc1d7050d5451aea08dc5f504d2670287b2d43",
      "tree": "fa1d81b61b303ee8ed94c511cc08b8f40ed6624b",
      "parents": [
        "43606bc1ce974e4ba42d7d2c3682ad5182e6fc96"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Jan 28 18:02:33 2015 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Jan 28 19:23:11 2015 -0800"
      },
      "message": "Add missing includes.\n\nChange-Id: Ibf549266a19a67eb9158d341a69dddfb654be669\n"
    },
    {
      "commit": "1649e7ee5b9bb4122be67903d55c4c8cc0549bba",
      "tree": "9213c9213ccfad39b4c944ede78315f50684305a",
      "parents": [
        "ae095a730d6b3af69dc5eff662c5609cde6f5d70"
      ],
      "author": {
        "name": "Dmitriy Ivanov",
        "email": "dimitry@google.com",
        "time": "Thu Jan 22 16:04:25 2015 -0800"
      },
      "committer": {
        "name": "Dmitriy Ivanov",
        "email": "dimitry@google.com",
        "time": "Thu Jan 22 16:33:30 2015 -0800"
      },
      "message": "Enable -Wold-style-cast warnings for linker\n\n  And fix old style casts.\n\nChange-Id: I37e7a3e3fd852528ea76f02d967c7bd8cd5b06c9\n"
    },
    {
      "commit": "b514026eb22d408da0d7090bf57b342d4ceb4097",
      "tree": "4867be5bd8f963d17ab26d1fad16b9d23e026d4b",
      "parents": [
        "6995c1dcb5a9ad77a54d950fc24f5aba00909b69"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Dec 02 16:16:29 2014 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Dec 02 16:16:29 2014 -0800"
      },
      "message": "Kill \u003cmachine/exec.h\u003e.\n\nBug: 18546535\nChange-Id: I479e003deab21e31eb5caa5393067ed1dc558387\n"
    },
    {
      "commit": "a6c1279098f24a675d0df74ce1946f5d534b425e",
      "tree": "093d8cf0f5610eaf29dad4415236baefda00f5ef",
      "parents": [
        "8f41d3d3bc7cf2375e5dd9202da619fd67a5928f"
      ],
      "author": {
        "name": "Dmitriy Ivanov",
        "email": "dimitry@google.com",
        "time": "Tue Oct 21 12:09:18 2014 -0700"
      },
      "committer": {
        "name": "Dmitriy Ivanov",
        "email": "dimitry@google.com",
        "time": "Tue Oct 21 13:51:08 2014 -0700"
      },
      "message": "Rename library_offset to library_fd_offset\n\n replace lseek() and use pread() instead\n add test for library_fd_offset \u003e file_size case\n\nBug: 17762003\nChange-Id: I4555f0be635124efe849c1f226985bcba72ffcbd\n"
    },
    {
      "commit": "4544d9f9bf4b50bf677aa3a07403ac84391cfd42",
      "tree": "9eedd3d99a957e817d438a870537fafeab9c32b6",
      "parents": [
        "97df16ba5c2911e06d1211781a5724706abd227b"
      ],
      "author": {
        "name": "Robert Grosse",
        "email": "grosse@google.com",
        "time": "Wed Oct 15 14:32:19 2014 -0700"
      },
      "committer": {
        "name": "Robert Grosse",
        "email": "grosse@google.com",
        "time": "Wed Oct 15 14:32:19 2014 -0700"
      },
      "message": "Fix misleading comment.\n\nChange-Id: I9e2aa6c2ba938c8f8d7c74eba32d313c866c77b2\n"
    },
    {
      "commit": "07e5bc152d8a3ad4c50808bb86f3c0f2c5e2f514",
      "tree": "0d80ab6a46252135b3550f82766d300fe5284cfa",
      "parents": [
        "d5df4124bbbb30411ef19f7c2fbb3987d0eb9630"
      ],
      "author": {
        "name": "Dmitriy Ivanov",
        "email": "dimitry@google.com",
        "time": "Fri Oct 03 17:52:44 2014 -0700"
      },
      "committer": {
        "name": "Dmitriy Ivanov",
        "email": "dimitry@google.com",
        "time": "Mon Oct 06 10:02:34 2014 -0700"
      },
      "message": "Add file_offset parameter to android_extinfo\n\nBug: 17762003\nChange-Id: I8fb267a3155acef3dba534038cf5d1ef00d7154b\n"
    },
    {
      "commit": "e93be99da0614ff38cbf8b2bb0624ff1dc79b8d0",
      "tree": "0b341ea3bad005b55b13910852702d1a4356c430",
      "parents": [
        "17e7d3208c68ff69819179d8a63ca234be2d1ab9"
      ],
      "author": {
        "name": "Ningsheng Jian",
        "email": "ningsheng.jian@arm.com",
        "time": "Tue Sep 16 15:22:10 2014 +0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Sep 26 22:58:57 2014 +0000"
      },
      "message": "Fix gdb could not get shared library list issue\n\nGet dynamic flags from phdr table\u0027s correct entry rather the first\nentry, so that the following DT_DEBUG entry can be set.\n\nAlso fix the undefined reference to LoadTask::deleter issue under gcc\n-O0 option.\n\nBug: 17524778\nChange-Id: I9c679af197b034761fb739d6c980e628ff2ab84c"
    },
    {
      "commit": "14669a939d113214a4a20b9318fca0992d5453f0",
      "tree": "160b15f09cb7edc2da5b02e47cf3d5ce1461df97",
      "parents": [
        "320a01d51693408dad859094ca52e5f315ff1d15"
      ],
      "author": {
        "name": "Dmitriy Ivanov",
        "email": "dimitry@google.com",
        "time": "Fri Sep 05 16:42:53 2014 -0700"
      },
      "committer": {
        "name": "Dmitriy Ivanov",
        "email": "dimitry@google.com",
        "time": "Mon Sep 08 13:02:50 2014 -0700"
      },
      "message": "Load libraries in breadth-first order\n\n  This patch fixes the problem with symbol search order\n  for dlsym(RTLD_DEFAULT/RTLD_NEXT, .) by loading libraries\n  and ld_preloads in correct order.\n\nBug: https://code.google.com/p/android/issues/detail?id\u003d74255\nChange-Id: If1ba5c807322409faa914e27ecb675e2c4541f0d\nAttempt: 2\n"
    },
    {
      "commit": "498eb18b82a425f9f30132e4832f327b2ee0e545",
      "tree": "08ae8d60c8f659139aba906ccfe6df4bc85afdb5",
      "parents": [
        "b3ebfecdae05e29062bf4d0234239a54a2733ce0"
      ],
      "author": {
        "name": "Dmitriy Ivanov",
        "email": "dimitry@google.com",
        "time": "Fri Sep 05 14:57:59 2014 -0700"
      },
      "committer": {
        "name": "Dmitriy Ivanov",
        "email": "dimitry@google.com",
        "time": "Fri Sep 05 16:27:54 2014 -0700"
      },
      "message": "Revert \"Load libraries in breadth-first order\"\n\nThis reverts commit a3ad450a2e3fb6b3fe359683b247eba20896f646.\n\nChange-Id: Ia2b838ad2159c643b80c514849582f4b4f4f40e5\n"
    },
    {
      "commit": "a3ad450a2e3fb6b3fe359683b247eba20896f646",
      "tree": "46d55ca77bbe24d4834444ed21aa146bf6750e37",
      "parents": [
        "ec95a9cf11f7c4d2211c61da7ce05262a54409d1"
      ],
      "author": {
        "name": "Dmitriy Ivanov",
        "email": "dimitry@google.com",
        "time": "Tue Jul 29 14:21:45 2014 -0700"
      },
      "committer": {
        "name": "Dmitriy Ivanov",
        "email": "dimitry@google.com",
        "time": "Wed Sep 03 15:06:14 2014 -0700"
      },
      "message": "Load libraries in breadth-first order\n\n  This patch fixes the problem with symbol search order\n  for dlsym(RTLD_DEFAULT/RTLD_NEXT, .) by loading libraries\n  and ld_preloads in correct order.\n\nBug: https://code.google.com/p/android/issues/detail?id\u003d74255\nChange-Id: I4cf84c70dbaabe99310230dfda12385ae5401859\n"
    },
    {
      "commit": "851135bf9941b3813adb9b4f43d76e040c4ba157",
      "tree": "647ab7ce4fe160dbd7db1fab01de91795de65a88",
      "parents": [
        "f4e721dd519db89c504c8944763811a3df956b32"
      ],
      "author": {
        "name": "Dmitriy Ivanov",
        "email": "dimitry@google.com",
        "time": "Fri Aug 29 12:02:36 2014 -0700"
      },
      "committer": {
        "name": "Dmitriy Ivanov",
        "email": "dimitry@google.com",
        "time": "Fri Aug 29 14:13:48 2014 -0700"
      },
      "message": "Replace NULL with nullptr\n\nChange-Id: Iad50be617d318ca98883b843229c960ad5b9afa9\n"
    },
    {
      "commit": "625993dfbb085a3cde7492eda8ec1cdc1ee39a78",
      "tree": "4385fee1dde6d90f42c616a2afc6766824f72835",
      "parents": [
        "770d0f6177ca1ad242b509151fb612f07ef8a07b"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Jul 15 16:53:13 2014 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Jul 16 14:27:43 2014 -0700"
      },
      "message": "Use VDSO for clock_gettime(2) and gettimeofday(2).\n\nBug: 15387103\nChange-Id: Ifc3608ea65060c1dc38120b10b6e79874f182a36\n"
    },
    {
      "commit": "04dc91ae763adc403a14c88b4c46f77b3d2d71a3",
      "tree": "aa8c5774929f43e2a13e308f93df4c65744f777d",
      "parents": [
        "4d299a2cf7880789e658f427196d1ca9fe02a9bc"
      ],
      "author": {
        "name": "Dmitriy Ivanov",
        "email": "dimitry@google.com",
        "time": "Tue Jul 01 14:10:16 2014 -0700"
      },
      "committer": {
        "name": "Dmitriy Ivanov",
        "email": "dimitry@google.com",
        "time": "Wed Jul 02 13:20:47 2014 -0700"
      },
      "message": "Load library using file handle.\n\n * This patch enables dlopen by file descriptor\n   instead of path/name.\n\nBug: 15984217\nChange-Id: Ib39051e00567fb97070bf96d8ce63993877c0a01\n"
    },
    {
      "commit": "26ec9679ff01fb155ae21015f31cc95bed24f670",
      "tree": "97478537891feb00d442d1e0eba5be1c0d64eefc",
      "parents": [
        "07bab525e24725aaacd71e7cc63dfc31d48ba8a7"
      ],
      "author": {
        "name": "Torne (Richard Coles)",
        "email": "torne@google.com",
        "time": "Wed Apr 30 15:48:40 2014 +0100"
      },
      "committer": {
        "name": "Torne (Richard Coles)",
        "email": "torne@google.com",
        "time": "Fri May 02 14:25:45 2014 +0100"
      },
      "message": "Handle empty relro segment or incorrectly sized file.\n\nIf the file has no relro segment, the generated relro file will have\nlength 0, which caused mmap to fail. If the relro file has nonzero size,\nbut is too short (e.g. because it\u0027s for the wrong version of the\nlibrary), the linker would segfault while comparing the data. Fix both\nthese issues: don\u0027t try to map a zero length file, and don\u0027t try to\ncompare data that would be beyond the end of the file.\n\nImprove test to explicitly generate two versions of the library: one\nwith -z relro, and one with -z norelro, so we can test both cases; also\nexplicitly test the case where the relro file has length 0.\n\nBug: 14299541\nChange-Id: Id8b95585edda90e8bb5de452a35b70ed2d224934\n"
    },
    {
      "commit": "183ad9df536ab04ef35a397a1f4724e4e401d11f",
      "tree": "65c76a120390c1350ff1d38b725b54cabd91c06b",
      "parents": [
        "12bbb9164578b6512b8b07a3fb093858244b7c7b"
      ],
      "author": {
        "name": "Torne (Richard Coles)",
        "email": "torne@google.com",
        "time": "Thu Feb 27 13:18:00 2014 +0000"
      },
      "committer": {
        "name": "Torne (Richard Coles)",
        "email": "torne@google.com",
        "time": "Thu Apr 17 14:30:46 2014 +0100"
      },
      "message": "Allow sharing the RELRO section via a file.\n\nAdd flags and a file descriptor to android_dlopen_ext() to allow writing\nthe RELRO section of the loaded library to a file after relocation\nprocessing, and to allow mapping identical pages from the file over the\ntop of relocated memory in another process. Explicitly comparing the\npages is required in case a page contains a reference to a symbol\ndefined in another library loaded at a random base address.\n\nBug: 13005501\nChange-Id: Ibb5b2d384edfaa5acf3e97a5f8b6115c10497a1e\n"
    },
    {
      "commit": "12bbb9164578b6512b8b07a3fb093858244b7c7b",
      "tree": "2a32dc3fe2902444aed43647f0ab1d2612507296",
      "parents": [
        "012cb4583a5f8564059142bb1900ea3a31e7cfa9"
      ],
      "author": {
        "name": "Torne (Richard Coles)",
        "email": "torne@google.com",
        "time": "Thu Feb 06 14:34:21 2014 +0000"
      },
      "committer": {
        "name": "Torne (Richard Coles)",
        "email": "torne@google.com",
        "time": "Thu Apr 17 14:22:17 2014 +0100"
      },
      "message": "Support loading libraries to a reserved address.\n\nAdd flags and parameters to android_dlopen_ext() to allow loading a\nlibrary at an already-reserved fixed address. If the library to be\nloaded will not fit within the space reserved, then the linker will\neither fail, or allocate its own address space as usual, according to\nwhich flag has been specified. This behaviour only applies to the\nspecific library requested; any other libraries loaded as dependencies\nwill be loaded in the normal fashion.\n\nThere is a new gtest included to cover the functionality added.\n\nBug: 13005501\nChange-Id: I5d1810375b20fc51ba6a9b3191a25f9792c687f1\n"
    },
    {
      "commit": "faf05bacd45719291b371f24b1b89543881b37f6",
      "tree": "5ea47b891e7b65d94af4bd558d2a1817247e74de",
      "parents": [
        "577fce0108feda58296beacfbc0ada4a6d6afbc2"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Feb 11 16:59:37 2014 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Feb 11 17:33:49 2014 -0800"
      },
      "message": "Clean up all the lint cpplint can find in the dynamic linker.\n\nChange-Id: Ic9ee7153817c22a252cc4b309283e355b623cab9\n"
    },
    {
      "commit": "0266ae5f884d72da58f33a072e865ba131234a5e",
      "tree": "48763b706806f544b1dec0ef98261bed6f21dee2",
      "parents": [
        "eeb9a9f59a58a2f042e8f6fd1a4911ae92ac5493"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Feb 10 17:46:57 2014 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Feb 10 18:22:24 2014 -0800"
      },
      "message": "Switch \u003celf.h\u003e over to linux uapi under the covers.\n\nRemove the linker\u0027s reliance on BSD cruft and use the glibc-style\nElfW macro. (Other code too, but the linker contains the majority\nof the code that needs to work for Elf32 and Elf64.)\n\nAll platforms need dl_iterate_phdr_static, so it doesn\u0027t make sense\nto have that part of the per-architecture configuration.\n\nBug: 12476126\nChange-Id: I1d7f918f1303a392794a6cd8b3512ff56bd6e487\n"
    },
    {
      "commit": "4041b13c204fc1e2fc799b67ce15347d9ad6c8d9",
      "tree": "9b7fca4c64464af7e1c0292ecc41f84054055dba",
      "parents": [
        "6f23ce36ce580da3c1419856c71d7426dd64748d"
      ],
      "author": {
        "name": "Qiming Shi",
        "email": "qiming.shi@intel.com",
        "time": "Sun Jan 26 16:49:39 2014 +0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Jan 27 14:51:07 2014 -0800"
      },
      "message": "bionic: Do not use magic number for portability\n\nDo not use the magic number 0xFFFFFFFFU to represent the max value of an address\nas it\u0027s not correct on 64bit platform. We should use UINTPTR_MAX instead.\n\nChange-Id: I1fc6f5864a651b2eddea2333cb0788f9d9223270\nSigned-off-by: Qiming Shi \u003cqiming.shi@intel.com\u003e\nSigned-off-by: Weiwu Chen \u003cweiwu.chen@intel.com\u003e\n"
    },
    {
      "commit": "e365f9d6543bc6607864ef61257505239dde15d1",
      "tree": "ecc2e3605bc26aeb9b16a1d3adbceb70da40ba19",
      "parents": [
        "2e3826c08171ead1647c800a0a6d9c333d335762"
      ],
      "author": {
        "name": "Marcus Oakland",
        "email": "marcus.oakland@arm.com",
        "time": "Thu Oct 10 15:19:31 2013 +0100"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Dec 17 15:02:43 2013 -0800"
      },
      "message": "AArch64: Linker64 support for AArch64\n\nAddition of support for AArch64 in the linker64 target.\n\nChange-Id: I8dfd9711278f6706063e91f626b6007ea7a3dd6e\nSigned-off-by: Marcus Oakland \u003cmarcus.oakland@arm.com\u003e\n"
    },
    {
      "commit": "4eeb1f12a8b63afc0d0ad4d466b16fbffb21cd5a",
      "tree": "618c8b7133f3602880e0a4c8285c34e7552a0a45",
      "parents": [
        "93fcfeee2b4de4c65fc766bf10601397592341d7"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Oct 25 17:38:02 2013 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Oct 28 11:02:49 2013 -0700"
      },
      "message": "Clean up linker architecture macros.\n\nWe don\u0027t need our own architecture macros; the standard ones will do.\n\nThis patch also fixes some __x86_64__ tests to be USE_RELA tests instead,\nbecause they\u0027re not actually x86_64-specific.\n\nI\u0027ve cleaned up architecture-specific code slightly so where possible\nall the code corresponding to a particular architecture is together.\n\nThis patch also fixes a bug in LP64 DT_PLTGOT handling, which should be\nan error rather than falling through into DT_DEBUG! There was another #ifdef\nbug where we\u0027d only report unexpected DT_ entries on MIPS.\n\nChange-Id: Id1d04e372611f641c1aa278a18e379f28af9eaf5\n"
    },
    {
      "commit": "c00f2cb587630d5e954c7f548749f1e3170b3cb1",
      "tree": "c62c53a795026d249df132db9bc7894add15611d",
      "parents": [
        "5d06718cd357b509588465ec1fa261db23b5899a"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Oct 04 17:01:33 2013 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Oct 08 09:57:01 2013 -0700"
      },
      "message": "x86_64 linker.\n\nBased on I8dc3e2cb596f75dc58ae82e4dc58f8c177dd3323 by\nPavel Chupin \u003cpavel.v.chupin@intel.com\u003e.\n\nChange-Id: Icd582d277cbe273477b450f2848343d72c86ec9f\n"
    },
    {
      "commit": "c620059479c47a78d57086d73726c9adc2f337ad",
      "tree": "ef410fffb4d853aaf7dbfee41743c197c4985856",
      "parents": [
        "6dee3b9aeec40bb518c1a29b4462300869a03d8e"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Sep 30 18:43:46 2013 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Sep 30 18:43:46 2013 -0700"
      },
      "message": "Remove 32-bit assumptions from the ELF code.\n\nChange-Id: I2c1f3d34c33685799aade8866eec44479ff9f963\n"
    },
    {
      "commit": "0e79b9196254cdd210a59cc00d07b88a796a3a0d",
      "tree": "546296c2741d8a056d9033323049c66ba3b626a9",
      "parents": [
        "c933493ac28c40558f369d175da738ba601d8499"
      ],
      "author": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Wed Aug 14 01:04:19 2013 -0700"
      },
      "committer": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Wed Aug 14 15:47:46 2013 -0700"
      },
      "message": "Add more information to error due to truncated Elf32_Ehdr\n\nChange-Id: I24f30bd0c1120bcf85d77f5c4e69f0fefe9a2478\n"
    },
    {
      "commit": "e7dffe150b3c1c835c669ec03965e37fead13de7",
      "tree": "b5d5b396f91a81f63e301ebd946885d2f2bb6bdc",
      "parents": [
        "b7b4f5b838cd41407c734af74e8211f5c7da0036"
      ],
      "author": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Thu Jan 10 16:39:58 2013 -0800"
      },
      "committer": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Fri Jun 07 12:47:58 2013 -0700"
      },
      "message": "Honor p_vaddr if set\n\n(cherry picked from commit 88ff15c2c279d2bbe3569101b36cd2aa0931a0a9)\n\nChange-Id: I4aabbe911d30aea8ace69e29bb6e980a4e89de90\n"
    },
    {
      "commit": "82dcc7910d9c25c4fdf635d6132fa86ae3677363",
      "tree": "46661acee967aad59083d8c096f14ec1baa1cd2f",
      "parents": [
        "2e317075b044e94fc75e36d08bec8a7eb5fc31ae"
      ],
      "author": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Tue May 21 16:49:24 2013 -0700"
      },
      "committer": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Tue May 21 16:57:55 2013 -0700"
      },
      "message": "Fix bionic linker to support segments with zero p_filesz\n\n(cherry picked from commit 96362fb9d11beef6233aa03db396f25688e70860)\n\nChange-Id: Ib075a6dfc45d5d0746d8b278f317dd9b8d772f2a\n"
    },
    {
      "commit": "650be4e584eeab3591b9e273bfd6d169eea60853",
      "tree": "5be356ef45653f3a118ebac4a66858d24a4bdb6b",
      "parents": [
        "036f909720fd0d56dbd04b9a761fb1d0714980b0"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Mar 05 18:47:58 2013 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Mar 05 22:24:34 2013 -0800"
      },
      "message": "More linker cleanup.\n\nChange-Id: I9fb3c7c0d4b4ffef0eeaf092d4e30ffe63a08671\n"
    },
    {
      "commit": "d4ee82dfa3ba01baa10e3ca48fcb31a27b8a4e81",
      "tree": "b3e7ea16cf946c1d23131bb86f59e043449b7776",
      "parents": [
        "d392e044c7a03ff1c0903c3512d00955bc7de473"
      ],
      "author": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Thu Feb 28 15:58:45 2013 -0800"
      },
      "committer": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Tue Mar 05 15:27:21 2013 -0800"
      },
      "message": "Minor linker cleanup, primarily to use Elf32_Dyn\n\nChange-Id: Ifa9408e9859c6f79444715bed4808b7c13fdced5\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": "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": "06b596104a9ed3ac089abd00186a5698d7e8544f",
      "tree": "fee68e3aaa870bc72c2e7f6fee3de18bac42bcc4",
      "parents": [],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Oct 30 12:57:57 2012 -0700"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Oct 30 12:57:58 2012 -0700"
      },
      "message": "Merge \"Fix bug in pthread_join, pthread_exit, pthread_detach\""
    }
  ]
}
