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:
Martin Stjernholm
2020-09-15 02:32:35 +01:00
parent 191c25f589
commit b024957791
4 changed files with 112 additions and 65 deletions

View File

@@ -221,10 +221,7 @@ var includeDirProperties = []includeDirsProperty{
// Add properties that may, or may not, be arch specific.
func addPossiblyArchSpecificProperties(sdkModuleContext android.ModuleContext, builder android.SnapshotBuilder, libInfo *nativeLibInfoProperties, outputProperties android.BpPropertySet) {
if libInfo.SanitizeNever {
sanitizeSet := outputProperties.AddPropertySet("sanitize")
sanitizeSet.AddProperty("never", true)
}
outputProperties.AddProperty("sanitize", &libInfo.Sanitize)
// Copy the generated library to the snapshot and add a reference to it in the .bp module.
if libInfo.outputFile != nil {
@@ -373,8 +370,10 @@ type nativeLibInfoProperties struct {
// not vary by arch so cannot be android specific.
StubsVersion string `sdk:"ignored-on-host"`
// Value of SanitizeProperties.Sanitize.Never. Needs to be propagated for CRT objects.
SanitizeNever bool `android:"arch_variant"`
// Value of SanitizeProperties.Sanitize. Several - but not all - of these
// affect the expanded variants. All are propagated to avoid entangling the
// sanitizer logic with the snapshot generation.
Sanitize SanitizeUserProps `android:"arch_variant"`
// outputFile is not exported as it is always arch specific.
outputFile android.Path
@@ -423,8 +422,8 @@ func (p *nativeLibInfoProperties) PopulateFromVariant(ctx android.SdkMemberConte
p.StubsVersion = ccModule.StubsVersion()
}
if ccModule.sanitize != nil && proptools.Bool(ccModule.sanitize.Properties.Sanitize.Never) {
p.SanitizeNever = true
if ccModule.sanitize != nil {
p.Sanitize = ccModule.sanitize.Properties.Sanitize
}
}