diff options
author | 2020-02-19 16:08:47 +0900 | |
---|---|---|
committer | 2020-02-21 01:04:32 +0000 | |
commit | 272b36d1b5cbab951239b32ed679a9dbc4ffdf1a (patch) | |
tree | 07e82dbd51885c2ff453da524fa2a46e48adf3ef | |
parent | 2ad7c98dda05b0c8a049895cd68b3d2850156912 (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.cpp | 8 | ||||
-rw-r--r-- | libnativeloader/native_loader.cpp | 2 | ||||
-rw-r--r-- | libnativeloader/native_loader_test.cpp | 16 |
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)); } |