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
This commit is contained in:
@@ -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`),
|
||||
)
|
||||
|
Reference in New Issue
Block a user