You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
59 lines
1.8 KiB
59 lines
1.8 KiB
// Copyright 2019 The Chromium OS 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) {
|
|
hasCoverageFlags := false
|
|
hasSanitizeFlags := false
|
|
hasSanitizeFuzzerFlags := false
|
|
for _, arg := range builder.args {
|
|
// TODO: This should probably be -fsanitize= to not match on
|
|
// e.g. -fsanitize-blacklist
|
|
if arg.fromUser {
|
|
if strings.HasPrefix(arg.value, "-fsanitize") {
|
|
hasSanitizeFlags = true
|
|
if strings.Contains(arg.value, "fuzzer") {
|
|
hasSanitizeFuzzerFlags = true
|
|
}
|
|
} else if arg.value == "-fprofile-instr-generate" {
|
|
hasCoverageFlags = 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
|
|
})
|
|
if builder.target.compilerType == clangType {
|
|
// hasSanitizeFlags && hasCoverageFlags is to work around crbug.com/1013622
|
|
if hasSanitizeFuzzerFlags || (hasSanitizeFlags && hasCoverageFlags) {
|
|
fuzzerFlagsToAdd := []string{
|
|
// TODO: This flag should be removed once fuzzer works with new pass manager
|
|
"-fno-experimental-new-pass-manager",
|
|
}
|
|
builder.addPreUserArgs(fuzzerFlagsToAdd...)
|
|
}
|
|
}
|
|
}
|
|
}
|