Soong support for Scudo
am: d18ae5ce98
Change-Id: I0c0fcf29ccd99575de573a915c7da5d51b14cd45
This commit is contained in:
@@ -94,6 +94,7 @@ type SanitizeProperties struct {
|
||||
Safestack *bool `android:"arch_variant"`
|
||||
Cfi *bool `android:"arch_variant"`
|
||||
Integer_overflow *bool `android:"arch_variant"`
|
||||
Scudo *bool `android:"arch_variant"`
|
||||
|
||||
// Sanitizers to run in the diagnostic mode (as opposed to the release mode).
|
||||
// Replaces abort() on error with a human-readable error message.
|
||||
@@ -207,6 +208,10 @@ func (sanitize *sanitize) begin(ctx BaseModuleContext) {
|
||||
}
|
||||
}
|
||||
|
||||
if found, globalSanitizers = removeFromList("scudo", globalSanitizers); found && s.Scudo == nil {
|
||||
s.Scudo = boolPtr(true)
|
||||
}
|
||||
|
||||
if len(globalSanitizers) > 0 {
|
||||
ctx.ModuleErrorf("unknown global sanitizer option %s", globalSanitizers[0])
|
||||
}
|
||||
@@ -287,10 +292,16 @@ func (sanitize *sanitize) begin(ctx BaseModuleContext) {
|
||||
}
|
||||
|
||||
if ctx.Os() != android.Windows && (Bool(s.All_undefined) || Bool(s.Undefined) || Bool(s.Address) || Bool(s.Thread) ||
|
||||
Bool(s.Coverage) || Bool(s.Safestack) || Bool(s.Cfi) || Bool(s.Integer_overflow) || len(s.Misc_undefined) > 0) {
|
||||
Bool(s.Coverage) || Bool(s.Safestack) || Bool(s.Cfi) || Bool(s.Integer_overflow) || len(s.Misc_undefined) > 0 ||
|
||||
Bool(s.Scudo)) {
|
||||
sanitize.Properties.SanitizerEnabled = true
|
||||
}
|
||||
|
||||
// Disable Scudo if ASan or TSan is enabled.
|
||||
if Bool(s.Address) || Bool(s.Thread) {
|
||||
s.Scudo = nil
|
||||
}
|
||||
|
||||
if Bool(s.Coverage) {
|
||||
if !Bool(s.Address) {
|
||||
ctx.ModuleErrorf(`Use of "coverage" also requires "address"`)
|
||||
@@ -440,6 +451,10 @@ func (sanitize *sanitize) flags(ctx ModuleContext, flags Flags) Flags {
|
||||
}
|
||||
}
|
||||
|
||||
if Bool(sanitize.Properties.Sanitize.Scudo) {
|
||||
sanitizers = append(sanitizers, "scudo")
|
||||
}
|
||||
|
||||
if len(sanitizers) > 0 {
|
||||
sanitizeArg := "-fsanitize=" + strings.Join(sanitizers, ",")
|
||||
|
||||
@@ -477,6 +492,8 @@ func (sanitize *sanitize) flags(ctx ModuleContext, flags Flags) Flags {
|
||||
runtimeLibrary = config.AddressSanitizerRuntimeLibrary(ctx.toolchain())
|
||||
} else if Bool(sanitize.Properties.Sanitize.Thread) {
|
||||
runtimeLibrary = config.ThreadSanitizerRuntimeLibrary(ctx.toolchain())
|
||||
} else if Bool(sanitize.Properties.Sanitize.Scudo) {
|
||||
runtimeLibrary = config.ScudoRuntimeLibrary(ctx.toolchain())
|
||||
} else if len(diagSanitizers) > 0 || sanitize.Properties.UbsanRuntimeDep {
|
||||
runtimeLibrary = config.UndefinedBehaviorSanitizerRuntimeLibrary(ctx.toolchain())
|
||||
}
|
||||
@@ -711,6 +728,7 @@ func cfiStaticLibs(config android.Config) *[]string {
|
||||
|
||||
func enableMinimalRuntime(sanitize *sanitize) bool {
|
||||
if !Bool(sanitize.Properties.Sanitize.Address) &&
|
||||
!Bool(sanitize.Properties.Sanitize.Scudo) &&
|
||||
(Bool(sanitize.Properties.Sanitize.Integer_overflow) ||
|
||||
len(sanitize.Properties.Sanitize.Misc_undefined) > 0) &&
|
||||
!(Bool(sanitize.Properties.Sanitize.Diag.Integer_overflow) ||
|
||||
|
Reference in New Issue
Block a user