diff options
-rw-r--r-- | build/Android.bp | 2 | ||||
-rw-r--r-- | build/art.go | 31 | ||||
-rw-r--r-- | libnativeloader/Android.bp | 2 | ||||
-rw-r--r-- | libnativeloader/native_loader_test.cpp | 28 |
4 files changed, 44 insertions, 19 deletions
diff --git a/build/Android.bp b/build/Android.bp index 8d8b7e9629..9305bc6fff 100644 --- a/build/Android.bp +++ b/build/Android.bp @@ -137,8 +137,6 @@ art_global_defaults { target: { android: { cflags: [ - "-DART_TARGET", - // To use oprofile_android --callgraph, uncomment this and recompile with // mmma -j art // "-fno-omit-frame-pointer", diff --git a/build/art.go b/build/art.go index 6e9e9fda6e..4d491dcb75 100644 --- a/build/art.go +++ b/build/art.go @@ -132,11 +132,6 @@ func deviceFlags(ctx android.LoadHookContext) []string { ) cflags = append(cflags, "-DART_BASE_ADDRESS="+ctx.Config().LibartImgDeviceBaseAddress()) - if ctx.Config().IsEnvTrue("ART_TARGET_LINUX") { - cflags = append(cflags, "-DART_TARGET_LINUX") - } else { - cflags = append(cflags, "-DART_TARGET_ANDROID") - } minDelta := ctx.Config().GetenvWithDefault("LIBART_IMG_TARGET_MIN_BASE_ADDRESS_DELTA", "-0x1000000") maxDelta := ctx.Config().GetenvWithDefault("LIBART_IMG_TARGET_MAX_BASE_ADDRESS_DELTA", "0x1000000") cflags = append(cflags, "-DART_BASE_ADDRESS_MIN_DELTA="+minDelta) @@ -207,6 +202,26 @@ func globalDefaults(ctx android.LoadHookContext) { ctx.AppendProperties(p) } +// Hook that adds flags that are implicit for all cc_art_* modules. +func addImplicitFlags(ctx android.LoadHookContext) { + type props struct { + Target struct { + Android struct { + Cflags []string + } + } + } + + p := &props{} + if ctx.Config().IsEnvTrue("ART_TARGET_LINUX") { + p.Target.Android.Cflags = []string{"-DART_TARGET", "-DART_TARGET_LINUX"} + } else { + p.Target.Android.Cflags = []string{"-DART_TARGET", "-DART_TARGET_ANDROID"} + } + + ctx.AppendProperties(p) +} + func debugDefaults(ctx android.LoadHookContext) { type props struct { Cflags []string @@ -381,6 +396,7 @@ func artHostTestApexBundleFactory() android.Module { func artGlobalDefaultsFactory() android.Module { module := artDefaultsFactory() + android.AddLoadHook(module, addImplicitFlags) android.AddLoadHook(module, globalDefaults) return module @@ -422,6 +438,7 @@ func artLibrary() android.Module { installCodegenCustomizer(module, staticAndSharedLibrary) + android.AddLoadHook(module, addImplicitFlags) android.AddInstallHook(module, addTestcasesFile) return module } @@ -431,12 +448,14 @@ func artStaticLibrary() android.Module { installCodegenCustomizer(module, staticLibrary) + android.AddLoadHook(module, addImplicitFlags) return module } func artBinary() android.Module { module := cc.BinaryFactory() + android.AddLoadHook(module, addImplicitFlags) android.AddLoadHook(module, customLinker) android.AddLoadHook(module, prefer32Bit) android.AddInstallHook(module, addTestcasesFile) @@ -448,6 +467,7 @@ func artTest() android.Module { installCodegenCustomizer(module, binary) + android.AddLoadHook(module, addImplicitFlags) android.AddLoadHook(module, customLinker) android.AddLoadHook(module, prefer32Bit) android.AddInstallHook(module, testInstall) @@ -459,6 +479,7 @@ func artTestLibrary() android.Module { installCodegenCustomizer(module, staticAndSharedLibrary) + android.AddLoadHook(module, addImplicitFlags) android.AddLoadHook(module, prefer32Bit) android.AddInstallHook(module, testInstall) return module diff --git a/libnativeloader/Android.bp b/libnativeloader/Android.bp index 47735febcc..6a79169858 100644 --- a/libnativeloader/Android.bp +++ b/libnativeloader/Android.bp @@ -103,7 +103,7 @@ cc_library_headers { export_header_lib_headers: ["jni_headers"], } -cc_test { +art_cc_test { name: "libnativeloader_test", srcs: [ "native_loader_test.cpp", diff --git a/libnativeloader/native_loader_test.cpp b/libnativeloader/native_loader_test.cpp index e64e1a518c..81109b6008 100644 --- a/libnativeloader/native_loader_test.cpp +++ b/libnativeloader/native_loader_test.cpp @@ -20,6 +20,7 @@ #include <memory> #include <unordered_map> +#include <android-base/stringprintf.h> #include <android-base/strings.h> #include <gmock/gmock.h> #include <gtest/gtest.h> @@ -95,14 +96,17 @@ class Platform { // These represents built-in namespaces created by the linker according to ld.config.txt 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_i18n", TO_MOCK_NAMESPACE(TO_ANDROID_NAMESPACE("com_android_i18n"))}, - {"sphal", TO_MOCK_NAMESPACE(TO_ANDROID_NAMESPACE("sphal"))}, - {"vndk", TO_MOCK_NAMESPACE(TO_ANDROID_NAMESPACE("vndk"))}, - {"vndk_product", TO_MOCK_NAMESPACE(TO_ANDROID_NAMESPACE("vndk_product"))}, - {"com_android_neuralnetworks", TO_MOCK_NAMESPACE(TO_ANDROID_NAMESPACE("com_android_neuralnetworks"))}, - {"com_android_os_statsd", TO_MOCK_NAMESPACE(TO_ANDROID_NAMESPACE("com_android_os_statsd"))}, +#define NAMESPACE_ENTRY(ns) {ns, TO_MOCK_NAMESPACE(TO_ANDROID_NAMESPACE(ns))} + NAMESPACE_ENTRY("com_android_i18n"), + NAMESPACE_ENTRY("com_android_neuralnetworks"), + NAMESPACE_ENTRY("com_android_os_statsd"), + NAMESPACE_ENTRY("com_android_art"), + NAMESPACE_ENTRY("default"), + NAMESPACE_ENTRY("sphal"), + NAMESPACE_ENTRY("system"), + NAMESPACE_ENTRY("vndk"), + NAMESPACE_ENTRY("vndk_product"), +#undef NAMESPACE_ENTRY }; // The actual gmock object @@ -116,7 +120,9 @@ class MockPlatform : public Platform { if (namespaces.find(name) != namespaces.end()) { return namespaces[name]; } - return TO_MOCK_NAMESPACE(TO_ANDROID_NAMESPACE("(namespace not found")); + std::string msg = android::base::StringPrintf("(namespace %s not found)", name); + // The strdup'ed string will leak, but the test is already failing if we get here. + return TO_MOCK_NAMESPACE(TO_ANDROID_NAMESPACE(strdup(msg.c_str()))); })); } @@ -438,7 +444,7 @@ class NativeLoaderTest_Create : public NativeLoaderTest { jstring err = CreateClassLoaderNamespace( env(), target_sdk_version, env()->NewStringUTF(class_loader.c_str()), is_shared, env()->NewStringUTF(dex_path.c_str()), env()->NewStringUTF(library_path.c_str()), - env()->NewStringUTF(permitted_path.c_str())); + env()->NewStringUTF(permitted_path.c_str()), /*uses_library_list=*/ nullptr); // no error EXPECT_EQ(err, nullptr) << "Error is: " << std::string(ScopedUtfChars(env(), err).c_str()); @@ -579,7 +585,7 @@ TEST_P(NativeLoaderTest_Create, TwoApks) { env(), second_app_target_sdk_version, env()->NewStringUTF(second_app_class_loader.c_str()), second_app_is_shared, env()->NewStringUTF(second_app_dex_path.c_str()), env()->NewStringUTF(second_app_library_path.c_str()), - env()->NewStringUTF(second_app_permitted_path.c_str())); + env()->NewStringUTF(second_app_permitted_path.c_str()), /*uses_library_list=*/ nullptr); // success EXPECT_EQ(err, nullptr) << "Error is: " << std::string(ScopedUtfChars(env(), err).c_str()); |