From b024957791e7337167b8209c8b3d2a5ca9cb636e Mon Sep 17 00:00:00 2001 From: Martin Stjernholm Date: Tue, 15 Sep 2020 02:32:35 +0100 Subject: Propagate all sanitizer flags in SDK snapshots. liblog snapshot needs to sanitizer.address=false to avoid cycle in asan builds. Adding that separately in library_sdk_member.go would start to feel like whack-a-mole, so the snapshot generation is instead extended to handle nested property structs. This uses the BpPropertySet.AddProperty extension in https://r.android.com/1423510, and common value optimisation now recurses into non-anonymous structs, instead of comparing them as a whole. Test: m nothing Test: `m SANITIZE_TARGET=address nothing` with prebuilts/runtime present in the manifest and a fresh snapshot made with this Bug: 151303681 Change-Id: I472554117a488e6c800045cb2ed59377778571a4 --- sdk/cc_sdk_test.go | 43 ++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 40 insertions(+), 3 deletions(-) (limited to 'sdk/cc_sdk_test.go') diff --git a/sdk/cc_sdk_test.go b/sdk/cc_sdk_test.go index 8c9e2285d..a76b07d12 100644 --- a/sdk/cc_sdk_test.go +++ b/sdk/cc_sdk_test.go @@ -435,8 +435,10 @@ include/Test.h -> include/include/Test.h ) } -// Verify that when the shared library has some common and some arch specific properties that the generated -// snapshot is optimized properly. +// Verify that when the shared library has some common and some arch specific +// properties that the generated snapshot is optimized properly. Substruct +// handling is tested with the sanitize clauses (but note there's a lot of +// built-in logic in sanitize.go that can affect those flags). func TestSnapshotWithCcSharedLibraryCommonProperties(t *testing.T) { result := testSdkWithCc(t, ` sdk { @@ -451,9 +453,18 @@ func TestSnapshotWithCcSharedLibraryCommonProperties(t *testing.T) { "aidl/foo/bar/Test.aidl", ], export_include_dirs: ["include"], + sanitize: { + fuzzer: false, + integer_overflow: true, + diag: { undefined: false }, + }, arch: { arm64: { export_system_include_dirs: ["arm64/include"], + sanitize: { + hwaddress: true, + integer_overflow: false, + }, }, }, stl: "none", @@ -471,13 +482,26 @@ cc_prebuilt_library_shared { stl: "none", compile_multilib: "both", export_include_dirs: ["include/include"], + sanitize: { + fuzzer: false, + diag: { + undefined: false, + }, + }, arch: { arm64: { srcs: ["arm64/lib/mynativelib.so"], export_system_include_dirs: ["arm64/include/arm64/include"], + sanitize: { + hwaddress: true, + integer_overflow: false, + }, }, arm: { srcs: ["arm/lib/mynativelib.so"], + sanitize: { + integer_overflow: true, + }, }, }, } @@ -488,13 +512,26 @@ cc_prebuilt_library_shared { stl: "none", compile_multilib: "both", export_include_dirs: ["include/include"], + sanitize: { + fuzzer: false, + diag: { + undefined: false, + }, + }, arch: { arm64: { srcs: ["arm64/lib/mynativelib.so"], export_system_include_dirs: ["arm64/include/arm64/include"], + sanitize: { + hwaddress: true, + integer_overflow: false, + }, }, arm: { srcs: ["arm/lib/mynativelib.so"], + sanitize: { + integer_overflow: true, + }, }, }, } @@ -506,7 +543,7 @@ sdk_snapshot { `), checkAllCopyRules(` include/Test.h -> include/include/Test.h -.intermediates/mynativelib/android_arm64_armv8-a_shared/mynativelib.so -> arm64/lib/mynativelib.so +.intermediates/mynativelib/android_arm64_armv8-a_shared_hwasan/mynativelib.so -> arm64/lib/mynativelib.so arm64/include/Arm64Test.h -> arm64/include/arm64/include/Arm64Test.h .intermediates/mynativelib/android_arm_armv7-a-neon_shared/mynativelib.so -> arm/lib/mynativelib.so`), ) -- cgit v1.2.3-59-g8ed1b