vndk: add vendor/lib or product/lib to search_path

"vndk" namespace have vendor/lib/vndk first in search paths so that VNDK
extension libraries have higher proiorty than normal VNDK libs.
However, VNDK extensions are allowed to use vendor libraries
(/vendor/lib). This was enabled by linking "sphal" namespace.

It was a bit weird because sphal namespace links vndk and vndk links
sphal again.

Moreover, "vndk_product" namespace can't link to /product/lib. We could
have "product" namespace and link it from vndk_product.

But instead, we add /vendor/lib to the search paths of "vndk" namespace
and /product/lib to "vndk_product" namespace so that VNDK extensions use
libs from there.

Now we don't need to link sphal from vndk.

Bug: 162462078
Test: HelloActivityProduct loads libjni_product successfully.
Merged-In: I6c5d47239dae427194345e03522a726997389167
Change-Id: I6c5d47239dae427194345e03522a726997389167
(cherry picked from commit 87122ca998fdc6f6d404fbe0539221eb9d242ca2)
diff --git a/contents/namespace/vndk.cc b/contents/namespace/vndk.cc
index 8c11678..12981ea 100644
--- a/contents/namespace/vndk.cc
+++ b/contents/namespace/vndk.cc
@@ -53,20 +53,28 @@
   std::vector<std::string> vndk_paths;
   std::string vndk_version;
   if (vndk_user == VndkUserPartition::Product) {
-    lib_paths = {"/product/${LIB}/"};
+    lib_paths = {Var("PRODUCT") + "/${LIB}"};
     vndk_version = Var("PRODUCT_VNDK_VERSION");
   } else {
     // default for vendor
-    lib_paths = {"/odm/${LIB}/", "/vendor/${LIB}/"};
+    lib_paths = {"/odm/${LIB}", "/vendor/${LIB}"};
     vndk_version = Var("VENDOR_VNDK_VERSION");
   }
 
+  // Search order:
+  // 1. VNDK Extensions
+  // 2. VNDK APEX
+  // 3. vendor/lib or product/lib to allow extensions to use them
+
+  // 1. VNDK Extensions
   for (const auto& lib_path : lib_paths) {
-    ns.AddSearchPath(lib_path + "vndk-sp");
+    ns.AddSearchPath(lib_path + "/vndk-sp");
     if (!is_system_or_unrestricted_section) {
-      ns.AddSearchPath(lib_path + "vndk");
+      ns.AddSearchPath(lib_path + "/vndk");
     }
   }
+
+  // 2. VNDK APEX
   ns.AddSearchPath("/apex/com.android.vndk.v" + vndk_version + "/${LIB}");
 
   if (is_system_or_unrestricted_section &&
@@ -84,6 +92,11 @@
                         Var("VENDOR_VNDK_VERSION") + "/${LIB}/hw");
   }
 
+  // 3. vendor/lib or product/lib
+  for (const auto& lib_path : lib_paths) {
+    ns.AddSearchPath(lib_path);
+  }
+
   // For the non-system section, the links should be identical to that of the
   // 'vndk_in_system' namespace, except the links to 'default' and 'vndk_in_system'.
   if (vndk_user == VndkUserPartition::Product) {
@@ -94,17 +107,7 @@
         .AddSharedLib({Var("LLNDK_LIBRARIES_VENDOR")});
   }
 
-  if (is_system_or_unrestricted_section) {
-    if (vndk_user == VndkUserPartition::Vendor) {
-      // The "vndk" namespace links to the system namespace for LLNDK libs above
-      // and links to "sphal" namespace for vendor libs. The ordering matters;
-      // the system namespace has higher priority than the "sphal" namespace.
-      ns.GetLink("sphal").AllowAllSharedLibs();
-    }
-  } else {
-    // [vendor] or [product] section
-    ns.GetLink("default").AllowAllSharedLibs();
-
+  if (ctx.IsProductSection() || ctx.IsVendorSection()) {
     if (android::linkerconfig::modules::IsVndkInSystemNamespace()) {
       ns.GetLink("vndk_in_system")
           .AddSharedLib(Var("VNDK_USING_CORE_VARIANT_LIBRARIES"));
diff --git a/testdata/golden_output/product-enabled/com.android.media.swcodec/ld.config.txt b/testdata/golden_output/product-enabled/com.android.media.swcodec/ld.config.txt
index 41b4378..b59b46e 100644
--- a/testdata/golden_output/product-enabled/com.android.media.swcodec/ld.config.txt
+++ b/testdata/golden_output/product-enabled/com.android.media.swcodec/ld.config.txt
@@ -182,6 +182,8 @@
 namespace.vndk.search.paths = /odm/${LIB}/vndk-sp
 namespace.vndk.search.paths += /vendor/${LIB}/vndk-sp
 namespace.vndk.search.paths += /apex/com.android.vndk.vR/${LIB}
+namespace.vndk.search.paths += /odm/${LIB}
+namespace.vndk.search.paths += /vendor/${LIB}
 namespace.vndk.permitted.paths = /odm/${LIB}/hw
 namespace.vndk.permitted.paths += /odm/${LIB}/egl
 namespace.vndk.permitted.paths += /vendor/${LIB}/hw
@@ -194,6 +196,10 @@
 namespace.vndk.asan.search.paths += /data/asan/vendor/${LIB}/vndk-sp
 namespace.vndk.asan.search.paths += /vendor/${LIB}/vndk-sp
 namespace.vndk.asan.search.paths += /apex/com.android.vndk.vR/${LIB}
+namespace.vndk.asan.search.paths += /data/asan/odm/${LIB}
+namespace.vndk.asan.search.paths += /odm/${LIB}
+namespace.vndk.asan.search.paths += /data/asan/vendor/${LIB}
+namespace.vndk.asan.search.paths += /vendor/${LIB}
 namespace.vndk.asan.permitted.paths = /data/asan/odm/${LIB}/hw
 namespace.vndk.asan.permitted.paths += /odm/${LIB}/hw
 namespace.vndk.asan.permitted.paths += /data/asan/odm/${LIB}/egl
@@ -207,12 +213,11 @@
 namespace.vndk.asan.permitted.paths += /data/asan/system/vendor/${LIB}/egl
 namespace.vndk.asan.permitted.paths += /system/vendor/${LIB}/egl
 namespace.vndk.asan.permitted.paths += /apex/com.android.vndk.vR/${LIB}/hw
-namespace.vndk.links = system,sphal,com_android_neuralnetworks
+namespace.vndk.links = system,com_android_neuralnetworks
 namespace.vndk.link.system.shared_libs = libEGL.so:libGLESv1_CM.so:libGLESv2.so:libGLESv3.so:libRS.so:libandroid_net.so:libbinder_ndk.so:libc.so:libcgrouprc.so:libclang_rt.asan-i686-android.so:libdl.so:liblog.so:libm.so:libmediandk.so:libnativewindow.so:libneuralnetworks.so:libsync.so:libvndksupport.so:libvulkan.so
 namespace.vndk.link.system.shared_libs += libc.so
 namespace.vndk.link.system.shared_libs += libdl.so
 namespace.vndk.link.system.shared_libs += libdl_android.so
 namespace.vndk.link.system.shared_libs += libm.so
 namespace.vndk.link.system.shared_libs += libclang_rt.asan-arm-android.so:libclang_rt.asan-i686-android.so:libclang_rt.hwasan-arm-android.so:libclang_rt.hwasan-i686-android.so:libclang_rt.tsan-arm-android.so:libclang_rt.tsan-i686-android.so:libclang_rt.ubsan_standalone-arm-android.so:libclang_rt.ubsan_standalone-i686-android.so
-namespace.vndk.link.sphal.allow_all_shared_libs = true
 namespace.vndk.link.com_android_neuralnetworks.shared_libs = libneuralnetworks.so
diff --git a/testdata/golden_output/product-enabled/com.vendor.service1/ld.config.txt b/testdata/golden_output/product-enabled/com.vendor.service1/ld.config.txt
index f909a5b..a19cedc 100644
--- a/testdata/golden_output/product-enabled/com.vendor.service1/ld.config.txt
+++ b/testdata/golden_output/product-enabled/com.vendor.service1/ld.config.txt
@@ -152,6 +152,8 @@
 namespace.vndk.search.paths = /odm/${LIB}/vndk-sp
 namespace.vndk.search.paths += /vendor/${LIB}/vndk-sp
 namespace.vndk.search.paths += /apex/com.android.vndk.vR/${LIB}
+namespace.vndk.search.paths += /odm/${LIB}
+namespace.vndk.search.paths += /vendor/${LIB}
 namespace.vndk.permitted.paths = /odm/${LIB}/hw
 namespace.vndk.permitted.paths += /odm/${LIB}/egl
 namespace.vndk.permitted.paths += /vendor/${LIB}/hw
@@ -164,6 +166,10 @@
 namespace.vndk.asan.search.paths += /data/asan/vendor/${LIB}/vndk-sp
 namespace.vndk.asan.search.paths += /vendor/${LIB}/vndk-sp
 namespace.vndk.asan.search.paths += /apex/com.android.vndk.vR/${LIB}
+namespace.vndk.asan.search.paths += /data/asan/odm/${LIB}
+namespace.vndk.asan.search.paths += /odm/${LIB}
+namespace.vndk.asan.search.paths += /data/asan/vendor/${LIB}
+namespace.vndk.asan.search.paths += /vendor/${LIB}
 namespace.vndk.asan.permitted.paths = /data/asan/odm/${LIB}/hw
 namespace.vndk.asan.permitted.paths += /odm/${LIB}/hw
 namespace.vndk.asan.permitted.paths += /data/asan/odm/${LIB}/egl
@@ -177,12 +183,11 @@
 namespace.vndk.asan.permitted.paths += /data/asan/system/vendor/${LIB}/egl
 namespace.vndk.asan.permitted.paths += /system/vendor/${LIB}/egl
 namespace.vndk.asan.permitted.paths += /apex/com.android.vndk.vR/${LIB}/hw
-namespace.vndk.links = system,sphal,com_android_neuralnetworks
+namespace.vndk.links = system,com_android_neuralnetworks
 namespace.vndk.link.system.shared_libs = libEGL.so:libGLESv1_CM.so:libGLESv2.so:libGLESv3.so:libRS.so:libandroid_net.so:libbinder_ndk.so:libc.so:libcgrouprc.so:libclang_rt.asan-i686-android.so:libdl.so:liblog.so:libm.so:libmediandk.so:libnativewindow.so:libneuralnetworks.so:libsync.so:libvndksupport.so:libvulkan.so
 namespace.vndk.link.system.shared_libs += libc.so
 namespace.vndk.link.system.shared_libs += libdl.so
 namespace.vndk.link.system.shared_libs += libdl_android.so
 namespace.vndk.link.system.shared_libs += libm.so
 namespace.vndk.link.system.shared_libs += libclang_rt.asan-arm-android.so:libclang_rt.asan-i686-android.so:libclang_rt.hwasan-arm-android.so:libclang_rt.hwasan-i686-android.so:libclang_rt.tsan-arm-android.so:libclang_rt.tsan-i686-android.so:libclang_rt.ubsan_standalone-arm-android.so:libclang_rt.ubsan_standalone-i686-android.so
-namespace.vndk.link.sphal.allow_all_shared_libs = true
 namespace.vndk.link.com_android_neuralnetworks.shared_libs = libneuralnetworks.so
diff --git a/testdata/golden_output/product-enabled/ld.config.txt b/testdata/golden_output/product-enabled/ld.config.txt
index ae4ec07..9b89096 100644
--- a/testdata/golden_output/product-enabled/ld.config.txt
+++ b/testdata/golden_output/product-enabled/ld.config.txt
@@ -393,6 +393,8 @@
 namespace.vndk.search.paths = /odm/${LIB}/vndk-sp
 namespace.vndk.search.paths += /vendor/${LIB}/vndk-sp
 namespace.vndk.search.paths += /apex/com.android.vndk.vR/${LIB}
+namespace.vndk.search.paths += /odm/${LIB}
+namespace.vndk.search.paths += /vendor/${LIB}
 namespace.vndk.permitted.paths = /odm/${LIB}/hw
 namespace.vndk.permitted.paths += /odm/${LIB}/egl
 namespace.vndk.permitted.paths += /vendor/${LIB}/hw
@@ -405,6 +407,10 @@
 namespace.vndk.asan.search.paths += /data/asan/vendor/${LIB}/vndk-sp
 namespace.vndk.asan.search.paths += /vendor/${LIB}/vndk-sp
 namespace.vndk.asan.search.paths += /apex/com.android.vndk.vR/${LIB}
+namespace.vndk.asan.search.paths += /data/asan/odm/${LIB}
+namespace.vndk.asan.search.paths += /odm/${LIB}
+namespace.vndk.asan.search.paths += /data/asan/vendor/${LIB}
+namespace.vndk.asan.search.paths += /vendor/${LIB}
 namespace.vndk.asan.permitted.paths = /data/asan/odm/${LIB}/hw
 namespace.vndk.asan.permitted.paths += /odm/${LIB}/hw
 namespace.vndk.asan.permitted.paths += /data/asan/odm/${LIB}/egl
@@ -418,22 +424,24 @@
 namespace.vndk.asan.permitted.paths += /data/asan/system/vendor/${LIB}/egl
 namespace.vndk.asan.permitted.paths += /system/vendor/${LIB}/egl
 namespace.vndk.asan.permitted.paths += /apex/com.android.vndk.vR/${LIB}/hw
-namespace.vndk.links = default,sphal,com_android_neuralnetworks
+namespace.vndk.links = default,com_android_neuralnetworks
 namespace.vndk.link.default.shared_libs = libEGL.so:libGLESv1_CM.so:libGLESv2.so:libGLESv3.so:libRS.so:libandroid_net.so:libbinder_ndk.so:libc.so:libcgrouprc.so:libclang_rt.asan-i686-android.so:libdl.so:liblog.so:libm.so:libmediandk.so:libnativewindow.so:libneuralnetworks.so:libsync.so:libvndksupport.so:libvulkan.so
 namespace.vndk.link.default.shared_libs += libc.so
 namespace.vndk.link.default.shared_libs += libdl.so
 namespace.vndk.link.default.shared_libs += libdl_android.so
 namespace.vndk.link.default.shared_libs += libm.so
 namespace.vndk.link.default.shared_libs += libclang_rt.asan-arm-android.so:libclang_rt.asan-i686-android.so:libclang_rt.hwasan-arm-android.so:libclang_rt.hwasan-i686-android.so:libclang_rt.tsan-arm-android.so:libclang_rt.tsan-i686-android.so:libclang_rt.ubsan_standalone-arm-android.so:libclang_rt.ubsan_standalone-i686-android.so
-namespace.vndk.link.sphal.allow_all_shared_libs = true
 namespace.vndk.link.com_android_neuralnetworks.shared_libs = libneuralnetworks.so
 namespace.vndk_product.isolated = true
 namespace.vndk_product.visible = true
 namespace.vndk_product.search.paths = /product/${LIB}/vndk-sp
 namespace.vndk_product.search.paths += /apex/com.android.vndk.vR/${LIB}
+namespace.vndk_product.search.paths += /product/${LIB}
 namespace.vndk_product.asan.search.paths = /data/asan/product/${LIB}/vndk-sp
 namespace.vndk_product.asan.search.paths += /product/${LIB}/vndk-sp
 namespace.vndk_product.asan.search.paths += /apex/com.android.vndk.vR/${LIB}
+namespace.vndk_product.asan.search.paths += /data/asan/product/${LIB}
+namespace.vndk_product.asan.search.paths += /product/${LIB}
 namespace.vndk_product.links = default,com_android_neuralnetworks
 namespace.vndk_product.link.default.shared_libs = libEGL.so:libGLESv1_CM.so:libGLESv2.so:libGLESv3.so:libRS.so:libandroid_net.so:libbinder_ndk.so:libc.so:libcgrouprc.so:libclang_rt.asan-i686-android.so:libdl.so:liblog.so:libm.so:libmediandk.so:libnativewindow.so:libneuralnetworks.so:libsync.so:libvndksupport.so:libvulkan.so
 namespace.vndk_product.link.default.shared_libs += libc.so
@@ -587,6 +595,8 @@
 namespace.vndk.search.paths += /vendor/${LIB}/vndk-sp
 namespace.vndk.search.paths += /vendor/${LIB}/vndk
 namespace.vndk.search.paths += /apex/com.android.vndk.vR/${LIB}
+namespace.vndk.search.paths += /odm/${LIB}
+namespace.vndk.search.paths += /vendor/${LIB}
 namespace.vndk.asan.search.paths = /data/asan/odm/${LIB}/vndk-sp
 namespace.vndk.asan.search.paths += /odm/${LIB}/vndk-sp
 namespace.vndk.asan.search.paths += /data/asan/odm/${LIB}/vndk
@@ -596,14 +606,17 @@
 namespace.vndk.asan.search.paths += /data/asan/vendor/${LIB}/vndk
 namespace.vndk.asan.search.paths += /vendor/${LIB}/vndk
 namespace.vndk.asan.search.paths += /apex/com.android.vndk.vR/${LIB}
-namespace.vndk.links = system,default,com_android_neuralnetworks
+namespace.vndk.asan.search.paths += /data/asan/odm/${LIB}
+namespace.vndk.asan.search.paths += /odm/${LIB}
+namespace.vndk.asan.search.paths += /data/asan/vendor/${LIB}
+namespace.vndk.asan.search.paths += /vendor/${LIB}
+namespace.vndk.links = system,com_android_neuralnetworks
 namespace.vndk.link.system.shared_libs = libEGL.so:libGLESv1_CM.so:libGLESv2.so:libGLESv3.so:libRS.so:libandroid_net.so:libbinder_ndk.so:libc.so:libcgrouprc.so:libclang_rt.asan-i686-android.so:libdl.so:liblog.so:libm.so:libmediandk.so:libnativewindow.so:libneuralnetworks.so:libsync.so:libvndksupport.so:libvulkan.so
 namespace.vndk.link.system.shared_libs += libc.so
 namespace.vndk.link.system.shared_libs += libdl.so
 namespace.vndk.link.system.shared_libs += libdl_android.so
 namespace.vndk.link.system.shared_libs += libm.so
 namespace.vndk.link.system.shared_libs += libclang_rt.asan-arm-android.so:libclang_rt.asan-i686-android.so:libclang_rt.hwasan-arm-android.so:libclang_rt.hwasan-i686-android.so:libclang_rt.tsan-arm-android.so:libclang_rt.tsan-i686-android.so:libclang_rt.ubsan_standalone-arm-android.so:libclang_rt.ubsan_standalone-i686-android.so
-namespace.vndk.link.default.allow_all_shared_libs = true
 namespace.vndk.link.com_android_neuralnetworks.shared_libs = libneuralnetworks.so
 [product]
 additional.namespaces = com_android_adbd,com_android_art,com_android_i18n,com_android_neuralnetworks,com_android_runtime,system,vndk
@@ -740,19 +753,21 @@
 namespace.vndk.search.paths = /product/${LIB}/vndk-sp
 namespace.vndk.search.paths += /product/${LIB}/vndk
 namespace.vndk.search.paths += /apex/com.android.vndk.vR/${LIB}
+namespace.vndk.search.paths += /product/${LIB}
 namespace.vndk.asan.search.paths = /data/asan/product/${LIB}/vndk-sp
 namespace.vndk.asan.search.paths += /product/${LIB}/vndk-sp
 namespace.vndk.asan.search.paths += /data/asan/product/${LIB}/vndk
 namespace.vndk.asan.search.paths += /product/${LIB}/vndk
 namespace.vndk.asan.search.paths += /apex/com.android.vndk.vR/${LIB}
-namespace.vndk.links = system,default,com_android_neuralnetworks
+namespace.vndk.asan.search.paths += /data/asan/product/${LIB}
+namespace.vndk.asan.search.paths += /product/${LIB}
+namespace.vndk.links = system,com_android_neuralnetworks
 namespace.vndk.link.system.shared_libs = libEGL.so:libGLESv1_CM.so:libGLESv2.so:libGLESv3.so:libRS.so:libandroid_net.so:libbinder_ndk.so:libc.so:libcgrouprc.so:libclang_rt.asan-i686-android.so:libdl.so:liblog.so:libm.so:libmediandk.so:libnativewindow.so:libneuralnetworks.so:libsync.so:libvndksupport.so:libvulkan.so
 namespace.vndk.link.system.shared_libs += libc.so
 namespace.vndk.link.system.shared_libs += libdl.so
 namespace.vndk.link.system.shared_libs += libdl_android.so
 namespace.vndk.link.system.shared_libs += libm.so
 namespace.vndk.link.system.shared_libs += libclang_rt.asan-arm-android.so:libclang_rt.asan-i686-android.so:libclang_rt.hwasan-arm-android.so:libclang_rt.hwasan-i686-android.so:libclang_rt.tsan-arm-android.so:libclang_rt.tsan-i686-android.so:libclang_rt.ubsan_standalone-arm-android.so:libclang_rt.ubsan_standalone-i686-android.so
-namespace.vndk.link.default.allow_all_shared_libs = true
 namespace.vndk.link.com_android_neuralnetworks.shared_libs = libneuralnetworks.so
 [unrestricted]
 additional.namespaces = com_android_adbd,com_android_art,com_android_conscrypt,com_android_cronet,com_android_i18n,com_android_media,com_android_neuralnetworks,com_android_os_statsd,com_android_resolv,com_android_runtime,rs,sphal,vndk
@@ -1058,6 +1073,8 @@
 namespace.vndk.search.paths = /odm/${LIB}/vndk-sp
 namespace.vndk.search.paths += /vendor/${LIB}/vndk-sp
 namespace.vndk.search.paths += /apex/com.android.vndk.vR/${LIB}
+namespace.vndk.search.paths += /odm/${LIB}
+namespace.vndk.search.paths += /vendor/${LIB}
 namespace.vndk.permitted.paths = /odm/${LIB}/hw
 namespace.vndk.permitted.paths += /odm/${LIB}/egl
 namespace.vndk.permitted.paths += /vendor/${LIB}/hw
@@ -1070,6 +1087,10 @@
 namespace.vndk.asan.search.paths += /data/asan/vendor/${LIB}/vndk-sp
 namespace.vndk.asan.search.paths += /vendor/${LIB}/vndk-sp
 namespace.vndk.asan.search.paths += /apex/com.android.vndk.vR/${LIB}
+namespace.vndk.asan.search.paths += /data/asan/odm/${LIB}
+namespace.vndk.asan.search.paths += /odm/${LIB}
+namespace.vndk.asan.search.paths += /data/asan/vendor/${LIB}
+namespace.vndk.asan.search.paths += /vendor/${LIB}
 namespace.vndk.asan.permitted.paths = /data/asan/odm/${LIB}/hw
 namespace.vndk.asan.permitted.paths += /odm/${LIB}/hw
 namespace.vndk.asan.permitted.paths += /data/asan/odm/${LIB}/egl
@@ -1083,14 +1104,13 @@
 namespace.vndk.asan.permitted.paths += /data/asan/system/vendor/${LIB}/egl
 namespace.vndk.asan.permitted.paths += /system/vendor/${LIB}/egl
 namespace.vndk.asan.permitted.paths += /apex/com.android.vndk.vR/${LIB}/hw
-namespace.vndk.links = default,sphal,com_android_neuralnetworks
+namespace.vndk.links = default,com_android_neuralnetworks
 namespace.vndk.link.default.shared_libs = libEGL.so:libGLESv1_CM.so:libGLESv2.so:libGLESv3.so:libRS.so:libandroid_net.so:libbinder_ndk.so:libc.so:libcgrouprc.so:libclang_rt.asan-i686-android.so:libdl.so:liblog.so:libm.so:libmediandk.so:libnativewindow.so:libneuralnetworks.so:libsync.so:libvndksupport.so:libvulkan.so
 namespace.vndk.link.default.shared_libs += libc.so
 namespace.vndk.link.default.shared_libs += libdl.so
 namespace.vndk.link.default.shared_libs += libdl_android.so
 namespace.vndk.link.default.shared_libs += libm.so
 namespace.vndk.link.default.shared_libs += libclang_rt.asan-arm-android.so:libclang_rt.asan-i686-android.so:libclang_rt.hwasan-arm-android.so:libclang_rt.hwasan-i686-android.so:libclang_rt.tsan-arm-android.so:libclang_rt.tsan-i686-android.so:libclang_rt.ubsan_standalone-arm-android.so:libclang_rt.ubsan_standalone-i686-android.so
-namespace.vndk.link.sphal.allow_all_shared_libs = true
 namespace.vndk.link.com_android_neuralnetworks.shared_libs = libneuralnetworks.so
 [postinstall]
 namespace.default.isolated = false
diff --git a/testdata/golden_output/stage1/ld.config.txt b/testdata/golden_output/stage1/ld.config.txt
index 5a3d7a9..d2ee8d3 100644
--- a/testdata/golden_output/stage1/ld.config.txt
+++ b/testdata/golden_output/stage1/ld.config.txt
@@ -246,6 +246,8 @@
 namespace.vndk.search.paths = /odm/${LIB}/vndk-sp
 namespace.vndk.search.paths += /vendor/${LIB}/vndk-sp
 namespace.vndk.search.paths += /apex/com.android.vndk.vR/${LIB}
+namespace.vndk.search.paths += /odm/${LIB}
+namespace.vndk.search.paths += /vendor/${LIB}
 namespace.vndk.permitted.paths = /odm/${LIB}/hw
 namespace.vndk.permitted.paths += /odm/${LIB}/egl
 namespace.vndk.permitted.paths += /vendor/${LIB}/hw
@@ -258,6 +260,10 @@
 namespace.vndk.asan.search.paths += /data/asan/vendor/${LIB}/vndk-sp
 namespace.vndk.asan.search.paths += /vendor/${LIB}/vndk-sp
 namespace.vndk.asan.search.paths += /apex/com.android.vndk.vR/${LIB}
+namespace.vndk.asan.search.paths += /data/asan/odm/${LIB}
+namespace.vndk.asan.search.paths += /odm/${LIB}
+namespace.vndk.asan.search.paths += /data/asan/vendor/${LIB}
+namespace.vndk.asan.search.paths += /vendor/${LIB}
 namespace.vndk.asan.permitted.paths = /data/asan/odm/${LIB}/hw
 namespace.vndk.asan.permitted.paths += /odm/${LIB}/hw
 namespace.vndk.asan.permitted.paths += /data/asan/odm/${LIB}/egl
@@ -271,14 +277,13 @@
 namespace.vndk.asan.permitted.paths += /data/asan/system/vendor/${LIB}/egl
 namespace.vndk.asan.permitted.paths += /system/vendor/${LIB}/egl
 namespace.vndk.asan.permitted.paths += /apex/com.android.vndk.vR/${LIB}/hw
-namespace.vndk.links = default,sphal
+namespace.vndk.links = default
 namespace.vndk.link.default.shared_libs = libEGL.so:libGLESv1_CM.so:libGLESv2.so:libGLESv3.so:libRS.so:libandroid_net.so:libbinder_ndk.so:libc.so:libcgrouprc.so:libclang_rt.asan-i686-android.so:libdl.so:liblog.so:libm.so:libmediandk.so:libnativewindow.so:libneuralnetworks.so:libsync.so:libvndksupport.so:libvulkan.so
 namespace.vndk.link.default.shared_libs += libc.so
 namespace.vndk.link.default.shared_libs += libdl.so
 namespace.vndk.link.default.shared_libs += libdl_android.so
 namespace.vndk.link.default.shared_libs += libm.so
 namespace.vndk.link.default.shared_libs += libclang_rt.asan-arm-android.so:libclang_rt.asan-i686-android.so:libclang_rt.hwasan-arm-android.so:libclang_rt.hwasan-i686-android.so:libclang_rt.tsan-arm-android.so:libclang_rt.tsan-i686-android.so:libclang_rt.ubsan_standalone-arm-android.so:libclang_rt.ubsan_standalone-i686-android.so
-namespace.vndk.link.sphal.allow_all_shared_libs = true
 [vendor]
 additional.namespaces = com_android_art,com_android_i18n,com_android_runtime,system,vndk
 namespace.default.isolated = true
@@ -382,6 +387,8 @@
 namespace.vndk.search.paths += /vendor/${LIB}/vndk-sp
 namespace.vndk.search.paths += /vendor/${LIB}/vndk
 namespace.vndk.search.paths += /apex/com.android.vndk.vR/${LIB}
+namespace.vndk.search.paths += /odm/${LIB}
+namespace.vndk.search.paths += /vendor/${LIB}
 namespace.vndk.asan.search.paths = /data/asan/odm/${LIB}/vndk-sp
 namespace.vndk.asan.search.paths += /odm/${LIB}/vndk-sp
 namespace.vndk.asan.search.paths += /data/asan/odm/${LIB}/vndk
@@ -391,14 +398,17 @@
 namespace.vndk.asan.search.paths += /data/asan/vendor/${LIB}/vndk
 namespace.vndk.asan.search.paths += /vendor/${LIB}/vndk
 namespace.vndk.asan.search.paths += /apex/com.android.vndk.vR/${LIB}
-namespace.vndk.links = system,default
+namespace.vndk.asan.search.paths += /data/asan/odm/${LIB}
+namespace.vndk.asan.search.paths += /odm/${LIB}
+namespace.vndk.asan.search.paths += /data/asan/vendor/${LIB}
+namespace.vndk.asan.search.paths += /vendor/${LIB}
+namespace.vndk.links = system
 namespace.vndk.link.system.shared_libs = libEGL.so:libGLESv1_CM.so:libGLESv2.so:libGLESv3.so:libRS.so:libandroid_net.so:libbinder_ndk.so:libc.so:libcgrouprc.so:libclang_rt.asan-i686-android.so:libdl.so:liblog.so:libm.so:libmediandk.so:libnativewindow.so:libneuralnetworks.so:libsync.so:libvndksupport.so:libvulkan.so
 namespace.vndk.link.system.shared_libs += libc.so
 namespace.vndk.link.system.shared_libs += libdl.so
 namespace.vndk.link.system.shared_libs += libdl_android.so
 namespace.vndk.link.system.shared_libs += libm.so
 namespace.vndk.link.system.shared_libs += libclang_rt.asan-arm-android.so:libclang_rt.asan-i686-android.so:libclang_rt.hwasan-arm-android.so:libclang_rt.hwasan-i686-android.so:libclang_rt.tsan-arm-android.so:libclang_rt.tsan-i686-android.so:libclang_rt.ubsan_standalone-arm-android.so:libclang_rt.ubsan_standalone-i686-android.so
-namespace.vndk.link.default.allow_all_shared_libs = true
 [unrestricted]
 additional.namespaces = com_android_art,com_android_i18n,com_android_runtime,rs,sphal,vndk
 namespace.default.isolated = false
@@ -550,6 +560,8 @@
 namespace.vndk.search.paths = /odm/${LIB}/vndk-sp
 namespace.vndk.search.paths += /vendor/${LIB}/vndk-sp
 namespace.vndk.search.paths += /apex/com.android.vndk.vR/${LIB}
+namespace.vndk.search.paths += /odm/${LIB}
+namespace.vndk.search.paths += /vendor/${LIB}
 namespace.vndk.permitted.paths = /odm/${LIB}/hw
 namespace.vndk.permitted.paths += /odm/${LIB}/egl
 namespace.vndk.permitted.paths += /vendor/${LIB}/hw
@@ -562,6 +574,10 @@
 namespace.vndk.asan.search.paths += /data/asan/vendor/${LIB}/vndk-sp
 namespace.vndk.asan.search.paths += /vendor/${LIB}/vndk-sp
 namespace.vndk.asan.search.paths += /apex/com.android.vndk.vR/${LIB}
+namespace.vndk.asan.search.paths += /data/asan/odm/${LIB}
+namespace.vndk.asan.search.paths += /odm/${LIB}
+namespace.vndk.asan.search.paths += /data/asan/vendor/${LIB}
+namespace.vndk.asan.search.paths += /vendor/${LIB}
 namespace.vndk.asan.permitted.paths = /data/asan/odm/${LIB}/hw
 namespace.vndk.asan.permitted.paths += /odm/${LIB}/hw
 namespace.vndk.asan.permitted.paths += /data/asan/odm/${LIB}/egl
@@ -575,14 +591,13 @@
 namespace.vndk.asan.permitted.paths += /data/asan/system/vendor/${LIB}/egl
 namespace.vndk.asan.permitted.paths += /system/vendor/${LIB}/egl
 namespace.vndk.asan.permitted.paths += /apex/com.android.vndk.vR/${LIB}/hw
-namespace.vndk.links = default,sphal
+namespace.vndk.links = default
 namespace.vndk.link.default.shared_libs = libEGL.so:libGLESv1_CM.so:libGLESv2.so:libGLESv3.so:libRS.so:libandroid_net.so:libbinder_ndk.so:libc.so:libcgrouprc.so:libclang_rt.asan-i686-android.so:libdl.so:liblog.so:libm.so:libmediandk.so:libnativewindow.so:libneuralnetworks.so:libsync.so:libvndksupport.so:libvulkan.so
 namespace.vndk.link.default.shared_libs += libc.so
 namespace.vndk.link.default.shared_libs += libdl.so
 namespace.vndk.link.default.shared_libs += libdl_android.so
 namespace.vndk.link.default.shared_libs += libm.so
 namespace.vndk.link.default.shared_libs += libclang_rt.asan-arm-android.so:libclang_rt.asan-i686-android.so:libclang_rt.hwasan-arm-android.so:libclang_rt.hwasan-i686-android.so:libclang_rt.tsan-arm-android.so:libclang_rt.tsan-i686-android.so:libclang_rt.ubsan_standalone-arm-android.so:libclang_rt.ubsan_standalone-i686-android.so
-namespace.vndk.link.sphal.allow_all_shared_libs = true
 [postinstall]
 namespace.default.isolated = false
 namespace.default.search.paths = /system/${LIB}
diff --git a/testdata/golden_output/stage2/com.android.media.swcodec/ld.config.txt b/testdata/golden_output/stage2/com.android.media.swcodec/ld.config.txt
index 463a289..a719bca 100644
--- a/testdata/golden_output/stage2/com.android.media.swcodec/ld.config.txt
+++ b/testdata/golden_output/stage2/com.android.media.swcodec/ld.config.txt
@@ -185,6 +185,8 @@
 namespace.vndk.search.paths = /odm/${LIB}/vndk-sp
 namespace.vndk.search.paths += /vendor/${LIB}/vndk-sp
 namespace.vndk.search.paths += /apex/com.android.vndk.vR/${LIB}
+namespace.vndk.search.paths += /odm/${LIB}
+namespace.vndk.search.paths += /vendor/${LIB}
 namespace.vndk.permitted.paths = /odm/${LIB}/hw
 namespace.vndk.permitted.paths += /odm/${LIB}/egl
 namespace.vndk.permitted.paths += /vendor/${LIB}/hw
@@ -197,6 +199,10 @@
 namespace.vndk.asan.search.paths += /data/asan/vendor/${LIB}/vndk-sp
 namespace.vndk.asan.search.paths += /vendor/${LIB}/vndk-sp
 namespace.vndk.asan.search.paths += /apex/com.android.vndk.vR/${LIB}
+namespace.vndk.asan.search.paths += /data/asan/odm/${LIB}
+namespace.vndk.asan.search.paths += /odm/${LIB}
+namespace.vndk.asan.search.paths += /data/asan/vendor/${LIB}
+namespace.vndk.asan.search.paths += /vendor/${LIB}
 namespace.vndk.asan.permitted.paths = /data/asan/odm/${LIB}/hw
 namespace.vndk.asan.permitted.paths += /odm/${LIB}/hw
 namespace.vndk.asan.permitted.paths += /data/asan/odm/${LIB}/egl
@@ -210,12 +216,11 @@
 namespace.vndk.asan.permitted.paths += /data/asan/system/vendor/${LIB}/egl
 namespace.vndk.asan.permitted.paths += /system/vendor/${LIB}/egl
 namespace.vndk.asan.permitted.paths += /apex/com.android.vndk.vR/${LIB}/hw
-namespace.vndk.links = system,sphal,com_android_neuralnetworks
+namespace.vndk.links = system,com_android_neuralnetworks
 namespace.vndk.link.system.shared_libs = libEGL.so:libGLESv1_CM.so:libGLESv2.so:libGLESv3.so:libRS.so:libandroid_net.so:libbinder_ndk.so:libc.so:libcgrouprc.so:libclang_rt.asan-i686-android.so:libdl.so:liblog.so:libm.so:libmediandk.so:libnativewindow.so:libneuralnetworks.so:libsync.so:libvndksupport.so:libvulkan.so
 namespace.vndk.link.system.shared_libs += libc.so
 namespace.vndk.link.system.shared_libs += libdl.so
 namespace.vndk.link.system.shared_libs += libdl_android.so
 namespace.vndk.link.system.shared_libs += libm.so
 namespace.vndk.link.system.shared_libs += libclang_rt.asan-arm-android.so:libclang_rt.asan-i686-android.so:libclang_rt.hwasan-arm-android.so:libclang_rt.hwasan-i686-android.so:libclang_rt.tsan-arm-android.so:libclang_rt.tsan-i686-android.so:libclang_rt.ubsan_standalone-arm-android.so:libclang_rt.ubsan_standalone-i686-android.so
-namespace.vndk.link.sphal.allow_all_shared_libs = true
 namespace.vndk.link.com_android_neuralnetworks.shared_libs = libneuralnetworks.so
diff --git a/testdata/golden_output/stage2/com.vendor.service1/ld.config.txt b/testdata/golden_output/stage2/com.vendor.service1/ld.config.txt
index 241edc5..c74d2b5 100644
--- a/testdata/golden_output/stage2/com.vendor.service1/ld.config.txt
+++ b/testdata/golden_output/stage2/com.vendor.service1/ld.config.txt
@@ -155,6 +155,8 @@
 namespace.vndk.search.paths = /odm/${LIB}/vndk-sp
 namespace.vndk.search.paths += /vendor/${LIB}/vndk-sp
 namespace.vndk.search.paths += /apex/com.android.vndk.vR/${LIB}
+namespace.vndk.search.paths += /odm/${LIB}
+namespace.vndk.search.paths += /vendor/${LIB}
 namespace.vndk.permitted.paths = /odm/${LIB}/hw
 namespace.vndk.permitted.paths += /odm/${LIB}/egl
 namespace.vndk.permitted.paths += /vendor/${LIB}/hw
@@ -167,6 +169,10 @@
 namespace.vndk.asan.search.paths += /data/asan/vendor/${LIB}/vndk-sp
 namespace.vndk.asan.search.paths += /vendor/${LIB}/vndk-sp
 namespace.vndk.asan.search.paths += /apex/com.android.vndk.vR/${LIB}
+namespace.vndk.asan.search.paths += /data/asan/odm/${LIB}
+namespace.vndk.asan.search.paths += /odm/${LIB}
+namespace.vndk.asan.search.paths += /data/asan/vendor/${LIB}
+namespace.vndk.asan.search.paths += /vendor/${LIB}
 namespace.vndk.asan.permitted.paths = /data/asan/odm/${LIB}/hw
 namespace.vndk.asan.permitted.paths += /odm/${LIB}/hw
 namespace.vndk.asan.permitted.paths += /data/asan/odm/${LIB}/egl
@@ -180,12 +186,11 @@
 namespace.vndk.asan.permitted.paths += /data/asan/system/vendor/${LIB}/egl
 namespace.vndk.asan.permitted.paths += /system/vendor/${LIB}/egl
 namespace.vndk.asan.permitted.paths += /apex/com.android.vndk.vR/${LIB}/hw
-namespace.vndk.links = system,sphal,com_android_neuralnetworks
+namespace.vndk.links = system,com_android_neuralnetworks
 namespace.vndk.link.system.shared_libs = libEGL.so:libGLESv1_CM.so:libGLESv2.so:libGLESv3.so:libRS.so:libandroid_net.so:libbinder_ndk.so:libc.so:libcgrouprc.so:libclang_rt.asan-i686-android.so:libdl.so:liblog.so:libm.so:libmediandk.so:libnativewindow.so:libneuralnetworks.so:libsync.so:libvndksupport.so:libvulkan.so
 namespace.vndk.link.system.shared_libs += libc.so
 namespace.vndk.link.system.shared_libs += libdl.so
 namespace.vndk.link.system.shared_libs += libdl_android.so
 namespace.vndk.link.system.shared_libs += libm.so
 namespace.vndk.link.system.shared_libs += libclang_rt.asan-arm-android.so:libclang_rt.asan-i686-android.so:libclang_rt.hwasan-arm-android.so:libclang_rt.hwasan-i686-android.so:libclang_rt.tsan-arm-android.so:libclang_rt.tsan-i686-android.so:libclang_rt.ubsan_standalone-arm-android.so:libclang_rt.ubsan_standalone-i686-android.so
-namespace.vndk.link.sphal.allow_all_shared_libs = true
 namespace.vndk.link.com_android_neuralnetworks.shared_libs = libneuralnetworks.so
diff --git a/testdata/golden_output/stage2/ld.config.txt b/testdata/golden_output/stage2/ld.config.txt
index be2d831..0b3c8b1 100644
--- a/testdata/golden_output/stage2/ld.config.txt
+++ b/testdata/golden_output/stage2/ld.config.txt
@@ -399,6 +399,8 @@
 namespace.vndk.search.paths = /odm/${LIB}/vndk-sp
 namespace.vndk.search.paths += /vendor/${LIB}/vndk-sp
 namespace.vndk.search.paths += /apex/com.android.vndk.vR/${LIB}
+namespace.vndk.search.paths += /odm/${LIB}
+namespace.vndk.search.paths += /vendor/${LIB}
 namespace.vndk.permitted.paths = /odm/${LIB}/hw
 namespace.vndk.permitted.paths += /odm/${LIB}/egl
 namespace.vndk.permitted.paths += /vendor/${LIB}/hw
@@ -411,6 +413,10 @@
 namespace.vndk.asan.search.paths += /data/asan/vendor/${LIB}/vndk-sp
 namespace.vndk.asan.search.paths += /vendor/${LIB}/vndk-sp
 namespace.vndk.asan.search.paths += /apex/com.android.vndk.vR/${LIB}
+namespace.vndk.asan.search.paths += /data/asan/odm/${LIB}
+namespace.vndk.asan.search.paths += /odm/${LIB}
+namespace.vndk.asan.search.paths += /data/asan/vendor/${LIB}
+namespace.vndk.asan.search.paths += /vendor/${LIB}
 namespace.vndk.asan.permitted.paths = /data/asan/odm/${LIB}/hw
 namespace.vndk.asan.permitted.paths += /odm/${LIB}/hw
 namespace.vndk.asan.permitted.paths += /data/asan/odm/${LIB}/egl
@@ -424,14 +430,13 @@
 namespace.vndk.asan.permitted.paths += /data/asan/system/vendor/${LIB}/egl
 namespace.vndk.asan.permitted.paths += /system/vendor/${LIB}/egl
 namespace.vndk.asan.permitted.paths += /apex/com.android.vndk.vR/${LIB}/hw
-namespace.vndk.links = default,sphal,com_android_neuralnetworks
+namespace.vndk.links = default,com_android_neuralnetworks
 namespace.vndk.link.default.shared_libs = libEGL.so:libGLESv1_CM.so:libGLESv2.so:libGLESv3.so:libRS.so:libandroid_net.so:libbinder_ndk.so:libc.so:libcgrouprc.so:libclang_rt.asan-i686-android.so:libdl.so:liblog.so:libm.so:libmediandk.so:libnativewindow.so:libneuralnetworks.so:libsync.so:libvndksupport.so:libvulkan.so
 namespace.vndk.link.default.shared_libs += libc.so
 namespace.vndk.link.default.shared_libs += libdl.so
 namespace.vndk.link.default.shared_libs += libdl_android.so
 namespace.vndk.link.default.shared_libs += libm.so
 namespace.vndk.link.default.shared_libs += libclang_rt.asan-arm-android.so:libclang_rt.asan-i686-android.so:libclang_rt.hwasan-arm-android.so:libclang_rt.hwasan-i686-android.so:libclang_rt.tsan-arm-android.so:libclang_rt.tsan-i686-android.so:libclang_rt.ubsan_standalone-arm-android.so:libclang_rt.ubsan_standalone-i686-android.so
-namespace.vndk.link.sphal.allow_all_shared_libs = true
 namespace.vndk.link.com_android_neuralnetworks.shared_libs = libneuralnetworks.so
 [vendor]
 additional.namespaces = com_android_adbd,com_android_art,com_android_i18n,com_android_neuralnetworks,com_android_runtime,system,vndk
@@ -581,6 +586,8 @@
 namespace.vndk.search.paths += /vendor/${LIB}/vndk-sp
 namespace.vndk.search.paths += /vendor/${LIB}/vndk
 namespace.vndk.search.paths += /apex/com.android.vndk.vR/${LIB}
+namespace.vndk.search.paths += /odm/${LIB}
+namespace.vndk.search.paths += /vendor/${LIB}
 namespace.vndk.asan.search.paths = /data/asan/odm/${LIB}/vndk-sp
 namespace.vndk.asan.search.paths += /odm/${LIB}/vndk-sp
 namespace.vndk.asan.search.paths += /data/asan/odm/${LIB}/vndk
@@ -590,14 +597,17 @@
 namespace.vndk.asan.search.paths += /data/asan/vendor/${LIB}/vndk
 namespace.vndk.asan.search.paths += /vendor/${LIB}/vndk
 namespace.vndk.asan.search.paths += /apex/com.android.vndk.vR/${LIB}
-namespace.vndk.links = system,default,com_android_neuralnetworks
+namespace.vndk.asan.search.paths += /data/asan/odm/${LIB}
+namespace.vndk.asan.search.paths += /odm/${LIB}
+namespace.vndk.asan.search.paths += /data/asan/vendor/${LIB}
+namespace.vndk.asan.search.paths += /vendor/${LIB}
+namespace.vndk.links = system,com_android_neuralnetworks
 namespace.vndk.link.system.shared_libs = libEGL.so:libGLESv1_CM.so:libGLESv2.so:libGLESv3.so:libRS.so:libandroid_net.so:libbinder_ndk.so:libc.so:libcgrouprc.so:libclang_rt.asan-i686-android.so:libdl.so:liblog.so:libm.so:libmediandk.so:libnativewindow.so:libneuralnetworks.so:libsync.so:libvndksupport.so:libvulkan.so
 namespace.vndk.link.system.shared_libs += libc.so
 namespace.vndk.link.system.shared_libs += libdl.so
 namespace.vndk.link.system.shared_libs += libdl_android.so
 namespace.vndk.link.system.shared_libs += libm.so
 namespace.vndk.link.system.shared_libs += libclang_rt.asan-arm-android.so:libclang_rt.asan-i686-android.so:libclang_rt.hwasan-arm-android.so:libclang_rt.hwasan-i686-android.so:libclang_rt.tsan-arm-android.so:libclang_rt.tsan-i686-android.so:libclang_rt.ubsan_standalone-arm-android.so:libclang_rt.ubsan_standalone-i686-android.so
-namespace.vndk.link.default.allow_all_shared_libs = true
 namespace.vndk.link.com_android_neuralnetworks.shared_libs = libneuralnetworks.so
 [unrestricted]
 additional.namespaces = com_android_adbd,com_android_art,com_android_conscrypt,com_android_cronet,com_android_i18n,com_android_media,com_android_neuralnetworks,com_android_os_statsd,com_android_resolv,com_android_runtime,rs,sphal,vndk
@@ -903,6 +913,8 @@
 namespace.vndk.search.paths = /odm/${LIB}/vndk-sp
 namespace.vndk.search.paths += /vendor/${LIB}/vndk-sp
 namespace.vndk.search.paths += /apex/com.android.vndk.vR/${LIB}
+namespace.vndk.search.paths += /odm/${LIB}
+namespace.vndk.search.paths += /vendor/${LIB}
 namespace.vndk.permitted.paths = /odm/${LIB}/hw
 namespace.vndk.permitted.paths += /odm/${LIB}/egl
 namespace.vndk.permitted.paths += /vendor/${LIB}/hw
@@ -915,6 +927,10 @@
 namespace.vndk.asan.search.paths += /data/asan/vendor/${LIB}/vndk-sp
 namespace.vndk.asan.search.paths += /vendor/${LIB}/vndk-sp
 namespace.vndk.asan.search.paths += /apex/com.android.vndk.vR/${LIB}
+namespace.vndk.asan.search.paths += /data/asan/odm/${LIB}
+namespace.vndk.asan.search.paths += /odm/${LIB}
+namespace.vndk.asan.search.paths += /data/asan/vendor/${LIB}
+namespace.vndk.asan.search.paths += /vendor/${LIB}
 namespace.vndk.asan.permitted.paths = /data/asan/odm/${LIB}/hw
 namespace.vndk.asan.permitted.paths += /odm/${LIB}/hw
 namespace.vndk.asan.permitted.paths += /data/asan/odm/${LIB}/egl
@@ -928,14 +944,13 @@
 namespace.vndk.asan.permitted.paths += /data/asan/system/vendor/${LIB}/egl
 namespace.vndk.asan.permitted.paths += /system/vendor/${LIB}/egl
 namespace.vndk.asan.permitted.paths += /apex/com.android.vndk.vR/${LIB}/hw
-namespace.vndk.links = default,sphal,com_android_neuralnetworks
+namespace.vndk.links = default,com_android_neuralnetworks
 namespace.vndk.link.default.shared_libs = libEGL.so:libGLESv1_CM.so:libGLESv2.so:libGLESv3.so:libRS.so:libandroid_net.so:libbinder_ndk.so:libc.so:libcgrouprc.so:libclang_rt.asan-i686-android.so:libdl.so:liblog.so:libm.so:libmediandk.so:libnativewindow.so:libneuralnetworks.so:libsync.so:libvndksupport.so:libvulkan.so
 namespace.vndk.link.default.shared_libs += libc.so
 namespace.vndk.link.default.shared_libs += libdl.so
 namespace.vndk.link.default.shared_libs += libdl_android.so
 namespace.vndk.link.default.shared_libs += libm.so
 namespace.vndk.link.default.shared_libs += libclang_rt.asan-arm-android.so:libclang_rt.asan-i686-android.so:libclang_rt.hwasan-arm-android.so:libclang_rt.hwasan-i686-android.so:libclang_rt.tsan-arm-android.so:libclang_rt.tsan-i686-android.so:libclang_rt.ubsan_standalone-arm-android.so:libclang_rt.ubsan_standalone-i686-android.so
-namespace.vndk.link.sphal.allow_all_shared_libs = true
 namespace.vndk.link.com_android_neuralnetworks.shared_libs = libneuralnetworks.so
 [postinstall]
 namespace.default.isolated = false
diff --git a/testmodules/Android.bp b/testmodules/Android.bp
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/testmodules/Android.bp
diff --git a/testmodules/vndkext/Android.bp b/testmodules/vndkext/Android.bp
new file mode 100644
index 0000000..da6f628
--- /dev/null
+++ b/testmodules/vndkext/Android.bp
@@ -0,0 +1,78 @@
+/*
+ * Copyright (C) 2020 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+cc_library_shared {
+  name: "libutils_vendor",
+  whole_static_libs: ["libutils"],
+  vendor: true,
+  vndk: {
+    enabled: true,
+    support_system_process: true,
+    extends: "libutils",
+  },
+  shared_libs: [
+    "libcutils",
+    "libprocessgroup",
+    "libvndksupport",
+    "liblog",
+    // vendor-only lib
+    "libvendor",
+  ],
+}
+
+cc_library_shared {
+  name: "libutils_product",
+  whole_static_libs: ["libutils"],
+  product_specific: true,
+  vndk: {
+    enabled: true,
+    support_system_process: true,
+    extends: "libutils",
+  },
+  shared_libs: [
+    "libcutils",
+    "libprocessgroup",
+    "libvndksupport",
+    "liblog",
+    // product-only libs
+    "libproduct",
+  ],
+}
+
+cc_library_shared {
+  name: "libvendor",
+  vendor: true,
+}
+
+cc_library_shared {
+  name: "libproduct",
+  product_specific: true,
+}
+
+cc_binary {
+  name: "binvendor",
+  vendor: true,
+  srcs: ["hello.cpp"],
+  shared_libs: ["libutils_vendor"],
+}
+
+cc_binary {
+  name: "binproduct",
+  product_specific: true,
+  srcs: ["hello.cpp"],
+  shared_libs: ["libutils_product"],
+}
diff --git a/testmodules/vndkext/HelloActivityProduct/Android.bp b/testmodules/vndkext/HelloActivityProduct/Android.bp
new file mode 100644
index 0000000..8d9b012
--- /dev/null
+++ b/testmodules/vndkext/HelloActivityProduct/Android.bp
@@ -0,0 +1,16 @@
+
+android_app {
+    name: "HelloActivityProduct",
+    srcs: ["src/**/*.java"],
+    product_specific: true,
+    sdk_version: "current",
+
+    jni_libs: ["libjni_product"],
+    jni_uses_platform_apis: true,
+}
+
+cc_library {
+    name: "libjni_product",
+    product_specific: true,
+    shared_libs: ["libutils_product"],
+}
\ No newline at end of file
diff --git a/testmodules/vndkext/HelloActivityProduct/AndroidManifest.xml b/testmodules/vndkext/HelloActivityProduct/AndroidManifest.xml
new file mode 100644
index 0000000..a58cb58
--- /dev/null
+++ b/testmodules/vndkext/HelloActivityProduct/AndroidManifest.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2007 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<!-- Declare the contents of this Android application.  The namespace
+     attribute brings in the Android platform namespace, and the package
+     supplies a unique name for the application.  When writing your
+     own application, the package name must be changed from "com.example.*"
+     to come from a domain that you own or have control over. -->
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+    package="com.example.android.helloactivity">
+    <application android:label="Hello, Activity!">
+        <activity android:name=".HelloActivity"
+                  android:exported="true">
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN"/>
+                <category android:name="android.intent.category.LAUNCHER"/>
+            </intent-filter>
+        </activity>
+    </application>
+</manifest>
diff --git a/testmodules/vndkext/HelloActivityProduct/res/layout/hello_activity.xml b/testmodules/vndkext/HelloActivityProduct/res/layout/hello_activity.xml
new file mode 100644
index 0000000..bab9c9c
--- /dev/null
+++ b/testmodules/vndkext/HelloActivityProduct/res/layout/hello_activity.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2007 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+  
+          http://www.apache.org/licenses/LICENSE-2.0
+  
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<EditText xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/text"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:textSize="18sp"
+    android:autoText="true"
+    android:capitalize="sentences"
+    android:text="@string/hello_activity_text_text" />
+
diff --git a/testmodules/vndkext/HelloActivityProduct/res/values/strings.xml b/testmodules/vndkext/HelloActivityProduct/res/values/strings.xml
new file mode 100644
index 0000000..7eab42c
--- /dev/null
+++ b/testmodules/vndkext/HelloActivityProduct/res/values/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2007 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+  
+          http://www.apache.org/licenses/LICENSE-2.0
+  
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<resources>
+
+    <string name="hello_activity_text_text">Hello, World!</string>
+
+</resources>
diff --git a/testmodules/vndkext/HelloActivityProduct/src/com/example/android/helloactivity/HelloActivity.java b/testmodules/vndkext/HelloActivityProduct/src/com/example/android/helloactivity/HelloActivity.java
new file mode 100644
index 0000000..0fdf3a3
--- /dev/null
+++ b/testmodules/vndkext/HelloActivityProduct/src/com/example/android/helloactivity/HelloActivity.java
@@ -0,0 +1,45 @@
+/*
+ * Copyright (C) 2020 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.example.android.helloactivity;
+
+import android.app.Activity;
+import android.os.Bundle;
+import android.view.View;
+import android.view.WindowManager;
+
+
+/**
+ * A minimal "Hello, World!" application.
+ */
+public class HelloActivity extends Activity {
+    /**
+     * Called with the activity is first created.
+     */
+    @Override
+    public void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+
+        // Set the layout for this activity.  You can find it
+        // in res/layout/hello_activity.xml
+        View view = getLayoutInflater().inflate(R.layout.hello_activity, null);
+        setContentView(view);
+    }
+
+    static {
+        System.loadLibrary("jni_product");
+    }
+}
diff --git a/testmodules/vndkext/hello.cpp b/testmodules/vndkext/hello.cpp
new file mode 100644
index 0000000..071da07
--- /dev/null
+++ b/testmodules/vndkext/hello.cpp
@@ -0,0 +1,6 @@
+#include <iostream>
+
+int main() {
+  std::cout << "hello\n";
+  return 0;
+}
\ No newline at end of file