Bp2build Sanitizer Blocklist
Bug: 286894426
Test: Unit tests
Change-Id: I382e028410a185a5017dba1fc47c83ad5b2432cf
diff --git a/cc/bp2build.go b/cc/bp2build.go
index 1e83ca3..eb91898 100644
--- a/cc/bp2build.go
+++ b/cc/bp2build.go
@@ -1781,6 +1781,12 @@
for _, sanitizer := range sanitizerProps.Sanitize.Misc_undefined {
features = append(features, "ubsan_"+sanitizer)
}
+ blocklist := sanitizerProps.Sanitize.Blocklist
+ if blocklist != nil {
+ // Format the blocklist name to be used in a feature name
+ blocklistFeatureSuffix := strings.Replace(strings.ToLower(*blocklist), ".", "_", -1)
+ features = append(features, "ubsan_blocklist_"+blocklistFeatureSuffix)
+ }
if proptools.Bool(sanitizerProps.Sanitize.Cfi) {
features = append(features, "android_cfi")
if proptools.Bool(sanitizerProps.Sanitize.Config.Cfi_assembly_support) {
diff --git a/cc/cc.go b/cc/cc.go
index f2c8525..fe85cae 100644
--- a/cc/cc.go
+++ b/cc/cc.go
@@ -1930,7 +1930,6 @@
sanitizeProps.Safestack,
sanitizeProps.Scudo,
BoolPtr(len(c.sanitize.Properties.Sanitize.Recover) > 0),
- BoolPtr(c.sanitize.Properties.Sanitize.Blocklist != nil),
}
for _, san := range unsupportedSanitizers {
if Bool(san) {
diff --git a/cc/sanitize.go b/cc/sanitize.go
index a5691ee..d391cf5 100644
--- a/cc/sanitize.go
+++ b/cc/sanitize.go
@@ -62,12 +62,14 @@
"-fast-isel=false",
}
+ sanitizeIgnorelistPrefix = "-fsanitize-ignorelist="
+
cfiBlocklistPath = "external/compiler-rt/lib/cfi"
cfiBlocklistFilename = "cfi_blocklist.txt"
cfiEnableFlag = "-fsanitize=cfi"
cfiCrossDsoFlag = "-fsanitize-cfi-cross-dso"
cfiCflags = []string{"-flto", cfiCrossDsoFlag,
- "-fsanitize-ignorelist=" + cfiBlocklistPath + "/" + cfiBlocklistFilename}
+ sanitizeIgnorelistPrefix + cfiBlocklistPath + "/" + cfiBlocklistFilename}
// -flto and -fvisibility are required by clang when -fsanitize=cfi is
// used, but have no effect on assembly files
cfiAsflags = []string{"-flto", "-fvisibility=default"}
@@ -401,6 +403,7 @@
exportedVars.ExportStringList("CfiLdFlags", cfiLdflags[2:])
exportedVars.ExportStringList("CfiAsFlags", cfiAsflags[1:])
+ exportedVars.ExportString("SanitizeIgnorelistPrefix", sanitizeIgnorelistPrefix)
exportedVars.ExportString("CfiCrossDsoFlag", cfiCrossDsoFlag)
exportedVars.ExportString("CfiBlocklistPath", cfiBlocklistPath)
exportedVars.ExportString("CfiBlocklistFilename", cfiBlocklistFilename)
@@ -965,7 +968,7 @@
blocklist := android.OptionalPathForModuleSrc(ctx, s.Properties.Sanitize.Blocklist)
if blocklist.Valid() {
- flags.Local.CFlags = append(flags.Local.CFlags, "-fsanitize-ignorelist="+blocklist.String())
+ flags.Local.CFlags = append(flags.Local.CFlags, sanitizeIgnorelistPrefix+blocklist.String())
flags.CFlagsDeps = append(flags.CFlagsDeps, blocklist.Path())
}