)]}'
{
  "log": [
    {
      "commit": "266594305a1a1a140a911685cbb5a1ded45426f7",
      "tree": "0406bf1264fffb62a00f3f87ddf0e319692fb3d0",
      "parents": [
        "816cab342a8db032b660018d4c933032a326b5c8"
      ],
      "author": {
        "name": "Martin Stjernholm",
        "email": "mast@google.com",
        "time": "Fri Apr 16 19:55:03 2021 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon May 10 09:40:21 2021 +0000"
      },
      "message": "Avoid loading external libraries from ARTs internal linker namespace\n(reland).\n\ndlopen() calls in ART will use its own linker namespace\n(com_android_art). That\u0027s appropriate for internal libraries in the\nAPEX, but not when ART loads libraries on behalf of external requests.\nIn those cases we should instead use android_dlopen_ext to load them\nfrom the system namespace, i.e. the one that searches /system/lib(64).\n\nThe linker config has been using allow_all_shared_libs, so any loads\nfrom com_android_art fall back to the system namespace, and hence\ndlopen() usually works regardless which namespace it ought to use.\nHowever we want to drop allow_all_shared_libs, so we need to figure out\nwhich dlopen\u0027s should use which namespace:\n\n1. Several ART libraries are loaded on-demand, e.g. libart-compiler and\n   libart-disassembler. There are also those going through the runtime\n   plugin system, like libperfetto_hprofd and heapprofd_client_api. All\n   these are internal or at least statically known (so we can provide\n   links for them in the linker config), and should continue to use\n   dlopen from the ART namespace.\n\n2. libnativeloader loads the preloadable public libraries from\n   system/etc/public.libraries.txt, and should use the system namespace\n   for that.\n\n3. libnativebridge loads the native bridge implementation specified\n   through the command line (or ultimately the system property\n   ro.dalvik.vm.native.bridge). It\u0027s not part of the ART APEX and not\n   known statically, so the system namespace should be used.\n\n4. libnativeloader also loads JNI libraries from classloader\n   namespaces, but has a fallback if no such namespace can be found\n   based on caller location. Fall back to the system namespace to\n   handle libraries loaded during the preload phase in the zygote.\n\n5. JVMTI agents are loaded by dalvik.system.VMDebug.attachAgent().\n   Treat these too as external libraries - they are loaded in a way\n   similar to JNI libraries through OpenNativeLibrary in\n   libnativeloader, so are covered by #4.\n\n   They are normally loaded by apps with a classloader, but a special\n   case is adbconnection which loads libjdwp.so in the ART APEX without\n   one and hence falls back to the system namespace. We therefore need\n   to create a link for it (https://r.android.com/1690889,\n   https://r.android.com/1690795).\n\nAll cases #2-#5 are covered by libnativeloader and libnativebridge.\nIntroduce OpenSystemLibrary, and since libnativeloader depends on\nlibnativebridge, put it in the latter to be usable from both. It\u0027s only\nan internal dependency not exposed in the APEX stubs.\n\n(Another possibility could be to put it in the generic toolbox lib\nlibartbase, but it\u0027s split into -d and non-d variants, and we don\u0027t\nwant to split libnative{loader,bridge} that way.)\n\nSince libnativeloader_test no longer needs to mock dlopen we can\nsimplify it to a more regular test that loads the tested libs\ndynamically.\n\nThis relands https://r.android.com/1673312 without setting\nANDROID_ADDITIONAL_PUBLIC_LIBRARIES in run-test-jar, because that made\nlibnativeloader try to preload internal libraries from the system\nnamespace.\n\nTest: mmm art\nTest: atest art/libnativeloader\nTest: atest CtsJniTestCases\nTest: Cuttlefish app compat test that uses NDK translation\nTest: Manual tests with Android Studio TI agents\n  (http://g/art-module-team/7Jy3Tg7LCh0)\nTest: art/test/testrunner/testrunner.py --target --64 --optimizing\n  in chroot on cuttlefish\nBug: 130340935\nChange-Id: I7fb32faacc1c214402b58125d8190e97bbbcfad2\n"
    },
    {
      "commit": "91d2c5c1d1157f27e723d8ebee458913c6f0ed43",
      "tree": "61089b69928171706cf93d939bb068d115e92c5d",
      "parents": [
        "6958df93f8cb3d82bddadbabb5ed94b3b63a7f14"
      ],
      "author": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Fri May 07 22:44:29 2021 +0000"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Sun May 09 00:37:05 2021 +0000"
      },
      "message": "Revert \"Avoid loading external libraries from ARTs internal linker namespace.\"\n\nThis reverts commit 582448f29f2f2529202bf868d00ba5d3d3776bb6.\n\nReason for revert: breaks tests\n\nChange-Id: I2e0b2a28d4644b314887673d4aef4f1094aea289\n"
    },
    {
      "commit": "582448f29f2f2529202bf868d00ba5d3d3776bb6",
      "tree": "6e923a08f5d03f1bb6434e27f7ff9076ca4c5302",
      "parents": [
        "39d4df62d4e2606073d05cc363370db825ad7b9f"
      ],
      "author": {
        "name": "Martin Stjernholm",
        "email": "mast@google.com",
        "time": "Fri Apr 16 19:55:03 2021 +0100"
      },
      "committer": {
        "name": "Martin Stjernholm",
        "email": "mast@google.com",
        "time": "Fri May 07 14:53:28 2021 +0000"
      },
      "message": "Avoid loading external libraries from ARTs internal linker namespace.\n\ndlopen() calls in ART will use its own linker namespace\n(com_android_art). That\u0027s appropriate for internal libraries in the\nAPEX, but not when ART loads libraries on behalf of external requests.\nIn those cases we should instead use android_dlopen_ext to load them\nfrom the system namespace, i.e. the one that searches /system/lib(64).\n\nThe linker config has been using allow_all_shared_libs, so any loads\nfrom com_android_art fall back to the system namespace, and hence\ndlopen() usually works regardless which namespace it ought to use.\nHowever we want to drop allow_all_shared_libs, so we need to figure out\nwhich dlopen\u0027s should use which namespace:\n\n1. Several ART libraries are loaded on-demand, e.g. libart-compiler and\n   libart-disassembler. There are also those going through the runtime\n   plugin system, like libperfetto_hprofd and heapprofd_client_api. All\n   these are internal or at least statically known (so we can provide\n   links for them in the linker config), and should continue to use\n   dlopen from the ART namespace.\n\n2. libnativeloader loads the preloadable public libraries from\n   system/etc/public.libraries.txt, and should use the system namespace\n   for that.\n\n3. libnativebridge loads the native bridge implementation specified\n   through the command line (or ultimately the system property\n   ro.dalvik.vm.native.bridge). It\u0027s not part of the ART APEX and not\n   known statically, so the system namespace should be used.\n\n4. libnativeloader also loads JNI libraries from classloader\n   namespaces, but has a fallback if no such namespace can be found\n   based on caller location. Fall back to the system namespace to\n   handle libraries loaded during the preload phase in the zygote.\n\n5. JVMTI agents are loaded by dalvik.system.VMDebug.attachAgent().\n   Treat these too as external libraries - they are loaded in a way\n   similar to JNI libraries through OpenNativeLibrary in\n   libnativeloader, so are covered by #4.\n\n   They are normally loaded by apps with a classloader, but a special\n   case is adbconnection which loads libjdwp.so in the ART APEX without\n   one and hence falls back to the system namespace. We therefore need\n   to create a link for it (https://r.android.com/1690889,\n   https://r.android.com/1690795).\n\nAll cases #2-#5 are covered by libnativeloader and libnativebridge.\nIntroduce OpenSystemLibrary, and since libnativeloader depends on\nlibnativebridge, put it in the latter to be usable from both. It\u0027s only\nan internal dependency not exposed in the APEX stubs.\n\n(Another possibility could be to put it in the generic toolbox lib\nlibartbase, but it\u0027s split into -d and non-d variants, and we don\u0027t\nwant to split libnative{loader,bridge} that way.)\n\nSince libnativeloader_test no longer needs to mock dlopen we can\nsimplify it to a more regular test that loads the tested libs\ndynamically.\n\nTest: mmm art\nTest: atest art/libnativeloader\nTest: atest CtsJniTestCases\nTest: Cuttlefish app compat test that uses NDK translation\nTest: Manual tests with Android Studio TI agents\n  (http://g/art-module-team/7Jy3Tg7LCh0)\nBug: 130340935\nChange-Id: I2513472c4e1c44f0fcb01a6b4f6eccbb03718f1d\n"
    },
    {
      "commit": "0d0f8df5070dc6c6e5a5809d8a57e0212a1a5164",
      "tree": "fe0fc4815a3af6dfd5cd3e17a672362647c78af0",
      "parents": [
        "2207b7e7db463dfa96d071654c49268e22e8745f"
      ],
      "author": {
        "name": "Martin Stjernholm",
        "email": "mast@google.com",
        "time": "Wed Apr 28 16:47:01 2021 +0100"
      },
      "committer": {
        "name": "Martin Stjernholm",
        "email": "mast@google.com",
        "time": "Wed May 05 12:07:48 2021 +0000"
      },
      "message": "In run tests, do not rely on loading native libs in the ART namespace\nwith an allow_all_shared_libs fallback to system.\n\nThe system and com_android_art namespaces need to be properly\nseparated, but run tests have relied on loading test libraries through\neither LD_LIBRARY_PATH or java.library.path without a clear separation.\nThat has worked through a combination of\nANDROID_ADDITIONAL_PUBLIC_LIBRARIES and fallback dlopen() calls that\nused the ART namespace.\n\nThis change introduces a new directory\n/data/nativetest(64)/com.android.art for test libraries that depend on\ninternal ART libraries. It\u0027s added with LD_LIBRARY_PATH to the default\nnamespace, which in the APEX linker config has full access to\ncom_android_art.\n\nNormal JNI libraries that don\u0027t depend on ART internals stay in\n/data/nativetest(64)/art/\u003carch\u003e. There should be no overlap between the\ntwo locations.\n\nA new environment variable NATIVELOADER_DEFAULT_NAMESPACE_LIBS is\nintroduced to list the libraries added through LD_LIBRARY_PATH, so\nlibnativeloader can link to them from classloader namespaces and in the\nfallback namespace when no classloader is specified.\n\nLike ANDROID_ADDITIONAL_PUBLIC_LIBRARIES,\nNATIVELOADER_DEFAULT_NAMESPACE_LIBS is only effective when\nro.debuggable is true.\n\nA new cc_defaults \"art_test_internal_library_defaults\" is added to\nAndroid.bp, to be used in libraries that should be installed in the new\ncom.android.art directory.\n\nSome run tests that are special and need more treatment are disabled\nfor now, to be addressed in b/186654484.\n\nTest: art/test/testrunner/testrunner.py --target --64 --optimizing\nTest: art/test/testrunner/testrunner.py --target --32 --jit\nTest: art/test/testrunner/testrunner.py --host --64 --optimizing\nBug: 130340935\nChange-Id: Iec640d5e22b46af2c1a4d375ce3f06c57b1d224e\n"
    },
    {
      "commit": "14626a7c40471090745b7069310a6c6265671fc9",
      "tree": "c3b0b32abe59ecd16b65168034a6675fb02a7a78",
      "parents": [
        "a0130e8d2842a9a82e4fd4e811ee699272eb2e0b"
      ],
      "author": {
        "name": "Jiyong Park",
        "email": "jiyong@google.com",
        "time": "Thu Jul 02 23:17:58 2020 +0900"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Fri Jul 24 10:28:24 2020 +0000"
      },
      "message": "libnativeloader understands uses-native-library tag\n\nPreviously, libnativeloader provided all the partner-provided public\nshared libraries to apps unconditionally. Starting from Android S, apps\ntargeting S (or higher) get only the libs that are explicited listed\nas dependencies using the \u003cuses-native-library\u003e tag in the app manifest.\nThe libs not listed there are not available to the app even if they are\nregistered as public libraries.\n\nThe changed behavior affects new (S+) apps. Existing apps are not\naffected; they still get all the libraries.\n\nThe implementation is rather straightforward. The library accepts a new\nparameter soname_list from the framework, which is actually from the\n\u003cuses-native-library\u003e tags of the app manifest. The list is used to\nfilter the partner-provided libraries when the target sdk is \u003e 30.\n\nBug: 142191088\nTest: atest CtsUsesNativeLibraryTest\nMerged-In: I52e23dda58fc69f51451c5dbeffd0a77125c9bff\n(cherry picked from commit e741dfd18dcd15f002bc1db9bd6634322e4eeef8)\nChange-Id: I52e23dda58fc69f51451c5dbeffd0a77125c9bff\n"
    },
    {
      "commit": "7ca8b67c21513d3cd236f47332afdd1be1cb1569",
      "tree": "4e226c25734451053b85d24e5176abcc299e3986",
      "parents": [
        "5c25e537f59c2f87a57097ad3eb2f70d8c54de23"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri Apr 24 15:43:48 2020 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Apr 27 09:34:03 2020 +0000"
      },
      "message": "Use ART_TARGET_ANDROID instead of __ANDROID__\n\nOn golem, we build for ART_TARGET_LINUX, which doesn\u0027t have support for\nlinkerconfig. Therefore, guard all linker namespace code on\nART_TARGET_ANDROID instead of __ANDROID__ (which is unfortunately not\nunder ART\u0027s control).\n\nTest: build for golem and run\nBug: 154074847\nChange-Id: I7a2b81918177704b42d8aafbd6d7e9d06d34e5f4\n"
    },
    {
      "commit": "538f99ab285c1440969b9b3331fc0ce750c0d316",
      "tree": "018e9cbfc08ba39b3f35e457a8658fcc4cc8db75",
      "parents": [
        "6fc471e510d6a4e9c31fcab6c0542e2efdf50099"
      ],
      "author": {
        "name": "Jooyung Han",
        "email": "jooyung@google.com",
        "time": "Tue Mar 03 00:46:50 2020 +0900"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Wed Mar 04 05:56:39 2020 +0000"
      },
      "message": "Loading JNI libraries in an APEX\n\nTo load JNI libraries in an APEX, libnativeloader relies on\njni.config.txt file which contains available JNI libraries for\nAPEX namespaces:\n\n  com_android_foo libfoo_jni.so:...\n  com_android_bar libbar_jni.so:...\n\nThis file is generated by linkerconfig.\n\nBug: 143733063\nTest: cuttlestone boots\n      (For now, no behavioral changes because jni.config.txt is empty)\nChange-Id: I066de90a73875118be53972e50d076061922d762\n"
    },
    {
      "commit": "272b36d1b5cbab951239b32ed679a9dbc4ffdf1a",
      "tree": "07e82dbd51885c2ff453da524fa2a46e48adf3ef",
      "parents": [
        "2ad7c98dda05b0c8a049895cd68b3d2850156912"
      ],
      "author": {
        "name": "Kiyoung Kim",
        "email": "kiyoungkim@google.com",
        "time": "Wed Feb 19 16:08:47 2020 +0900"
      },
      "committer": {
        "name": "Kiyoung Kim",
        "email": "kiyoungkim@google.com",
        "time": "Fri Feb 21 01:04:32 2020 +0000"
      },
      "message": "Rename APEX Namespace\n\nCurrent APEX Namespace is named with APEX name itself, which also uses\n.(dot) so linker configuration can keep the syntax safe.\n\nFor example, if there are APEX modules named \u0027A\u0027 and \u0027A.link.A\u0027, then\n\u0027namespace.A.link.A.link.A \u003d a.so\u0027 phrase can be ambiguous from the\nlinker. To allow any additional linker syntax in the future, we should\navoid dot separator from the namespace name.\n\nBug: 148826508\nTest: m -j passed\nTest: boot succeeded from cuttlefish and walleye\nChange-Id: I11b6da1b59b4ebf3016f1d783636c7e5d0f8309a\n"
    },
    {
      "commit": "98cf82f227fa8fab694674e72a9a2ca95face4b5",
      "tree": "104b438ec54707e44648ad2e26a65a9774a0a50f",
      "parents": [
        "089c1357c6e5457a7bd5e76f70cead52517d9b0b"
      ],
      "author": {
        "name": "Jooyung Han",
        "email": "jooyung@google.com",
        "time": "Sat Feb 08 03:53:54 2020 +0900"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Tue Feb 11 19:00:38 2020 +0000"
      },
      "message": "Use apex name for apex linker namespace\n\nLinkerconfig now uses apex_names to automatically generate linker\nnamespaces from apexes.\n\nBug: 148826508\nTest: build / boot\nChange-Id: Id7fa68531033124727e618284af4fd2a61bdd85f\n"
    },
    {
      "commit": "4bd58951456ac6082e23a1931293965852c24281",
      "tree": "dd263ff127686a283290ca8dd572a9d5f54879ee",
      "parents": [
        "22be0659402081b59d84d01ec3e7f8aec42d18ad"
      ],
      "author": {
        "name": "Bernie Innocenti",
        "email": "codewiz@google.com",
        "time": "Thu Feb 06 15:43:57 2020 +0900"
      },
      "committer": {
        "name": "Bernie Innocenti",
        "email": "codewiz@google.com",
        "time": "Fri Feb 07 11:41:44 2020 +0000"
      },
      "message": "Convert art/ to Result::ok()\n\nNo functionality changes, this is a mechanical cleanup.\n\nTest: m\nChange-Id: I10030314ad8a06d49a63f1e2f3c5aa5b484e34b6\n"
    },
    {
      "commit": "6dc0a434b8dd53b467838062ea110ee338c5f0a1",
      "tree": "8b1a132e162f5c9ac574a89f18e30a0d52c58243",
      "parents": [
        "c20ab9a81aa99d91c8b60a86a9611697ad1e2d76"
      ],
      "author": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Thu Feb 06 14:28:28 2020 +0000"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Thu Feb 06 16:20:29 2020 +0000"
      },
      "message": "Update libnativeloader dependency on libnativehelper\n\nOnly requires header library dependency.\n\nTest: m\nChange-Id: I84de37651f4cb01bdaaa2b354f0a71058a5772f8\n"
    },
    {
      "commit": "9b16e344b246096d228dd4b41ff711884bcfcb3e",
      "tree": "ff93f416fcc59fb831202e80b5fb8c8ede99d500",
      "parents": [
        "e828ea0553b3106598071239e8215fca63b15c9b"
      ],
      "author": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Wed Oct 09 13:29:16 2019 +0100"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Fri Oct 11 09:57:02 2019 +0000"
      },
      "message": "Move libnative{bridge,loader} to art/\n\nThis change moves system/core/libnative{bridge,loader} under art/.\n\nBug: 137364733\nTest: m\nChange-Id: I9be7333d00fcd3f36cd80520e50a30ea840187ad\n"
    }
  ]
}
