OSDN Git Service

linker: add more directories to default lib paths
authorJiyong Park <jiyong@google.com>
Tue, 31 Jan 2017 08:32:46 +0000 (17:32 +0900)
committerJiyong Park <jiyong@google.com>
Sun, 12 Mar 2017 23:55:23 +0000 (08:55 +0900)
Due to b/33681361, libraries are now installed to different paths than
before. In order for linker to load libraries from the new paths, the
default lib paths are updated.

However, this patch is temporary; different paths must be used depending
on whether the process is executing vendor executable or framework
executable. For example, vendor executable should not be able to access
/system/lib/, which is for framework-internal libs. Similarly,
framework executables should not be able to access /vendor/lib.

We have several solutions (linker namespace and DT_RUNPATH) to support
the scenario, but haven't concluded which is better. Furthermore, if we
restrict the search path right now, it will break many parts of Android
that are not yet prepared for the restriction. So, until then, we
temporarily use the single search path for both framework/vendor
executables.

Test: build & run
Change-Id: I806e9b4379bce96653b1dd3354b9f4801abb0411

linker/linker.cpp

index a3d1db2..7740aa9 100644 (file)
@@ -78,19 +78,39 @@ static LinkerTypeAllocator<android_namespace_t> g_namespace_allocator;
 static LinkerTypeAllocator<LinkedListEntry<android_namespace_t>> g_namespace_list_allocator;
 
 #if defined(__LP64__)
-static const char* const kSystemLibDir     = "/system/lib64";
-static const char* const kVendorLibDir     = "/vendor/lib64";
-static const char* const kAsanSystemLibDir = "/data/lib64";
-static const char* const kAsanVendorLibDir = "/data/vendor/lib64";
+static const char* const kSystemLibDir           = "/system/lib64";
+static const char* const kSystemNdkLibDir       = "/system/lib64/ndk";
+static const char* const kSystemVndkLibDir       = "/system/lib64/vndk";
+static const char* const kSystemVndkExtLibDir    = "/system/lib64/vndk-ext";
+static const char* const kVendorSpHalLibDir      = "/vendor/lib64/sameprocess";
+static const char* const kVendorLibDir           = "/vendor/lib64";
+static const char* const kAsanSystemLibDir       = "/data/lib64";
+static const char* const kAsanSystemNdkLibDir       = "/data/lib64/ndk";
+static const char* const kAsanSystemVndkLibDir       = "/data/lib64/vndk";
+static const char* const kAsanSystemVndkExtLibDir    = "/data/lib64/vndk-ext";
+static const char* const kAsanVendorSpHalLibDir      = "/data/vendor/lib64/sameprocess";
+static const char* const kAsanVendorLibDir       = "/data/vendor/lib64";
 #else
-static const char* const kSystemLibDir     = "/system/lib";
-static const char* const kVendorLibDir     = "/vendor/lib";
-static const char* const kAsanSystemLibDir = "/data/lib";
-static const char* const kAsanVendorLibDir = "/data/vendor/lib";
+static const char* const kSystemLibDir           = "/system/lib";
+static const char* const kSystemNdkLibDir       = "/system/lib/ndk";
+static const char* const kSystemVndkLibDir       = "/system/lib/vndk";
+static const char* const kSystemVndkExtLibDir    = "/system/lib/vndk-ext";
+static const char* const kVendorSpHalLibDir      = "/vendor/lib/sameprocess";
+static const char* const kVendorLibDir           = "/vendor/lib";
+static const char* const kAsanSystemLibDir       = "/data/lib";
+static const char* const kAsanSystemNdkLibDir       = "/data/lib/ndk";
+static const char* const kAsanSystemVndkLibDir       = "/data/lib/vndk";
+static const char* const kAsanSystemVndkExtLibDir    = "/data/lib/vndk-ext";
+static const char* const kAsanVendorSpHalLibDir      = "/data/vendor/lib/sameprocess";
+static const char* const kAsanVendorLibDir       = "/data/vendor/lib";
 #endif
 
 static const char* const kDefaultLdPaths[] = {
   kSystemLibDir,
+  kSystemNdkLibDir,
+  kSystemVndkExtLibDir,
+  kSystemVndkLibDir,
+  kVendorSpHalLibDir,
   kVendorLibDir,
   nullptr
 };
@@ -98,6 +118,14 @@ static const char* const kDefaultLdPaths[] = {
 static const char* const kAsanDefaultLdPaths[] = {
   kAsanSystemLibDir,
   kSystemLibDir,
+  kAsanSystemNdkLibDir,
+  kSystemNdkLibDir,
+  kAsanSystemVndkExtLibDir,
+  kSystemVndkExtLibDir,
+  kAsanSystemVndkLibDir,
+  kSystemVndkLibDir,
+  kAsanVendorSpHalLibDir,
+  kVendorSpHalLibDir,
   kAsanVendorLibDir,
   kVendorLibDir,
   nullptr