summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Kiyoung Kim <kiyoungkim@google.com> 2020-02-19 16:08:47 +0900
committer Kiyoung Kim <kiyoungkim@google.com> 2020-02-21 01:04:32 +0000
commit272b36d1b5cbab951239b32ed679a9dbc4ffdf1a (patch)
tree07e82dbd51885c2ff453da524fa2a46e48adf3ef
parent2ad7c98dda05b0c8a049895cd68b3d2850156912 (diff)
Rename APEX Namespace
Current APEX Namespace is named with APEX name itself, which also uses .(dot) so linker configuration can keep the syntax safe. For example, if there are APEX modules named 'A' and 'A.link.A', then 'namespace.A.link.A.link.A = a.so' phrase can be ambiguous from the linker. To allow any additional linker syntax in the future, we should avoid dot separator from the namespace name. Bug: 148826508 Test: m -j passed Test: boot succeeded from cuttlefish and walleye Change-Id: I11b6da1b59b4ebf3016f1d783636c7e5d0f8309a
-rw-r--r--libnativeloader/library_namespaces.cpp8
-rw-r--r--libnativeloader/native_loader.cpp2
-rw-r--r--libnativeloader/native_loader_test.cpp16
3 files changed, 14 insertions, 12 deletions
diff --git a/libnativeloader/library_namespaces.cpp b/libnativeloader/library_namespaces.cpp
index 9c658d78e5..3d74e2d3e5 100644
--- a/libnativeloader/library_namespaces.cpp
+++ b/libnativeloader/library_namespaces.cpp
@@ -42,10 +42,10 @@ namespace {
// vendor and system namespaces.
constexpr const char* kVendorNamespaceName = "sphal";
constexpr const char* kVndkNamespaceName = "vndk";
-constexpr const char* kArtNamespaceName = "com.android.art";
-constexpr const char* kNeuralNetworksNamespaceName = "com.android.neuralnetworks";
-constexpr const char* kCronetNamespaceName = "com.android.cronet";
-constexpr const char* kStatsdNamespaceName = "com.android.os.statsd";
+constexpr const char* kArtNamespaceName = "com_android_art";
+constexpr const char* kNeuralNetworksNamespaceName = "com_android_neuralnetworks";
+constexpr const char* kCronetNamespaceName = "com_android_cronet";
+constexpr const char* kStatsdNamespaceName = "com_android_os_statsd";
// classloader-namespace is a linker namespace that is created for the loaded
// app. To be specific, it is created for the app classloader. When
diff --git a/libnativeloader/native_loader.cpp b/libnativeloader/native_loader.cpp
index 3998f61eaa..988e8a841c 100644
--- a/libnativeloader/native_loader.cpp
+++ b/libnativeloader/native_loader.cpp
@@ -21,6 +21,7 @@
#include <dlfcn.h>
#include <sys/types.h>
+#include <algorithm>
#include <memory>
#include <mutex>
#include <string>
@@ -61,6 +62,7 @@ android_namespace_t* FindExportedNamespace(const char* caller_location) {
LOG_ALWAYS_FATAL_IF((slash_index == std::string::npos),
"Error finding namespace of apex: no slash in path %s", caller_location);
std::string name = location.substr(start_index, slash_index - start_index);
+ std::replace(name.begin(), name.end(), '.', '_');
android_namespace_t* boot_namespace = android_get_exported_namespace(name.c_str());
LOG_ALWAYS_FATAL_IF((boot_namespace == nullptr),
"Error finding namespace of apex: no namespace called %s", name.c_str());
diff --git a/libnativeloader/native_loader_test.cpp b/libnativeloader/native_loader_test.cpp
index 75cbc601bc..cc43e58a00 100644
--- a/libnativeloader/native_loader_test.cpp
+++ b/libnativeloader/native_loader_test.cpp
@@ -94,12 +94,12 @@ class Platform {
static std::unordered_map<std::string, Platform::mock_namespace_handle> namespaces = {
{"system", TO_MOCK_NAMESPACE(TO_ANDROID_NAMESPACE("system"))},
{"default", TO_MOCK_NAMESPACE(TO_ANDROID_NAMESPACE("default"))},
- {"com.android.art", TO_MOCK_NAMESPACE(TO_ANDROID_NAMESPACE("com.android.art"))},
+ {"com_android_art", TO_MOCK_NAMESPACE(TO_ANDROID_NAMESPACE("com_android_art"))},
{"sphal", TO_MOCK_NAMESPACE(TO_ANDROID_NAMESPACE("sphal"))},
{"vndk", TO_MOCK_NAMESPACE(TO_ANDROID_NAMESPACE("vndk"))},
- {"com.android.neuralnetworks", TO_MOCK_NAMESPACE(TO_ANDROID_NAMESPACE("com.android.neuralnetworks"))},
- {"com.android.cronet", TO_MOCK_NAMESPACE(TO_ANDROID_NAMESPACE("com.android.cronet"))},
- {"com.android.os.statsd", TO_MOCK_NAMESPACE(TO_ANDROID_NAMESPACE("com.android.os.statsd"))},
+ {"com_android_neuralnetworks", TO_MOCK_NAMESPACE(TO_ANDROID_NAMESPACE("com_android_neuralnetworks"))},
+ {"com_android_cronet", TO_MOCK_NAMESPACE(TO_ANDROID_NAMESPACE("com_android_cronet"))},
+ {"com_android_os_statsd", TO_MOCK_NAMESPACE(TO_ANDROID_NAMESPACE("com_android_os_statsd"))},
};
// The actual gmock object
@@ -386,7 +386,7 @@ class NativeLoaderTest_Create : public NativeLoaderTest {
.WillOnce(Return(true));
}
if (expected_link_with_art_ns) {
- EXPECT_CALL(*mock, mock_link_namespaces(Eq(IsBridged()), _, NsEq("com.android.art"),
+ EXPECT_CALL(*mock, mock_link_namespaces(Eq(IsBridged()), _, NsEq("com_android_art"),
StrEq(expected_shared_libs_to_art_ns)))
.WillOnce(Return(true));
}
@@ -406,17 +406,17 @@ class NativeLoaderTest_Create : public NativeLoaderTest {
.WillOnce(Return(true));
}
if (expected_link_with_neuralnetworks_ns) {
- EXPECT_CALL(*mock, mock_link_namespaces(Eq(IsBridged()), _, NsEq("com.android.neuralnetworks"),
+ EXPECT_CALL(*mock, mock_link_namespaces(Eq(IsBridged()), _, NsEq("com_android_neuralnetworks"),
StrEq(expected_shared_libs_to_neuralnetworks_ns)))
.WillOnce(Return(true));
}
if (expected_link_with_cronet_ns) {
- EXPECT_CALL(*mock, mock_link_namespaces(Eq(IsBridged()), _, NsEq("com.android.cronet"),
+ EXPECT_CALL(*mock, mock_link_namespaces(Eq(IsBridged()), _, NsEq("com_android_cronet"),
StrEq(expected_shared_libs_to_cronet_ns)))
.WillOnce(Return(true));
}
if (expected_link_with_statsd_ns) {
- EXPECT_CALL(*mock, mock_link_namespaces(Eq(IsBridged()), _, NsEq("com.android.os.statsd"),
+ EXPECT_CALL(*mock, mock_link_namespaces(Eq(IsBridged()), _, NsEq("com_android_os_statsd"),
StrEq(expected_shared_libs_to_statsd_ns)))
.WillOnce(Return(true));
}