diff options
author | 2020-09-04 00:49:44 +0100 | |
---|---|---|
committer | 2020-09-07 14:59:33 +0000 | |
commit | b309240781b17ee994d088648d5fc76814dde436 (patch) | |
tree | a62c1d3a10063d1b0b4b11b5f128a5f03398fa59 | |
parent | fa37ba22d1e996ad785f94819be286abfae2aae5 (diff) |
Fix libnativeloader unit tests being skipped.
ART_TARGET_ANDROID was only defined in art_defaults, which wasn't
imported into libnativeloader_test. However doing that imports a lot of
stuff, including compiler pickiness that doesn't work with cxxabi.h
included via gtest.h. We instead make ART_TARGET_(ANDROID|LINUX)
implicitly defined in all art_cc_* module types.
These tests have probably not run since https://r.android.com/1295365.
Also fixed the accumulated bitrot.
Test: atest libnativeloader_test, check that 25 tests pass.
Test: Plant a test failure in native_loader_test.cpp, check that
presubmit fails.
Bug: 154074847
Bug: 137356719
Change-Id: I4e9d4dc8d78c91a7b750b8de0ab7db2114b154ac
-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()); |