)]}'
{
  "log": [
    {
      "commit": "37b91af0f3590e577dfcef47899bca2c8f9aebf4",
      "tree": "b15cccfb4b2cb20bbdb8d0c70d7f94426e56d6a9",
      "parents": [
        "41192813232c1dbf5cb8989cd872e1a01c115245"
      ],
      "author": {
        "name": "Jiyong Park",
        "email": "jiyong@google.com",
        "time": "Fri May 05 22:07:05 2017 +0900"
      },
      "committer": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Tue May 09 17:59:00 2017 -0700"
      },
      "message": "greylist is no longer enabled by default.\n\ngreylist is needed only for application namepaces. Since we started using\nlinker-namesapces for vendors and other platform apps linker should not\nenable greylist workaround by default.\n\nBug: http://b/37731053\nBug: https://issuetracker.google.com/38146125\nTest: sailfish builds and boots\nTest: bionic-unit-tests and linker-unit-tests pass\nChange-Id: Iee83db6fb1ae754f5ade18491321d9bca3b5ead4\n(cherry picked from commit e8ffe56a9c2bacc6bd880238250ad61e2bbb257b)\n"
    },
    {
      "commit": "5725481f1e4cb2e2042b5469b5863023556cf2dd",
      "tree": "30e2a7d6ecee026e0993af8da6954b40bc5c17e9",
      "parents": [
        "846924ae9583991a99a5924b2542c992d4bc094e",
        "7a3681e5b6c39bc2b3b62031ca5941dbf7bc4e63"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Wed May 03 17:43:33 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed May 03 17:43:35 2017 +0000"
      },
      "message": "Merge \"Move libc_log code into libasync_safe.\""
    },
    {
      "commit": "7a3681e5b6c39bc2b3b62031ca5941dbf7bc4e63",
      "tree": "78c25e2a38b7efed8db770a623a5cbfb7eaab11d",
      "parents": [
        "ca5e0f49ca5df873a20c996755175b5c9c1e2ed9"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Mon Apr 24 17:48:32 2017 -0700"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Wed May 03 08:50:43 2017 -0700"
      },
      "message": "Move libc_log code into libasync_safe.\n\nThis library is used by a number of different libraries in the system.\nMake it easy for platform libraries to use this library and create\nan actual exported include file.\n\nChange the names of the functions to reflect the new name of the library.\n\nRun clang_format on the async_safe_log.cpp file since the formatting is\nall over the place.\n\nBug: 31919199\n\nTest: Compiled for angler/bullhead, and booted.\nTest: Ran bionic unit tests.\nTest: Ran the malloc debug tests.\nChange-Id: I8071bf690c17b0ea3bc8dc5749cdd5b6ad58478a\n"
    },
    {
      "commit": "f1cb669a9cd31229cc3c486a1a405fad92fe5e1d",
      "tree": "8eeb45fdf477e714798efaec907e1d99548951b8",
      "parents": [
        "87a47e1bb202a26918993487db8dc82229833ef8"
      ],
      "author": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Mon May 01 17:45:38 2017 -0700"
      },
      "committer": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Tue May 02 16:42:28 2017 -0700"
      },
      "message": "Shared namespaces inherit parent ns properties\n\nMake shared namespace inherit namespace links and\nsearch/permitted paths from the parent namespace.\n\nBug: http://b/37854032\nTest: bionic_unit_tests --gtest_filter\u003ddl*:Dl*\nChange-Id: I174661d4a1dd0cbe4a378179073719aa955f3592\n(cherry picked from commit ec43dd6c36d75014c4e4dc592dd67ab20033a76a)\n"
    },
    {
      "commit": "87a47e1bb202a26918993487db8dc82229833ef8",
      "tree": "8f06d30e39972f84ac8d255ced62559dc98acf45",
      "parents": [
        "fd478a8cba97680974494bc72727fba6d8136805",
        "01de74e76d1131b5c5b0120d07e8f468ac5f8fac"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Tue May 02 01:37:02 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue May 02 01:37:04 2017 +0000"
      },
      "message": "Merge \"linker: add android_get_exported_namespace\""
    },
    {
      "commit": "01de74e76d1131b5c5b0120d07e8f468ac5f8fac",
      "tree": "1cd468876895e1ed149efcde3382edeaddcdab31",
      "parents": [
        "627ed9162538d847ea4e530fd443570d37f57d65"
      ],
      "author": {
        "name": "Jiyong Park",
        "email": "jiyong@google.com",
        "time": "Mon Apr 03 23:10:37 2017 +0900"
      },
      "committer": {
        "name": "Jiyong Park",
        "email": "jiyong@google.com",
        "time": "Fri Apr 28 10:14:28 2017 +0900"
      },
      "message": "linker: add android_get_exported_namespace\n\nDepending on how ld.config.txt is configured, there can be multiple\nbuilt-in namespaces created by the linker from the beginning of a\nprocess. android_get_exported_namespace is a platform only API for\ngetting a handle (android_namespace_t*) to one of the built-in namespaces\nwith given name. The returned namespace can then be given to\nandroid_dlopen_ext in order to explicitly specify the target namespace\nwhere the library is searched and loaded from.\n\nNote that this function only returns \u0027exported\u0027 namespaces created via\nld.config.txt file. In order to export a namespace, the visible property\nshould be set to true:\n\nnamespace.\u003cname\u003e.visible \u003d true\n\nNamespaces are hidden by default. Hidden namespaces and namespaces\nthat are created programmatically, notably \u0027classloader-namespace\u0027,\naren\u0027t returned by this function.\n\nBug: 36851137\nTest: confirmed that namespaces created with ld.config.txt is retrieved.\nTest: linker-unit-tests passes\nMerged-in: I714b510fa24f77e42c3dfc4c827b3befa8bb2951\nChange-Id: I0d05fa7e0e116009edf8ea362ab46774bc617cbf\n(cherry picked from commit d7c4832e6a640be972017e85ab21e72950dfeddd)\n"
    },
    {
      "commit": "bf34ba364186fc1ffbeada28740640cb4498e7a0",
      "tree": "c26639a2a947bf1219eabe64af6d03a5bb316f86",
      "parents": [
        "e54e64bd605f74936e1b8b6f5bf525b77abba00d"
      ],
      "author": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Fri Apr 21 13:12:05 2017 -0700"
      },
      "committer": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Fri Apr 21 14:45:07 2017 -0700"
      },
      "message": "loader: enable loading libraries from tmpfs\n\nThis change adds two tests for dlopen from temporary files.\n1. One Uses memfd_create() can be used to load libraries directly\nfrom memory. This requires relaxing namespace accessibility check\nin order to make this work in isolated namespaces.\n2. Another checks that open with O_TMPFILE works.\n\nBug: http://b/37245203\nTest: bionic-unit-tests --gtest_filter\u003ddl*:Dl*\nChange-Id: I3be1d7198ca17e7f1ba022a0d86c64d59a493506\n(cherry picked from commit bb8b22a087db32773f1a9cd3473061f3ad714afc)\n"
    },
    {
      "commit": "f2c6ad6338b7ea96fe7b64bffa28d5ed81a2f994",
      "tree": "768871a1c1811fce1fe351c033c6a2174be71bf8",
      "parents": [
        "ee1c45f88f5fcd1b1d43c325e0de366cc3d0ce36"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Apr 21 10:25:56 2017 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Apr 21 19:52:21 2017 +0000"
      },
      "message": "Make the _Unwind_Ptr declaration match clang\u0027s.\n\nBug: https://issuetracker.google.com/37126620\nTest: builds, boots angler\nChange-Id: I7d4a9b998f2e5c4c7b0beed87807d7b76a564c5c\n"
    },
    {
      "commit": "f17048bfb8fdf9a0340dc44f55cba8fddd776577",
      "tree": "4d4d13f287bddcf6b262d2e257616d43bd6194f8",
      "parents": [
        "bdbab30e32fbae214ce880ef438cf72a623c6388",
        "763f6e108a95fc8eb43e65a626351690cd98227b"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Tue Apr 11 06:07:06 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Apr 11 06:07:07 2017 +0000"
      },
      "message": "Merge \"Send developers straight to the text relocation docs.\""
    },
    {
      "commit": "763f6e108a95fc8eb43e65a626351690cd98227b",
      "tree": "0be2dfd8b46af2637479230a7c31487085988dca",
      "parents": [
        "2d389ffee98b6f480f4340ec408d37457e02fbd7"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Apr 10 09:52:33 2017 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Apr 10 16:41:52 2017 -0700"
      },
      "message": "Send developers straight to the text relocation docs.\n\nIt\u0027s been years since we allowed text relocations, but I had a developer\nask me how to fix them at last week\u0027s O Developer Day. They\u0027d never seen\nour docs, so let\u0027s try to fix that for anyone else who\u0027s still confused...\n\nBug: N/A\nTest: builds\nChange-Id: I9202a7b0a3f024041b646c43c87585f4fab22d09\n"
    },
    {
      "commit": "c40af334c7f2e76c3a34824a17ea3803caedbd7d",
      "tree": "36caea25e52b7eb589adadee447207dc2e6dc56d",
      "parents": [
        "afb59c3e4267bf4bea73a30ea3b5bc09c5e4fb74",
        "b8ab61804cec48e4ca585f4508fb1b7c6c5a04c5"
      ],
      "author": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Thu Apr 06 22:41:02 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Apr 06 22:41:02 2017 +0000"
      },
      "message": "Merge \"Move scopeguard into android::base\""
    },
    {
      "commit": "9e27e58faa6ff08efbe85fc62943d483ecfed61a",
      "tree": "0042c5148071c78240b2915f3f053ac82406402c",
      "parents": [
        "e06c69d07324f3da67aa063202e698dedd831365"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Mar 23 17:42:49 2017 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Apr 06 10:59:24 2017 -0700"
      },
      "message": "Add support for disabling the greylist.\n\nUseful for testing whether apps have actually stopped using greylisted\nlibraries even if they still have references to them in their apk to support\nold Android releases but also haven\u0027t bumped their targetSdkVersion yet.\n\nSince we already have two expensive __system_property_get calls and this\nwould add a third, optimize two (but leave the third since it\u0027s not\nobviously amenable to optimization). None of this matters for user builds,\nbut I don\u0027t want userdebug/eng to have distractingly different performance.\n\n(cherrypick of 7933bec2872aa1c3430149c7649726333c0ac9d8.)\n\nBug: http://b/36106661\nTest: ran \"can you escape 5\" with and without this property\nChange-Id: Id9a804695c1dca9b4be2ebd0e72f01817bb13cba\n"
    },
    {
      "commit": "b8ab61804cec48e4ca585f4508fb1b7c6c5a04c5",
      "tree": "4a1045e4b9e30c52e6c3886de8474c0aeb2c8996",
      "parents": [
        "12021ce9cf1ec1bc47cded3402ac9a3aa7b9b396"
      ],
      "author": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Wed Apr 05 16:20:29 2017 -0700"
      },
      "committer": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Wed Apr 05 16:37:07 2017 -0700"
      },
      "message": "Move scopeguard into android::base\n\nTest: boot bullhead, bionic unit tests\nChange-Id: I223249684867655ecb53713b10da41d3014f96ae\n"
    },
    {
      "commit": "6a2c7f5a68bf8a15287f9de1772bb48a359047a8",
      "tree": "87862ec8894932e9ae3213e40cac42289790851c",
      "parents": [
        "5d8b8310aaa43d7b8cb8809fdf805ba7f41df15e",
        "d3e7d088453e089b3d625b0864ccdf3c74893f18"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Sun Apr 02 02:14:45 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Sun Apr 02 02:14:47 2017 +0000"
      },
      "message": "Merge \"Fix lookup logic for linked namespaces\""
    },
    {
      "commit": "4113def4fa1526f1823549f6cc9cfe4c05964aa3",
      "tree": "9b5f0c6529739793c4c2b902953e6df1f7166257",
      "parents": [
        "ccec0f4c110a9f09bec995208e7cb252130835fe"
      ],
      "author": {
        "name": "Vishwath Mohan",
        "email": "vishwath@google.com",
        "time": "Wed Mar 29 15:31:34 2017 -0700"
      },
      "committer": {
        "name": "Vishwath Mohan",
        "email": "vishwath@google.com",
        "time": "Thu Mar 30 20:07:50 2017 -0700"
      },
      "message": "Refactor sanitized library on-disk layout - bionic.\n\nThis CL changes the linker to point to the newly refactored location\nof ASAN-ified libraries on disk.\n\nThis supports changes made by the following CLs -\nhttps://android-review.googlesource.com/#/c/359087/\nhttps://android-review.googlesource.com/#/c/359389/\n\nWhich refactor the on-disk location as follows:\n/data/lib* --\u003e /data/asan/system/lib*\n/data/vendor/* --\u003e /data/asan/vendor/*\n\nThere are a couple of advantages to this, including better isolation\nfrom other components, and more transparent linker renaming and\nSELinux policies.\n\nBug: 36574794\nBug: 36674745\nTest: m -j40 \u0026\u0026 SANITIZE_TARGET\u003d\"address\" m -j40 and the device\nboots. All sanitized libraries are correctly located in /data/asan/*.\n\nChange-Id: Iad8b298a66c38eb0f6327f6b51027f0728aa7a40\n"
    },
    {
      "commit": "d3e7d088453e089b3d625b0864ccdf3c74893f18",
      "tree": "0dac036e245c741b296a7fd611dbb98c3979c3a1",
      "parents": [
        "aa0b5054c52e10a9e4b5d5dd9daa90d707164af0"
      ],
      "author": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Mon Mar 27 14:11:02 2017 -0700"
      },
      "committer": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Wed Mar 29 15:36:40 2017 -0700"
      },
      "message": "Fix lookup logic for linked namespaces\n\nWhen looking for already loaded libraries include\nlinked namespaces to the search, but check if\nthe library is accessible from the main namespace.\n\nBug: http://b/36008422\nBug: http://b/35417197\nBug: http://b/34052337\nBug: http://b/36660652\nBug: https://issuetracker.google.com/36636090\nTest: run bionic-unit-tests --gtest_filter\u003ddl*:Dl*\nChange-Id: Ic7c1d48114da3ca5dc6512ef03f595dd17b6ed17\n"
    },
    {
      "commit": "6b0f17e58822dcc19ed61cada3c6fc43b6b9b19e",
      "tree": "ab0df0d2c9ef0edb25f1b90ee8a778a30055fe16",
      "parents": [
        "840ae69408c9b6ca269bce4657b9696cc6720918",
        "c9dced28b6895edf6b80831d3a9bd5d5d13ee50c"
      ],
      "author": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Tue Mar 28 00:59:08 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Mar 28 00:59:09 2017 +0000"
      },
      "message": "Merge \"Make anonymous namespace isoalted.\""
    },
    {
      "commit": "c9dced28b6895edf6b80831d3a9bd5d5d13ee50c",
      "tree": "f1a077fa5619592ab100d37d7c366741946175d9",
      "parents": [
        "e98d1e68ce37bb9238e3c50ea6b01d1057adb2eb"
      ],
      "author": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Mon Mar 27 15:42:17 2017 -0700"
      },
      "committer": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Mon Mar 27 15:42:17 2017 -0700"
      },
      "message": "Make anonymous namespace isoalted.\n\nThis addresses outstanding todo for anonymous namespace\nand fixes an app compatibility bug.\n\nBug: http://b/36008422\nTest: start app from http://b/36008422 and make sure it runs\nChange-Id: Ie148418b944379ee1000e7274f2f6c1eca511d6c\n"
    },
    {
      "commit": "840ae69408c9b6ca269bce4657b9696cc6720918",
      "tree": "42e9b045fb69006a2a9ee1bf37e618878e3a3342",
      "parents": [
        "deca8effd089b7b3c97eec8a1fb5dcedb9c35ade",
        "a1446975005a3aeed6e90defa96eab938602b7c5"
      ],
      "author": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Sat Mar 25 07:46:18 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Sat Mar 25 07:46:22 2017 +0000"
      },
      "message": "Merge \"Revert \"linker: add more directories to default lib paths\"\""
    },
    {
      "commit": "deca8effd089b7b3c97eec8a1fb5dcedb9c35ade",
      "tree": "e3f3c35c83a6e476d1d20c7d83274353b7bf07d3",
      "parents": [
        "fe96db819ba0254123f4960bc150ce2c104d3bc0",
        "4cabfaad340c957ff691cfbc420b29da805c5dd8"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Sat Mar 25 05:17:31 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Sat Mar 25 05:17:32 2017 +0000"
      },
      "message": "Merge \"Load namespace configuration from ld.config.txt\""
    },
    {
      "commit": "4cabfaad340c957ff691cfbc420b29da805c5dd8",
      "tree": "91df98d18f36ed19f857db91688c8b62f6f242de",
      "parents": [
        "e98d1e68ce37bb9238e3c50ea6b01d1057adb2eb"
      ],
      "author": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Tue Mar 07 11:19:05 2017 -0800"
      },
      "committer": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Fri Mar 24 15:50:45 2017 -0700"
      },
      "message": "Load namespace configuration from ld.config.txt\n\nThis change allows customization of default namespace\nconfiguration for different executables. It also enables\ntarget_sdk_version setup for binaries (note that this\noption should explicitly be enabled in ld.config.txt).\n\nBug: http://b/30706810\nBug: http://b/30435785\nTest: run linker-unit-tests/bionic-unit-tests, boot angler\nChange-Id: Ibbe87209acf1538fc9cec04944f3d22a190c38f1\n"
    },
    {
      "commit": "6705e8caf55834112ec46ac95d5b08ce499abe20",
      "tree": "66be931fa44401e638e5edb4dbc444379579e400",
      "parents": [
        "e98d1e68ce37bb9238e3c50ea6b01d1057adb2eb"
      ],
      "author": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Tue Mar 21 10:29:06 2017 -0700"
      },
      "committer": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Tue Mar 21 10:38:23 2017 -0700"
      },
      "message": "Add systrace output for dlclose/dlsym calls\n\nBug: http://b/27195126\nTest: manual: adb shell atrace -t 5 bionic\n      and run bionic-unit-tests --gtest_filter\u003ddl*\n\nChange-Id: I9e93a069dd440bb643890d9952913938442ac375\n"
    },
    {
      "commit": "5c4a58072fad88a2ab89cfe063dd217041491357",
      "tree": "814a5452c3dfd0a60ef1f02102461305a9958761",
      "parents": [
        "2a4a5e72f161699be75b247e6fcb3a9ac6d8a852"
      ],
      "author": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Fri Mar 17 16:41:34 2017 -0700"
      },
      "committer": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Mon Mar 20 13:34:52 2017 -0700"
      },
      "message": "Add systrace output for dlopen calls\n\nBug: http://b/27195126\nTest: manual: adb shell atrace -t 5 bionic\n      and run bionic-unit-tests --gtest_filter\u003ddl*:Dl*\n\nChange-Id: Ib2bad794e571b89bd1f52c9e0de642c2092e5c21\n"
    },
    {
      "commit": "a1446975005a3aeed6e90defa96eab938602b7c5",
      "tree": "4d6e702a032dfeb2bbe071f12ca614426323e432",
      "parents": [
        "1daa18e73714150e26c4380840c793e406c11095"
      ],
      "author": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Fri Mar 17 00:08:23 2017 +0000"
      },
      "committer": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Fri Mar 17 00:08:23 2017 +0000"
      },
      "message": "Revert \"linker: add more directories to default lib paths\"\n\nThis reverts commit 1daa18e73714150e26c4380840c793e406c11095.\n\nTo be replaced with customized linker-namespaces for different kind of binaries.\n\nBug: http://b/34407260\nChange-Id: Ib4e480669bbdf44ee4f59bf05f07d3e082c348c9\nTest: m\n"
    },
    {
      "commit": "e5422d7d1f2cb1818126fe46af31c19e1c76b198",
      "tree": "a24f107a89d17c759154368beeaee94319061bc6",
      "parents": [
        "b1fe870a36d95f3064e45ff6bfedd061a860a179",
        "1daa18e73714150e26c4380840c793e406c11095"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Tue Mar 14 00:15:49 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Mar 14 00:15:50 2017 +0000"
      },
      "message": "Merge \"linker: add more directories to default lib paths\""
    },
    {
      "commit": "5b715003011e6b108faa5d651ed370e6a2157efa",
      "tree": "0958bee2bf2b45ccc00fc2017b6e84fdf3c4473b",
      "parents": [
        "cf96f35dd16fdefbcb91598cdee1f6e097bb4a56"
      ],
      "author": {
        "name": "Evgenii Stepanov",
        "email": "eugenis@google.com",
        "time": "Mon Oct 03 15:09:28 2016 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Mar 13 10:04:36 2017 -0700"
      },
      "message": "Apply ASan linker path translation to subdirectories.\n\nSpecifically, this change would translate /system/lib/hw/foo.so to /data/lib/hw/foo.so.\n\nBug: 30320104\nTest: in SANITIZE_TARGET\u003daddress build, /proc/$PID/maps for\n  system_server show libraries from /data/lib64/hw and not from\n  /system/lib64/hw.\nChange-Id: Ia1fa22fa1ca088fe76e41308762efe037541fc74\n"
    },
    {
      "commit": "1daa18e73714150e26c4380840c793e406c11095",
      "tree": "3f754c399c90be73ac6489a2275489a1a8875726",
      "parents": [
        "6e528631d1eb4779dc93098c696c3a18e6bcecfb"
      ],
      "author": {
        "name": "Jiyong Park",
        "email": "jiyong@google.com",
        "time": "Tue Jan 31 17:32:46 2017 +0900"
      },
      "committer": {
        "name": "Jiyong Park",
        "email": "jiyong@google.com",
        "time": "Mon Mar 13 08:55:23 2017 +0900"
      },
      "message": "linker: add more directories to default lib paths\n\nDue to b/33681361, libraries are now installed to different paths than\nbefore. In order for linker to load libraries from the new paths, the\ndefault lib paths are updated.\n\nHowever, this patch is temporary; different paths must be used depending\non whether the process is executing vendor executable or framework\nexecutable. For example, vendor executable should not be able to access\n/system/lib/, which is for framework-internal libs. Similarly,\nframework executables should not be able to access /vendor/lib.\n\nWe have several solutions (linker namespace and DT_RUNPATH) to support\nthe scenario, but haven\u0027t concluded which is better. Furthermore, if we\nrestrict the search path right now, it will break many parts of Android\nthat are not yet prepared for the restriction. So, until then, we\ntemporarily use the single search path for both framework/vendor\nexecutables.\n\nTest: build \u0026 run\nChange-Id: I806e9b4379bce96653b1dd3354b9f4801abb0411\n"
    },
    {
      "commit": "3e0821d7c227060b83917c9071dc846851b3c7c8",
      "tree": "c6071953584df47e957d150c14526cfb5a979541",
      "parents": [
        "77ad64267c65fe876f27265ee91063810f5fe71a"
      ],
      "author": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Tue Mar 07 11:02:10 2017 -0800"
      },
      "committer": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Tue Mar 07 11:02:10 2017 -0800"
      },
      "message": "loader: anonymous ns initialization is not required\n\nAnonymous namesapce is zygote-specific workaround and\nis not really required for other binaries.\n\nThis change allows creating namespaces without initializing\nanonymous namespace.\n\nTest: bionic-unit-tests\nChange-Id: I62adc39ad69ce56b3760d36f45e3c0487c438598\n"
    },
    {
      "commit": "77ad64267c65fe876f27265ee91063810f5fe71a",
      "tree": "110f5fb24301524b9b4a49c6425429106602186c",
      "parents": [
        "cdf19c84e8c10f5afa079790e5a2b0a55a3599e9"
      ],
      "author": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Mon Mar 06 13:02:29 2017 -0800"
      },
      "committer": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Mon Mar 06 13:02:29 2017 -0800"
      },
      "message": "Remove g_default_ld_paths global variable\n\nTest: boot, run bionic-unit-tests\nChange-Id: Id05d53475cbea6d62bd5fa1ab5e457ac82bab523\n"
    },
    {
      "commit": "35c8e3b1251af62897a9babd693e2b1be5676160",
      "tree": "3cc1d7cfe239740c04f29d35058048bea7b47c9f",
      "parents": [
        "5f41ce25c60df2012b58846940dfac58dce50e59"
      ],
      "author": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Mon Feb 27 12:17:47 2017 -0800"
      },
      "committer": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Mon Feb 27 14:16:04 2017 -0800"
      },
      "message": "Fix greylist exception to account for linked namespaces\n\nDo not load second copy of libraries that are supposed to\nbe provided by linked namespaces. Also do not print\nerror in the log if caller tries to open shared library\nusing absolute path for apps targeting N+.\n\nBug: http://b/35454141\nBug: http://b/26833548\nBug: http://b/35338922\nTest: run bionic-unit-tests --gtest_filter\u003ddl*\nChange-Id: Icf3aeedff18d287d2ba0b3df3808b100f3ef5f7a\n"
    },
    {
      "commit": "2cb4dfbb8c71ccc7890ecfd792790d7f6842b5a8",
      "tree": "720378e423a3c702358bb4341f93e8e9517d625f",
      "parents": [
        "c9fb1774c5696d4565042ee80df4cc721dd33153",
        "7a34b9d57a762ca7cd6b8d6b9f9fb45c2b991da7"
      ],
      "author": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Sat Feb 11 19:26:48 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Sat Feb 11 19:26:49 2017 +0000"
      },
      "message": "Merge \"Replace public library list with shared lib sonames (part 2/2)\""
    },
    {
      "commit": "ec90e24d33837e107b45e7c98b2f5fb4bc115a5e",
      "tree": "da59fda3b0eac92d43fe86dc457506a11382953c",
      "parents": [
        "132768084e24119c337e56fd110b97a23e5593c2"
      ],
      "author": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Fri Feb 10 11:04:20 2017 -0800"
      },
      "committer": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Fri Feb 10 16:11:51 2017 -0800"
      },
      "message": "loader: fix d-tor call order\n\nIn the case when there are multiple dependencies on\nthe same library in the local_group the unload may\nin some situations (covered now by tests) result\ncalling d-tors for some libraries prematurely.\n\nIn order to have correct call order loader checks if this\nis last dependency in local group before adding it to BFS\nqueue.\n\nBug: http://b/35201832\nTest: bionic-unit-tests --gtest_filter\u003ddl*:Dl*\nTest: bionic-unit-tests-glibc --gtest_filter\u003ddl*\nChange-Id: I4c6955b9032acc7147a51d9f09b61d9e0818700c\n"
    },
    {
      "commit": "7a34b9d57a762ca7cd6b8d6b9f9fb45c2b991da7",
      "tree": "8dad357eee8d7672069abd75a63717d65b5f8ae6",
      "parents": [
        "7d429d3c480166e1013bcdf68f4be479209aa509"
      ],
      "author": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Fri Feb 03 14:07:34 2017 -0800"
      },
      "committer": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Thu Feb 09 23:26:44 2017 -0800"
      },
      "message": "Replace public library list with shared lib sonames (part 2/2)\n\nThis commit updates interface of libdl.c.\n\n1. android_init_namespaces is replaces with android_init_anonymous_namespace\n2. added 2 arguments to android_create_namespace to specify linked namespace\n   and the list of shared libraries sonames.\n3. symbol lookup does not get past boundary libraries (added check and test for it).\n\nBug: http://b/26833548\nBug: http://b/21879602\nTest: bionic-unit-tests --gtest_filter\u003ddl*:Dl*\nChange-Id: I32921da487a02e5bd0d2fc528904d1228394bfb9\n"
    },
    {
      "commit": "7d429d3c480166e1013bcdf68f4be479209aa509",
      "tree": "8aa0ee9551134cd88bc89ebdbc40e0f398f50971",
      "parents": [
        "e86a8d605b3df0c396e23ee02933c76d7040a73b"
      ],
      "author": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Wed Feb 01 15:28:52 2017 -0800"
      },
      "committer": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Thu Feb 09 23:26:44 2017 -0800"
      },
      "message": "Replace public library list with shared lib sonames (part 1/2)\n\nReplace public library list with shared lib sonames\nwhich are property of a link between namespaces\n\nThis change does not touch any external interfaces\nso from outside it behaves almost as it was before\n\nOne significant difference is that there is no longer\nneed to preload public libraries.\n\nBug: http://b/26833548\nTest: bionic-unit-tests --gtest_filter\u003ddl*:Dl*\nChange-Id: I57e44e18a9b4f07dcd6556436346be52f52b79d7\n"
    },
    {
      "commit": "68e6c03081688635c4e0d75b7c4c5afd37ae04f2",
      "tree": "2d2683664e4935b93a6cdbd0d0d626eff6aca345",
      "parents": [
        "3c838bbb4aca12936aa3d8e96f3b04af3803d0f4"
      ],
      "author": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Wed Feb 01 12:55:11 2017 -0800"
      },
      "committer": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Wed Feb 01 12:55:11 2017 -0800"
      },
      "message": "Check overflows in c-tor instead of doing it in d-tor\n\nTest: bionic-unit-tests --gtest_filter\u003ddl*:Dl*\nChange-Id: Id3b17a79732155b4e469c43c764afef1dfc59057\n"
    },
    {
      "commit": "3bd906146be88fb82ee4a93d06ff389a559155a7",
      "tree": "f4968eca30e92469d910a604815f1078e23ed4b0",
      "parents": [
        "b88112dcfc7954f001e722bb274b110e253dae6e"
      ],
      "author": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Wed Feb 01 08:54:43 2017 -0800"
      },
      "committer": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Wed Feb 01 09:43:09 2017 -0800"
      },
      "message": "Do not load second copy of a library into same namespace\n\nThis workaround was introduced in M in order to make sure\nthat linker loads libraries provided in apk in case a library\nwith the same name was loaded by the system.\n\nThis is no longer a problem starting with Android N because\napp is using different namespace and therefore does not see\nlibraries loaded by the system.\n\nTest: bionic-unit-tests --gtest_filter\u003ddl*:Dl*\nChange-Id: I9995258c0f361e8df35420682b84e85a0cb924b4\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": "4742abdcb52f16120016a5005c466230d4c46341",
      "tree": "c9d48c733f7a850a9849fe78ad305a71a4f7fb64",
      "parents": [
        "901de13c37912286db015b6f9113e39be46ce04d"
      ],
      "author": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Mon Dec 12 16:30:15 2016 -0800"
      },
      "committer": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Mon Dec 12 16:36:12 2016 -0800"
      },
      "message": "Add a way to track all dlsym calls\n\nAdd dlsym option to debug.ld.all and debug.ld.app.\u003cappname\u003e which\nenables logging of dlsym calls.\n\nBug: http://b/29458203\nTest: flash, set debug.ld.all to dlsym and check\n      if there are messages in logcat\n\nChange-Id: I9cb815a38b5b98aac9ebe3ac1540bcdedd2e8db0\n"
    },
    {
      "commit": "d9e427cf41893377dcdd0650ba20ff7cf7d72209",
      "tree": "6515aceab94a11861876b6e145adb6922183ebff",
      "parents": [
        "227894a754eb11cb1203c359192d59654b01b93e"
      ],
      "author": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Tue Nov 22 16:55:25 2016 -0800"
      },
      "committer": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Fri Dec 09 14:53:59 2016 -0800"
      },
      "message": "Bionic loader is no longer hijacking libdl.so\n\nDo not hijack libdl.so methods but make libdl proxy calls to\nloader instead. This will be replaces by calls to libc.so\nonce loader functionality is migrated.\n\nAlso add a lock to dl_unwind_find_exidx function call.\n\nTest: bionic-unit-tests --gtest_filter\u003ddl*:Dl*\nBug: http://b/27106625\nChange-Id: Ic33a7109a86f4262798d63a35f4c61d15b0068bb\n"
    },
    {
      "commit": "6c14f863093c7277c312b6dc224588ff0ccd9473",
      "tree": "4f001ef16c482781e2cca79ac0abef5b0cf38416",
      "parents": [
        "f8b4ff4aa1c1a855627b8dc36f0675d69ab9109d"
      ],
      "author": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Mon Dec 05 13:35:47 2016 -0800"
      },
      "committer": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Mon Dec 05 13:46:24 2016 -0800"
      },
      "message": "loader: asan path translation now works for symlinks\n\nBionic Loader now resolves real path for a library before running\nasan path-translation. This fixes situations for bundled loading\nlibraries which are effectively symlinks to system library;\nfor example:\n\n $ adb shell ls -l /system/app/NfcNci/lib/arm64/libnfc_nci_jni.so\n /system/app/NfcNci/lib/arm64/libnfc_nci_jni.so -\u003e /system/lib64/libnfc_nci_jni.so\n\nBug: http://b/33278445\nTest: make and boot\nChange-Id: If14a12087c92f8ca628504556332ba0cb67c9118\n"
    },
    {
      "commit": "ae4a0c186fb12129d9c677e71258f3cfce8abc07",
      "tree": "a0a1792effaeb7531c5724896eb441c63494ce99",
      "parents": [
        "5fabe027571627bf72eec1e23bfbb3a69845480a"
      ],
      "author": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Mon Nov 21 10:44:35 2016 -0800"
      },
      "committer": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Mon Nov 21 12:32:08 2016 -0800"
      },
      "message": "Log call to elf-constructors\n\nLog call to constructors when dlopen logging is enabled.\n\nBug: http://b/29458203\nTest: bionic-unit-tests --gtest_filter\u003ddl*:Dl*\nChange-Id: I0cd591bf147f8f910ae9def1ac4089ef44099aff\n"
    },
    {
      "commit": "585838ba327bebb94f5a5a37fd9eb371c782fcf5",
      "tree": "8bcbd9f90391ad4b3a8411dbac9f46c6dc8c04c4",
      "parents": [
        "60ba60dd25870fcc20bff19063dd68ba166f7592",
        "ffa45a8682cef0f29bb21284cd091b88f6f80ba1"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Thu Nov 17 02:48:41 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Nov 17 02:48:41 2016 +0000"
      },
      "message": "Merge \"Remove unused includes/externals\""
    },
    {
      "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": "ffa45a8682cef0f29bb21284cd091b88f6f80ba1",
      "tree": "3763c4a38293b1c113d3b33db2970a3483759c68",
      "parents": [
        "8945d5e43a25737f3f888a90742cc918b1124a05"
      ],
      "author": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Wed Nov 16 15:23:37 2016 -0800"
      },
      "committer": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Wed Nov 16 15:23:37 2016 -0800"
      },
      "message": "Remove unused includes/externals\n\nTest: mm\nChange-Id: I4b88602b7d0a18664cbeddfa9854e589c2886e1a\n"
    },
    {
      "commit": "816676e70da0e00761b0d23f512ea3571211b3ae",
      "tree": "8be0a547c1c6def6d16b81b212c8d3188241711f",
      "parents": [
        "d8244214751f9b48e60e69910c4e7175f8fab1ac"
      ],
      "author": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Wed Oct 19 11:00:28 2016 -0700"
      },
      "committer": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Wed Oct 19 14:21:42 2016 -0700"
      },
      "message": "Add test for libraries with textrels\n\nMake sure android fails to load them.\n\nBug: http://b/30795430\nTest: bionic-unit-tests --gtest_filter\u003ddlfcn.dlopen_invalid*\nTest: cts-tradefed run singleCommand cts --skip-preconditions -m CtsBionicTestCases\nChange-Id: Id0ebdf336b2f297007479ceb1bbccf778a7ca3f2\n"
    },
    {
      "commit": "2589f9de6473a2030594e2c5e95541f00eb2dc7a",
      "tree": "a47afc3b1fea48a1eb789a05aa589ad13196cbb3",
      "parents": [
        "d11d1e4a97699af49f6f5b21a4ed0ed91575af52"
      ],
      "author": {
        "name": "neo.chae",
        "email": "neo.chae@lge.com",
        "time": "Tue Oct 04 11:00:27 2016 +0900"
      },
      "committer": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Wed Oct 05 03:15:49 2016 -0700"
      },
      "message": "Fix for default library path \"/vendor/lib\"\n\nAndroid N restrict which libraries C/C++ code\ncan link against at runtime.\n\nIf device has a vendor partition\nthen /system/vendor symlink to /vendor.\nOtherwise /vendor symlink to /system/vendor.\n\nBut is_system_library() is only checking /vendor/lib.\nIt will return false for /system/vendor/lib path.\nIt is need to add a real path to default library path.\n\nSimilarily, default ld library path is already checking.\nparse_LD_LIBRARY_PATH()-\u003eparse_path()-\u003eresolve_paths()\n\nTest: build bionic and run bionic-unit-tests\nBug: http://b/31919547\nChange-Id: Ie6777e2b02729948ce77a94de32343d40358bf2c\nSigned-off-by: Hyangseok Chae \u003cneo.chae@lge.com\u003e\n"
    },
    {
      "commit": "3f6605754464c0856862c4d66ed03227a60a6f4d",
      "tree": "16a13eff76ffede482df87d0eaf8f069ad0dc43d",
      "parents": [
        "0f81dd35485563a2d111f01a1c14ac3678192c12"
      ],
      "author": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Fri Sep 09 10:00:39 2016 -0700"
      },
      "committer": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Tue Sep 13 13:38:58 2016 -0700"
      },
      "message": "linker: Refactoring step 3 of many\n\nExtract linker executable specific code to linker_main.cpp;\nthis part of code does not have a place in libdl.a/so.\n\nBug: http://b/14998480\nBug: http://b/30706810\nTest: mm \u0026\u0026 run bionic-unit-tests\nChange-Id: I90f7475e93a919b0f9525da22928089ad35b8f6c\n"
    },
    {
      "commit": "f4e3ebe1e3cde233b4ea12bb2cdceb9df3f5f567",
      "tree": "63282fa2b0f179f125d1fb4409ced271f351f031",
      "parents": [
        "0e99e4089222871bb4342a1314cd1b7490f36db6"
      ],
      "author": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Thu Aug 25 14:53:35 2016 -0700"
      },
      "committer": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Thu Aug 25 19:41:23 2016 -0700"
      },
      "message": "linker: stat /proc/self/exe instead of executable_path\n\nThe absolute path to an executable may no longer be valid for\nexample when the file is unlinked immediately after exec.\nUsing /proc/self/exe instead of absolute path solves this problem.\n\nBug: http://b/31084669\nTest: Run the app from http://b/31084669 make sure executable starts\nTest: by checking ps and /proc/\u003cpid\u003e/exe\nChange-Id: I5c819f39ef0fc4fc71b05de71e8af9ede611f04c\n(cherry picked from commit 7da4bbbe87a7eca742c6c45a76aaf191aa70d948)\n"
    },
    {
      "commit": "4cf7024db7c89dab73c8668031263eb8fd991d8f",
      "tree": "b1e65649c1b7dfa203ffd87542946ac28add4da8",
      "parents": [
        "cea35d77a2a17717e7544a9eb39761ab242f1fa7"
      ],
      "author": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Thu Aug 11 11:11:52 2016 -0700"
      },
      "committer": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Thu Aug 11 11:11:52 2016 -0700"
      },
      "message": "linker: use stat(2) to check file existence\n\nopen(2) can be used to open directories; use stat to\ncheck that the file exists and is a regular file.\n\nAddresses review comments for 5aa67675f853af9588ac9274ecf86d7858695ce2\n\nBug: http://b/30320104\nChange-Id: Ia944db2f2f779a87ea01dd41dcd171e59c9bef01\n"
    },
    {
      "commit": "45d25ca72872ed5df08da7a19a4c95c56d64088c",
      "tree": "eb32b3458912e9ecbb77ac73b77596f4ea8e65c9",
      "parents": [
        "4519a4d1829c9e9f80cf45f1003e5937f1dfb04e"
      ],
      "author": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Tue Aug 09 19:38:43 2016 -0700"
      },
      "committer": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Wed Aug 10 21:37:50 2016 -0700"
      },
      "message": "linker_asan: Translate absolute dlopen paths to use asan-libraries.\n\nThis patch enables absolute path translation to instrumented library\nwhen linker_asan is in use.\n\nTest: adb shell cat /proc/\u003crlid pid\u003e/maps | grep libril-qc-qmi-1.so\n      check that it is mapped from /data/vendor/lib64 and not /vendor/lib64\nBug: http://b/30320104\nChange-Id: I3bc24754b192afc0a72d6f3801f7b42141ce715b\n(cherry picked from commit 5aa67675f853af9588ac9274ecf86d7858695ce2)\n"
    },
    {
      "commit": "576a375bc2049d88998b43429a15df0a1011861f",
      "tree": "990f058beff9efa7cf6881e2d8247a241d09e9ac",
      "parents": [
        "dcc8feb6966779ef0c4739aa4fdb35bf4dc01713"
      ],
      "author": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Tue Aug 09 06:58:55 2016 -0700"
      },
      "committer": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Tue Aug 09 06:58:55 2016 -0700"
      },
      "message": "linker: fix mips build\n\nChange-Id: I88c5ba7f33825ae9b36992b32d30579ec4a66915\nTest: lunch aosp_mips-eng \u0026\u0026 mm\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": "b943f303a2d67d1e4c2fc8c4df3b4407888d777b",
      "tree": "38566563bc3582980a8f8dbd4b53cc370cba4660",
      "parents": [
        "bbf593f0f0c116305a0eafcf8271381d92b1143c"
      ],
      "author": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Wed Aug 03 16:00:10 2016 -0700"
      },
      "committer": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Mon Aug 08 16:12:52 2016 -0700"
      },
      "message": "Move android_namespace_t to a separate file.\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 1 of many)\n\nChange-Id: I57ac36677a815800dc127c8c45c3ea806c37e247\nTest: bionic-unit-tests --gtest_filter\u003ddl*:Dl*\n"
    },
    {
      "commit": "769b33fadf45a039741f932672ac2c4f901d7d4a",
      "tree": "bf29858de176dd3bf144c547174eb99e1727e85a",
      "parents": [
        "c5e79567e0b02eb3a02d6b2820b901d4ba392e87"
      ],
      "author": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Thu Jul 21 11:33:40 2016 -0700"
      },
      "committer": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Mon Aug 01 19:47:27 2016 +0000"
      },
      "message": "Sync linker with internal branch\n\nThis change includes dlwarning implementation and\nthe compatibility greylist for apps targeting pre-N.\n\nChange-Id: Ibf02a07cc58cbbb1a5aef4ac34558c5d43e4305f\nTest: Run bionic-unit-tests --gtest_filter\u003ddl*:Dl*\n"
    },
    {
      "commit": "554374693408cd7c74d0cae596fca7349661edea",
      "tree": "3eb695917d4e37fc7f78a26202ec2119692fd964",
      "parents": [
        "a9fbaee593242b3257819c1603cdd157604247e7"
      ],
      "author": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Wed Jul 20 15:33:07 2016 -0700"
      },
      "committer": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Wed Jul 20 16:10:19 2016 -0700"
      },
      "message": "Pass argc/argv/envp to dso constructors\n\nThe glibc implementation of the loader passes argc/argv/envp\nto all elf constructors. This change makes bionic linker\nbehave in the same way.\n\nBug: http://b/30145768\nChange-Id: I1c65c42aa5305a5b133c64b5748205bbde869e0e\nTest: run bionic-unit-tests --gtest_filter\u003ddl*:Dl*\n"
    },
    {
      "commit": "b996d60493a2e501655f23523b31fe34a63edd5c",
      "tree": "3c2935b0802487560a110483a1b510a10c1713ba",
      "parents": [
        "4580ea4f16a94087fe02b8a67744c1fd452a2139"
      ],
      "author": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Mon Jul 11 18:11:39 2016 -0700"
      },
      "committer": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Tue Jul 12 14:22:13 2016 -0700"
      },
      "message": "linker: Enable debug logging via properties\n\nThis patch lets developers tune logging of dlopen/dlerror with\nsetting system property.\n\nNote that for security purposes this option is disabled on user build\nfor non-debuggable apps.\n\nFor starters there are 3 debug options:\n dlerror - enables logging of all dlerrors\n dlopen - traces dlopen calls\n\nTo enable system-wide logging (works only for userdebug/eng builds)\nuse debug.ld.all property.\n\nTo enable logging for particular app use debug.ld.app.\u003cappname\u003e property.\n\nExample: Running \"adb shell setprop debug.ld.all dlerror,dlopen\" will log all\ndlerror message as well as trace all calls to dlopen.\n\nBug: http://b/29458203\nChange-Id: I2392c80a795509e16fe5689d0500d18b99772a64\n"
    },
    {
      "commit": "801dfc03cb0a439de7d901f230848cb585622479",
      "tree": "98509bd9ed51501c57575e854bde60f3938f36d8",
      "parents": [
        "835bd47cc4b59488a24aeb28989097ca701d466b",
        "3cc387eff4faaaf02a879518fc4139896b60b79a"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Mon Jun 20 20:22:18 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Jun 20 20:22:18 2016 +0000"
      },
      "message": "Merge \"Lose debuggerd client code to libdebuggerd_client.\""
    },
    {
      "commit": "523e2a98072314c575107ecb51dd2e4ef31ae242",
      "tree": "35f1ea01e3cd42dc08d32788257706758608f4be",
      "parents": [
        "112be469bb0671f19f4f61e021693595384142fa"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Fri Jun 17 13:46:36 2016 -0700"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Mon Jun 20 11:36:54 2016 -0700"
      },
      "message": "Make missing public soname error message clear.\n\nIf a public library is missing, make it clear that there is no\nlibrary with that soname that is missing. This can help diagnose\nproblems if a library exists, but the library doesn\u0027t have the right\nsoname.\n\nBug: 29400363\n(cherry picked from commit 9a84d90c753dd934c3086322f6ba6b7a1f580c8c)\n\nChange-Id: Ie2306a2e28aff779d07441dc8af078256b184f8a\n"
    },
    {
      "commit": "3cc387eff4faaaf02a879518fc4139896b60b79a",
      "tree": "2aa1ee4c122b486fbe5309dc9b0b1bcacac300c0",
      "parents": [
        "112be469bb0671f19f4f61e021693595384142fa"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Wed Jun 15 18:33:26 2016 -0700"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Wed Jun 15 18:33:26 2016 -0700"
      },
      "message": "Lose debuggerd client code to libdebuggerd_client.\n\nBug: http://b/24414818\nChange-Id: I524714e081a27df4d2046f0c8eb853a1b20592e6\n"
    },
    {
      "commit": "d799b2bb7e9335786ab4596757d871e4a7722ff0",
      "tree": "c287adb0a92322d167f9b26949e9564363996bb0",
      "parents": [
        "d1c96e21593fe5ff4c2989b9902036c65532b4fd"
      ],
      "author": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Tue May 24 14:29:56 2016 -0700"
      },
      "committer": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Tue May 24 14:45:46 2016 -0700"
      },
      "message": "Correctly handle the case of empty LD_PRELOAD entries\n\nPrevious android versions ignored empty entries for LD_PRELOAD\n\nBug: http://b/28936779\nChange-Id: I757478fe0c604ee378186511cb13b757fd9a9864\n"
    },
    {
      "commit": "5240863ed559cb4c2b121ddfbf6b3d78ac15e38f",
      "tree": "6f511f9f4224a0d91794585297fd728139f5596b",
      "parents": [
        "51ee871e19601e1edbac948f961fc557b537870a"
      ],
      "author": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Mon May 23 10:31:11 2016 -0700"
      },
      "committer": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Mon May 23 10:31:11 2016 -0700"
      },
      "message": "Do not resolve caller_ns when it is not needed\n\ncreate_namespace resolves caller namespace only\nwhen caller did not explicitly specify parent namespace.\n\nThis saves about 25 microseconds for the case when\nparent_namepsace is not null (for example when creating\nsecond classloader for the app).\n\nBug: http://b/28801010\nChange-Id: I50ded272c931db701e5a1d8c88ed5ffb13416539\n"
    },
    {
      "commit": "d2205a641c5908fc3345965bec1bc398604ed4e9",
      "tree": "2210c40dc5d5f983915a5ee605ff7d6a8ccdd735",
      "parents": [
        "7d99bd38e479170d4d1d2e55c5df97b1cacaebfd"
      ],
      "author": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Wed May 18 18:14:19 2016 -0700"
      },
      "committer": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Thu May 19 10:47:23 2016 -0700"
      },
      "message": "Do not check zip-entry validity on create_namespace\n\nThis operation is the most expensive one and since it is\nunlikely that the zip-entry name is invalid (given that it\nis constructed by the platform) - it can removed.\n\nThe worst case scenario is dlopen() of non-existing libraries\ntaking more time. And this use-case is not on the critical path.\n\nBug: http://b/28801010\nChange-Id: I10a6b0bf342404ab72f0f5102ebf19f6c06ee6bf\n(cherry picked from commit a5c1c8e820ec3057f798f675bf8af19a4a29b396)\n"
    },
    {
      "commit": "42abf3d241b8fd59c3911bd04f13cd4e40e46448",
      "tree": "8a04b901c06a0ab0125efdb5afb5a60935eff2b4",
      "parents": [
        "49fbce11e6373ad4a791d44a678f37ecb9498ba2",
        "fc2da53440383fe1026e0eb287d643b577c2707d"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Tue May 17 22:43:00 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue May 17 22:43:01 2016 +0000"
      },
      "message": "Merge \"linker: Allow caller to specify parent namespace\""
    },
    {
      "commit": "2ba1cf39ae6087249a839ec7b3793d4d4fa75438",
      "tree": "adf1d98570a548157112a307ccd58c17b5ffb320",
      "parents": [
        "5df5884743306f7b2ee437c293f4197101528a98"
      ],
      "author": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Tue May 17 13:29:37 2016 -0700"
      },
      "committer": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Tue May 17 13:55:46 2016 -0700"
      },
      "message": "Fix dlopen of main executable by absolute path\n\nThis CL adds initialization of inode for the main executable\nwhich enables linker to resolve the correct soinfo when\napplication calls dlopen with absolute path to the\nmain executable.\n\nBug: http://b/28420266\nChange-Id: I102e07bde454bd44c6e46075e3faeeb5092830d8\n"
    },
    {
      "commit": "fc2da53440383fe1026e0eb287d643b577c2707d",
      "tree": "c50829121dc2d18185841dfad818a456d6db4d9b",
      "parents": [
        "5df5884743306f7b2ee437c293f4197101528a98"
      ],
      "author": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Thu May 12 15:20:21 2016 -0700"
      },
      "committer": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Tue May 17 13:37:03 2016 -0700"
      },
      "message": "linker: Allow caller to specify parent namespace\n\nThis change enables apps to share libraries opened\nwith RTLD_GLOBAL between different classloader namespaces.\n\nThe new parameter to create_namespace allows native_loader\nto instruct the linker to share libraries belonging to\nglobal group from a specified namespace instead of\nusing the caller_ns.\n\nBug: http://b/28560538\nBug: https://code.google.com/p/android/issues/detail?id\u003d208458\nChange-Id: I5d0c62730bbed19cdeb16c7559c74aa262a2475f\n"
    },
    {
      "commit": "83fcb542088db7874a387f4f41caac2019821fd2",
      "tree": "4e0a4e3fce5363fd060fc2a65dd94e1723763b45",
      "parents": [
        "d3f51a482f196cd29e6da0db2f8513670e9a66cf"
      ],
      "author": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Wed May 04 17:19:14 2016 -0700"
      },
      "committer": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Fri May 06 14:50:23 2016 -0700"
      },
      "message": "Fix linker crash on trying to unload main executable\n\nLinker crashed if linking of the main executable fails\ninstead of aborting with readable error message.\n\nThis patch modifies unload to soinfo_unload it all at once\nin this particular case. This helps avoid situations when\none of the libraries on the DT_NEEDED list of main executable\nhas gotten unloaded by previous library unload because it\nDT_NEEDED it too.\n\nExample (consider following dependency tree):\nmain_executable\n|-\u003e liba.so\n  |-\u003e libb.so\n|-\u003e libb.so\n\nThe list of the libraries need to be unloaded in this case\nis [liba.so, libb.so], but if linker does unload one by one\nby the time it gets to libb.so - the soinfo for the library\nis already unloaded (and the segments were unmapped).\n\nPassing everything as an array helps soinfo_unload to check\nif a library was already unloaded by looking into local_unload_list.\n\nBug: http://b/28565608\nChange-Id: I7199290e10a186057dcf3b7b68dbce954af7dba1\n"
    },
    {
      "commit": "54807617dde7c816af09517c928a6f1261148faf",
      "tree": "d8fc789208e8d3e2cf2c8b4b187592bd2786a59c",
      "parents": [
        "4d9a97bb916aaa7d7bf819ef999d4b1a58d4750d"
      ],
      "author": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Thu Apr 21 14:57:38 2016 -0700"
      },
      "committer": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Thu Apr 21 15:37:01 2016 -0700"
      },
      "message": "Improve error message for empty list of public libs\n\nChange-Id: I5a3cbc99d34e05559426b521a964d1407b67a6c4\n"
    },
    {
      "commit": "1c3a5d87f2844b637f48f43ca22a6ac5e4cbf9c9",
      "tree": "26edd4bfb5c8d31420259915b361ceca881843e4",
      "parents": [
        "bd26f23c84c6c3a1179a9bf9cca4b5e2941bf042",
        "83b44a9e733a20695c7171c6272c0a0f4958e969"
      ],
      "author": {
        "name": "Than McIntosh",
        "email": "thanm@google.com",
        "time": "Wed Apr 20 14:23:10 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Apr 20 14:23:10 2016 +0000"
      },
      "message": "Merge \"Rename DT_MIPS_RLD_MAP2 flag to DT_MIPS_RLD_MAP_REL\""
    },
    {
      "commit": "aca299ac4721809d6fc61e25c505bb59acd23fbc",
      "tree": "9ab0080d50c63440a2368d74d8256ced4726e9db",
      "parents": [
        "30bc91a083e45acfded89604474189628e5c1259"
      ],
      "author": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Mon Apr 11 12:42:58 2016 -0700"
      },
      "committer": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Thu Apr 14 11:52:16 2016 -0700"
      },
      "message": "Remove dangling links in secondary namespaces\n\nlinker didn\u0027t remove link to the soinfo from shared\nnamespaces on soinfo_unload, because it didn\u0027t keep\nrecord of all namespaces the library is added to.\n\nThis change adds test for this and also fixes the\nproblem by introducing list of secondary namespaces\nto soinfo, which is used to remove soinfo in\nsoinfo::remove_all_links().\n\nBug: http://b/28115950\nChange-Id: Ifbf6e54f92fa6e88f86b6a8dd6dc22d4553afd22\n"
    },
    {
      "commit": "3647314d89cecb3fcd2eb6e9569a22bfec1982fd",
      "tree": "f3a2b125f491d7b4d9c88249fff37ae64e1f74c4",
      "parents": [
        "3ae69aab0eabc635f0801fa157cce3a04b6ed08d"
      ],
      "author": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Wed Apr 13 14:47:36 2016 -0700"
      },
      "committer": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Wed Apr 13 15:08:01 2016 -0700"
      },
      "message": "linker: remove unnecessary reset of constructors_called flag\n\nlinker doesn\u0027t call d-tors for RTLD_NODELETE libraries. There is\nno need in reseting this flag in call_destructors (which is called\nfrom soinfo_unload).\n\nChange-Id: I3ed03fa7207b7acf598067276fbb8874e29b5e53\n"
    },
    {
      "commit": "dd906d7da0595902bbf1b381c84fd9a8a4816973",
      "tree": "fe969282de6f716637055f5d5cd9c162205dbd81",
      "parents": [
        "868b6fa4261a1d09e016cab6f43dada0273694b8"
      ],
      "author": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Wed Apr 13 11:46:59 2016 -0700"
      },
      "committer": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Wed Apr 13 12:41:41 2016 -0700"
      },
      "message": "linker: unload RTLD_NODELETE libraries when loading fails\n\nLinker was not unloading libraries marked with RTLD_NODELETE\neven when there was a error on load. For example when one of\ndt_needed libraries was not found.\n\nBug: http://b/27911891\nChange-Id: Ibc0bf110aa41fbfdc9f327ad8c364f2e3600af71\n(cherry picked from commit 79abce42146b27d523f309e0a1bc9f50175191cb)\n"
    },
    {
      "commit": "83b44a9e733a20695c7171c6272c0a0f4958e969",
      "tree": "972b1f9622652255bebf6da89c1a76adf5c59c54",
      "parents": [
        "733c92fa3632c5ac566cdf6f879e4b9e77c11ecb"
      ],
      "author": {
        "name": "Lazar Trsic",
        "email": "Lazar.Trsic@imgtec.com",
        "time": "Wed Apr 06 13:39:17 2016 +0200"
      },
      "committer": {
        "name": "Nikola Veljkovic",
        "email": "Nikola.Veljkovic@imgtec.com",
        "time": "Wed Apr 06 17:52:16 2016 +0000"
      },
      "message": "Rename DT_MIPS_RLD_MAP2 flag to DT_MIPS_RLD_MAP_REL\n\nChange-Id: I2c0972f5ce3586c3f4f130034f7063f97557ab4e\n"
    },
    {
      "commit": "d88e1f350111b3dfd71c6492321f0503cb5540db",
      "tree": "5055b3696a4222c5d91df0c35154a60918933df2",
      "parents": [
        "7c59c70200a86387d3c97e9d7f34e2b8dbed88b3"
      ],
      "author": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Thu Mar 24 15:30:30 2016 -0700"
      },
      "committer": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Mon Mar 28 13:15:40 2016 -0700"
      },
      "message": "linker: hide the pointer to soinfo\n\nHandle no longer is a pointer to soinfo of\na corresponding library. This is done to\nprevent access to linker internal fields.\n\nBug: http://b/25593965\nChange-Id: I62bff0d0e5b2dc842e6bf0babb30fcc4c000be24\n"
    },
    {
      "commit": "be910529322b461148debefd50b9e0d67ae84f8e",
      "tree": "67d5538b8f6af5fbc2ce29f1a18886321e6fe4a1",
      "parents": [
        "2846ae70fb967269e8fcd2d854d04c9aeb5d01d3"
      ],
      "author": {
        "name": "Mingwei Shi",
        "email": "mingwei.shi@intel.com",
        "time": "Thu Nov 12 07:02:14 2015 +0000"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Mar 25 14:10:05 2016 -0700"
      },
      "message": "libc: implement kernel vdso syscalls for i386\n\nThis patch uses __kernel_vsyscall instead of \"int 0x80\"\nas the syscall entry point. AT_SYSINFO points to\nan adapter to mask the arch specific difference and gives a\nperformance boost on i386 architecture.\n\nChange-ID: Ib340c604d02c6c25714a95793737e3cfdc3fc5d7\nSigned-off-by: Mingwei Shi \u003cmingwei.shi@intel.com\u003e\n"
    },
    {
      "commit": "722072d65abb1b9fa709f5c7ae8afd98ef5ab7af",
      "tree": "c19eb6837ed584d36e63a9cf10cb15d44280c362",
      "parents": [
        "6212e5dfada2ce1cd8b4915389452cba09e75b69"
      ],
      "author": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Mon Mar 21 17:10:12 2016 -0700"
      },
      "committer": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Tue Mar 22 16:43:24 2016 -0700"
      },
      "message": "CloseArchive() to free memory when OpenArchive fails.\n\nBug: 26962895\nChange-Id: I42418eee320ddae857b42572690316c53f638e85\n"
    },
    {
      "commit": "e97d8ed70e44db619de9975a43ed2d1509653d74",
      "tree": "82a4aad1542afb9ca7a93882db6f9faaf2213558",
      "parents": [
        "a3be5bfdede8ae6c88bb06d6fa6bf8192ea3268e"
      ],
      "author": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Tue Mar 01 15:55:56 2016 -0800"
      },
      "committer": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Wed Mar 02 11:09:18 2016 -0800"
      },
      "message": "Do not add linker the _r_debug.r_map on link_image\n\nChange-Id: Idd0fb06a5d9f400c0608ae532cc4c575211810fa\n"
    },
    {
      "commit": "d17a377c49201bd5f0e4c71d84f1ce25a86642de",
      "tree": "fb819b9173b3c94398cea3d5287d2cd86563c010",
      "parents": [
        "c199690b5ffda0f4df50d1121f7ab577af1fe468"
      ],
      "author": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Tue Mar 01 13:11:28 2016 -0800"
      },
      "committer": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Tue Mar 01 15:28:43 2016 -0800"
      },
      "message": "linker: print \"not accessible\" error message to the log\n\nPrint properties of the namespace on \"library is not accessible\"\nerror to better diagnose problems with native library accessiblity\n\nBug: http://b/27406143\nChange-Id: Icf3d6c604f09dfa015de863fdb1267d343930d2a\n(cherry picked from commit 350bdad61cc6551db649fcaeb8642f4a1d6b139a)\n"
    },
    {
      "commit": "9f0a6954c602e63f85746237e1a333b4571d757d",
      "tree": "f6f76170bfdf8b9eb52c0fa4475f32e96886849f",
      "parents": [
        "aca201358b910e5a4b925c639902387fbdfd9016"
      ],
      "author": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Thu Feb 18 14:37:44 2016 -0800"
      },
      "committer": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Thu Feb 18 18:28:08 2016 -0800"
      },
      "message": "Improvements to dynamic linker messages\n\nError messages now include executable name,\nalso linker doesn\u0027t abort if called on itself.\n\nChange-Id: Ia17dd540919544b28062ed71751a1d79ee865206\n"
    },
    {
      "commit": "6b788eeff2ea0019849517e796b762ae790ca142",
      "tree": "20323f5d665b7ed5254d4d2ce6460aa414f679fc",
      "parents": [
        "4327ae07b98d24128adbdfd93e9ed15cfce7e2ed"
      ],
      "author": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Wed Feb 17 16:08:03 2016 -0800"
      },
      "committer": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Thu Feb 18 12:32:56 2016 -0800"
      },
      "message": "Move gdb support functions to a separate file\n\nMove gdb support functions and variables to\nlinker_gdb_support.h/cpp\n\nChange-Id: I96c6592a7055715b18f1137367470fe80987263f\n"
    },
    {
      "commit": "0fa5410b0f87217efd9c5ac6cc616a6019bbcac4",
      "tree": "db7ac4e4bb00dfdfe691897b13c91f8683557ab3",
      "parents": [
        "f8d051c81b7c22575ac940dea612fb3b880e6d7a"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Feb 18 09:31:24 2016 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Feb 18 09:31:24 2016 +0000"
      },
      "message": "Revert \"Move gdb support functions to a separate file\"\n\nWas reverted on internal master already.\n\nThis reverts commit f8d051c81b7c22575ac940dea612fb3b880e6d7a.\n\nChange-Id: Ia432f83bcce91366fb23f1bb87603a093b7f074d\n"
    },
    {
      "commit": "f8d051c81b7c22575ac940dea612fb3b880e6d7a",
      "tree": "b35a3f5f98c0dfdf45ca1d105148b4549e61f81d",
      "parents": [
        "f3064e4bc7f4dee351bc2eb9272db3e9792dc683"
      ],
      "author": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Wed Feb 17 16:08:03 2016 -0800"
      },
      "committer": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Wed Feb 17 16:09:35 2016 -0800"
      },
      "message": "Move gdb support functions to a separate file\n\nMove gdb support functions and variables to\nlinker_gdb_support.h/cpp\n\nChange-Id: Id6e608617016383b68283760361c567e58e574bc\n"
    },
    {
      "commit": "f3064e4bc7f4dee351bc2eb9272db3e9792dc683",
      "tree": "db7ac4e4bb00dfdfe691897b13c91f8683557ab3",
      "parents": [
        "c347a107602f3011b393f2b2407425b5d668e14e"
      ],
      "author": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Wed Feb 17 15:25:25 2016 -0800"
      },
      "committer": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Wed Feb 17 15:25:25 2016 -0800"
      },
      "message": "Use insert_link_map_into_debug_map for executable\n\nUse insert_link_map_into_debug_map to insert the main\nexecutable\u0027s link_map to r_debug\n\nChange-Id: I0eacb3f030ea3eb16ed50ad2011d604beece2d03\n"
    },
    {
      "commit": "c347a107602f3011b393f2b2407425b5d668e14e",
      "tree": "95baaf76430069bcbb3f0603cd3ad266f4e95861",
      "parents": [
        "598cb89790ba93edbb392c567ecda32b39d64ff1",
        "6400129628ef24adb57fc4822d4fd54b8967701b"
      ],
      "author": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Wed Feb 17 22:20:22 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Feb 17 22:20:22 2016 +0000"
      },
      "message": "Merge \"Update a comment for init_linker_info_for_gdb\""
    },
    {
      "commit": "6400129628ef24adb57fc4822d4fd54b8967701b",
      "tree": "2d1871a2bd5495ea88c7bac81a0f7e4485f46cfc",
      "parents": [
        "aa9cb26ead0cb875075fb0c5cf78020c14daaff7"
      ],
      "author": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Wed Feb 17 14:13:06 2016 -0800"
      },
      "committer": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Wed Feb 17 14:13:06 2016 -0800"
      },
      "message": "Update a comment for init_linker_info_for_gdb\n\nChange-Id: I8e2895ecfcc6f77a180c3735342afc93be5923d3\n"
    },
    {
      "commit": "8d22dd53feddcc7a84e1cc481f171fd4dfe095a1",
      "tree": "242baef525f6e01c81ed7304822193b3851a570b",
      "parents": [
        "e687d067c6ecea18327fd60cb63a11208d9adc24"
      ],
      "author": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Tue Feb 16 13:43:35 2016 -0800"
      },
      "committer": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Tue Feb 16 14:39:15 2016 -0800"
      },
      "message": "Initialize linker link_map for gdb directly\n\nRemove unnecessary construction of soinfo when\ninitializing linker link_map for gdb.\n\nChange-Id: Idf32cee56309aa9c9cf260efbd17a9deae9a756b\n"
    },
    {
      "commit": "e687d067c6ecea18327fd60cb63a11208d9adc24",
      "tree": "4debe3f53371db977761d040c0b690f08f6dd1c5",
      "parents": [
        "85665af917c74ff88668c1c1bffe5455e9f779cc"
      ],
      "author": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Tue Feb 16 13:25:29 2016 -0800"
      },
      "committer": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Tue Feb 16 13:25:29 2016 -0800"
      },
      "message": "linker: remove soinfo::entry\n\nThis field is used only once and only for main executable;\nno need to carry it around in soinfo structure.\n\nChange-Id: I7f80c64e0939e28966b6fed858891f9ce2a9e26b\n"
    },
    {
      "commit": "88f5111123d9900fc4da05435aa8416a6f9f9bcd",
      "tree": "bc28393b90549bd66b15599584437a5646cde137",
      "parents": [
        "37591462fa76791c2372d789c3532c7cd0ca7a84"
      ],
      "author": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Mon Feb 01 23:00:55 2016 -0800"
      },
      "committer": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Mon Feb 01 23:00:55 2016 -0800"
      },
      "message": "linker: Change the library search order\n\nLook into \"/system/lib\" before \"/vendor/lib\", this way\nwe can ensure that in case of name conflict /system libraries\ntake precedence.\n\nChange-Id: Ifacdc9dc7a4e175853f499ed09782b2257f09e5a\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": "42d949ff9d2956e25f84e537f43a8f93ecb37baf",
      "tree": "66f1215029c3777d59393fbbbaa55ba5aed5872a",
      "parents": [
        "988e71b2b22117b0f7e994cbe764066630494125"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Jan 06 19:51:43 2016 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Jan 06 20:06:08 2016 -0800"
      },
      "message": "Defend against -fstack-protector in libc startup.\n\nExactly which functions get a stack protector is up to the compiler, so\nlet\u0027s separate the code that sets up the environment stack protection\nrequires and explicitly build it with -fno-stack-protector.\n\nBug: http://b/26276517\nChange-Id: I8719e23ead1f1e81715c32c1335da868f68369b5\n"
    },
    {
      "commit": "116b5698d4fc9d037e3fda5b66e0ca5bb50b4ea7",
      "tree": "be39668aad4e9cd5eb20647d800432aeb59cc376",
      "parents": [
        "e13434f9da8fae2e0714960a9f28b7790097560c"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Jan 04 17:45:36 2016 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Jan 05 11:06:50 2016 -0800"
      },
      "message": "Clarify which linker we are.\n\nAlso, we\u0027re not a debugger.\n\nAlso include LD_LIBRARY_PATH and LD_PRELOAD because they would have helped\ndiagnose a recent issue.\n\nChange-Id: I7237a7236b7140ab49483c02efa705317d07bd3f\n"
    },
    {
      "commit": "7331fe18d7ffd550996e07b534bc7a6cf625afa5",
      "tree": "ffad9be2c77f5c3c1ad164aa055a0e4b08f91cb1",
      "parents": [
        "4afd635be1b956c40f36758a482e6d83502fbb42"
      ],
      "author": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Mon Dec 14 14:11:17 2015 -0800"
      },
      "committer": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Sat Dec 19 23:38:27 2015 -0800"
      },
      "message": "linker: implement shared namespaces\n\nShared namespaces clone the list of loaded native\nlibraries from the caller namespace. This allows\nclassloaders for bundled apps to share already loaded\nlibraries with default namespace.\n\nBug: http://b/22548808\nBug: http://b/26165097\nChange-Id: I8949d45937fdb38e1f586ff0679003adac0d9dad\n(cherry picked from commit e78deef364d952dd1141a2f3067a12060aaf11e6)\n"
    },
    {
      "commit": "9cf99cbad89c8495828788ce693a99ced434f66f",
      "tree": "fa089662db2475f6e4e1260f029fcab805eb0a96",
      "parents": [
        "d3e5301a75256171199b23f6ba2c6651d05ce5f1"
      ],
      "author": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Fri Dec 11 14:22:24 2015 -0800"
      },
      "committer": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Wed Dec 16 15:24:13 2015 -0800"
      },
      "message": "linker: add dlvsym(3)\n\nThis changes implements dlvsym - dlsym for versioned symbols.\n\nBug: http://b/22865643\nChange-Id: Ic90a60d512104261a1416c43f9100f0d88e3b46f\n"
    },
    {
      "commit": "0bc397753775e4ccc5aaaa53fae11aa5165fea69",
      "tree": "6d1c717045f01fcbba2afac17f0566410033e66a",
      "parents": [
        "e46ded5ce1582202cb809c907128e423e58ce7ed",
        "4a2c5aa30ceea2aaf8dcaee2feb4879978af4fce"
      ],
      "author": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Fri Dec 11 01:26:17 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Dec 11 01:26:17 2015 +0000"
      },
      "message": "Merge \"Move dlsym and dladdr implementation to linker.cpp\""
    },
    {
      "commit": "4a2c5aa30ceea2aaf8dcaee2feb4879978af4fce",
      "tree": "77265fd642a5bbfd2d0804f9922effca3f8de815",
      "parents": [
        "9d8632e1a76de6bd6abc853c0fbd6a2c9dc32cdc"
      ],
      "author": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Thu Dec 10 16:08:14 2015 -0800"
      },
      "committer": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Thu Dec 10 16:24:57 2015 -0800"
      },
      "message": "Move dlsym and dladdr implementation to linker.cpp\n\nBug: http://b/25716705\nBug: http://b/22865643\nChange-Id: If22fc1eda219f676b5fcc06490f7901d21d1749c\n"
    },
    {
      "commit": "cb025e55f707216eb36b07f6fc36dcf604a45c07",
      "tree": "75f49029f558b2f745119ded1e0a655cabe8f3b3",
      "parents": [
        "9d8632e1a76de6bd6abc853c0fbd6a2c9dc32cdc",
        "40728bccbcba5ff1bf5979bd8d3b4446fb162ead"
      ],
      "author": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Thu Dec 10 20:17:02 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Dec 10 20:17:02 2015 +0000"
      },
      "message": "Merge \"Revert \"Add /odm/lib to shared lib search path\"\""
    },
    {
      "commit": "39801757c3bf688bee28f636959757953b2bb695",
      "tree": "c69444b742866a3c11855084d0dd80e5803fac54",
      "parents": [
        "6500f51c0e3ef37dbda889dbd1125c03c787ae50",
        "284ae3559ed909613b189b98bdc3efab94373a30"
      ],
      "author": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Thu Dec 10 04:34:38 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Dec 10 04:34:38 2015 +0000"
      },
      "message": "Merge \"Add permitted_when_isolated_path to linker namespaces\""
    },
    {
      "commit": "284ae3559ed909613b189b98bdc3efab94373a30",
      "tree": "7f525b5244599a2caa7692d3d179dde4bbb61fe3",
      "parents": [
        "df196131f3c16f1eddb1542c7e04c675e7f1fbda"
      ],
      "author": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Tue Dec 08 10:47:13 2015 -0800"
      },
      "committer": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Wed Dec 09 13:54:01 2015 -0800"
      },
      "message": "Add permitted_when_isolated_path to linker namespaces\n\nThe permitted_when_isolated_path is a way to white-list\ndirectories not present in search-path. It is ignored for\nnot isolated namespaces.\n\nBug: http://b/25853516\nBug: http://b/22548808\nChange-Id: Ib1538037268eea69323ea49968a34a4a1d1938a5\n"
    },
    {
      "commit": "5a3ab3422d8b8f500eda70edf7b0fff83656603a",
      "tree": "dd75bb5f334a1712cbc3ebb8ab7cb0b9ea70044a",
      "parents": [
        "df196131f3c16f1eddb1542c7e04c675e7f1fbda",
        "db43526581c6d2cfdd0fedfd451e1a2e72b4b7a3"
      ],
      "author": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Wed Dec 09 21:50:54 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Dec 09 21:50:54 2015 +0000"
      },
      "message": "Merge \"Revert \"Ensure that readlink has access to /proc/self/fd\"\""
    },
    {
      "commit": "db43526581c6d2cfdd0fedfd451e1a2e72b4b7a3",
      "tree": "465078034a19ad899b9a2d60110f3d66613e1ba6",
      "parents": [
        "4e50d0247b9ace095e371865fad08b1a59672e3a"
      ],
      "author": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Wed Dec 09 19:36:47 2015 +0000"
      },
      "committer": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Wed Dec 09 19:36:47 2015 +0000"
      },
      "message": "Revert \"Ensure that readlink has access to /proc/self/fd\"\n\nThis reverts commit 4e50d0247b9ace095e371865fad08b1a59672e3a.\n\nBug: http://b/24912743\nChange-Id: I5d32c670f0e16aec9c74add143158e919a301673\n"
    },
    {
      "commit": "40728bccbcba5ff1bf5979bd8d3b4446fb162ead",
      "tree": "f09ce774b7eb4fabf10f41a998d91864249175d4",
      "parents": [
        "f74b041cce75091b922151d4fa57e63c8a6caf4b"
      ],
      "author": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Wed Dec 09 19:35:02 2015 +0000"
      },
      "committer": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Wed Dec 09 19:35:02 2015 +0000"
      },
      "message": "Revert \"Add /odm/lib to shared lib search path\"\n\nThis reverts commit f74b041cce75091b922151d4fa57e63c8a6caf4b.\n\nBug: 25654402\nChange-Id: I77386ea3655868d7cd1a8130afbc95e70549389e\n"
    }
  ],
  "next": "e371ae68ac0d6d39cacf5edc893bda2f4a61e883"
}
