blob: 5d517e49f2ee2c39ad485cb652d4712badc519db [file] [log] [blame]
// Copyright 2019 The ChromiumOS Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
package main
import (
"strings"
)
func processSanitizerFlags(builder *commandBuilder) {
hasSanitizeFlags := false
for _, arg := range builder.args {
// TODO: This should probably be -fsanitize= to not match on
// e.g. -fsanitize-blocklist
if arg.fromUser {
if strings.HasPrefix(arg.value, "-fsanitize") {
hasSanitizeFlags = true
}
}
}
if hasSanitizeFlags {
// Flags not supported by sanitizers (ASan etc.)
unsupportedSanitizerFlags := map[string]bool{
"-D_FORTIFY_SOURCE=1": true,
"-D_FORTIFY_SOURCE=2": true,
"-Wl,--no-undefined": true,
"-Wl,-z,defs": true,
}
builder.transformArgs(func(arg builderArg) string {
// TODO: This is a bug in the old wrapper to not filter
// non user args for gcc. Fix this once we don't compare to the old wrapper anymore.
if (builder.target.compilerType != gccType || arg.fromUser) &&
unsupportedSanitizerFlags[arg.value] {
return ""
}
return arg.value
})
}
}