linker: implement shared namespaces
Shared namespaces clone the list of loaded native
libraries from the caller namespace. This allows
classloaders for bundled apps to share already loaded
libraries with default namespace.
Bug: http://b/22548808
Bug: http://b/26165097
Change-Id: I8949d45937fdb38e1f586ff0679003adac0d9dad
(cherry picked from commit e78deef364d952dd1141a2f3067a12060aaf11e6)
diff --git a/linker/dlfcn.cpp b/linker/dlfcn.cpp
index ba54d39..a7c3fb0 100644
--- a/linker/dlfcn.cpp
+++ b/linker/dlfcn.cpp
@@ -148,12 +148,14 @@
}
android_namespace_t* android_create_namespace(const char* name, const char* ld_library_path,
- const char* default_library_path, bool is_isolated,
+ const char* default_library_path, uint64_t type,
const char* permitted_when_isolated_path) {
+ void* caller_addr = __builtin_return_address(0);
ScopedPthreadMutexLocker locker(&g_dl_mutex);
- android_namespace_t* result = create_namespace(name, ld_library_path, default_library_path,
- is_isolated, permitted_when_isolated_path);
+ android_namespace_t* result = create_namespace(caller_addr, name, ld_library_path,
+ default_library_path, type,
+ permitted_when_isolated_path);
if (result == nullptr) {
__bionic_format_dlerror("android_create_namespace failed", linker_get_error_buffer());