summaryrefslogtreecommitdiff
path: root/linker/linker.cpp
diff options
context:
space:
mode:
authorJiyong Park <jiyong@google.com>2017-01-31 17:32:46 +0900
committerJiyong Park <jiyong@google.com>2017-03-13 08:55:23 +0900
commit1daa18e73714150e26c4380840c793e406c11095 (patch)
tree3f754c399c90be73ac6489a2275489a1a8875726 /linker/linker.cpp
parent6e528631d1eb4779dc93098c696c3a18e6bcecfb (diff)
linker: add more directories to default lib paths
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
Diffstat (limited to 'linker/linker.cpp')
-rw-r--r--linker/linker.cpp44
1 files changed, 36 insertions, 8 deletions
diff --git a/linker/linker.cpp b/linker/linker.cpp
index a3d1db2c4..7740aa981 100644
--- a/linker/linker.cpp
+++ b/linker/linker.cpp
@@ -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