blob: fcf97e532c163e6312e27a18c487c0c17d7c5f30 [file] [log] [blame]
# Copyright 2019 The Fuchsia Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
# TODO(fxbug.dev/54160): Keep in sync with //build/config/zircon/instrumentation/BUILD.gn
import("//build/config/zircon/instrumentation/sanitizer_default_options.gni")
config("asan") {
compiler_flags = [ "-fsanitize=address" ]
asmflags = compiler_flags
cflags = compiler_flags
ldflags = compiler_flags
if (is_kernel) {
configs = [ "//zircon/kernel/lib/instrumentation/asan:kasan" ]
}
}
sanitizer_default_options("asan_default_options") {
# The asan runtime includes the lsan and ubsan runtimes, which parse their
# own options.
deps = [
":lsan_default_options",
":ubsan_default_options",
]
}
sanitizer_default_options("lsan_default_options") {
}
# TODO(fxbug.dev/45047): Temporary while leaks are plugged.
# As leak bugs are found, file a bug #nnnnn for the leaky test/component,
# and then add:
# ```
# # TODO(nnnnn): Fix the leaks and remove this.
# deps += [ "//build/config/zircon/instrumentation:suppress-lsan.DO-NOT-USE-THIS" ]
# ```
# to the target that builds the leaky code. When all leaky tests have been
# marked that way, the asan_default_options default above will be removed.
sanitizer_extra_options("suppress-lsan.DO-NOT-USE-THIS") {
visibility = [
"*", # TODO(fxbug.dev/45047): constrain this and give each a TODO(nnnnn)
# comment
]
args = [ "detect_leaks=0" ]
output_name = "lsan_default_options"
tags = [ "lsan" ]
}
# TODO(fxbug.dev/59214): Temporary while bugs are fixed. As stack-use-after-return bugs
# are found, file a bug #nnnnn for the buggy test/component, and then add:
# ```
# # TODO(nnnnn): Fix the bugs and remove this.
# deps += [ "//build/config/zircon/instrumentation:suppress-asan-stack-use-after-return" ]
# ```
sanitizer_extra_options("suppress-asan-stack-use-after-return") {
visibility = [
# TODO(fxbug.dev/59214): Allow only necessary third-party or TODO(bug-filed) cases.
# Playbook for suppression is to file bug #nnnnn for specific code
# reporting a violation, and add it to this visibility list with a comment
# at the end of the line: `# TODO(nnnnn): remove when fixed`.
]
args = [ "detect_stack_use_after_return=0" ]
output_name = "asan_default_options"
tags = [ "asan" ]
}
config("ubsan") {
compiler_flags = [ "-fsanitize=undefined" ]
asmflags = compiler_flags
cflags = compiler_flags
ldflags = compiler_flags
}
sanitizer_default_options("ubsan_default_options") {
}
# ubsan-trap is pure instrumentation with no runtime.
config("ubsan-trap") {
if (is_gcc) {
compiler_flags = [
"-fsanitize=undefined",
"-fsanitize-undefined-trap-on-error",
]
} else {
compiler_flags = [ "-fsanitize-trap=undefined" ]
}
asmflags = compiler_flags
cflags = compiler_flags
ldflags = compiler_flags
}
# NOTE: Every variant that includes any sancov configs must have "sancov"
# in tags. See //zircon/system/ulib/c/sanitizers. To make it harder to fail
# to do this, only define the configs in toolchains with the tag.
if (toolchain.tags + [ "sancov" ] - [ "sancov" ] != toolchain.tags) {
config("sancov") {
compiler_flags = [ "-fsanitize-coverage=trace-pc-guard" ]
asmflags = compiler_flags
cflags = compiler_flags
ldflags = compiler_flags
}
# This enables all the different kinds of sancov callbacks, not just
# the basic ones actually implemented by the canonical runtime.
config("sancov-full") {
compiler_flags = [ "-fsanitize-coverage=indirect-calls,trace-cmp,trace-div,trace-gep,trace-pc-guard,inline-8bit-counters,pc-table" ]
asmflags = compiler_flags
cflags = compiler_flags
ldflags = compiler_flags
}
# fuzzer instrumentation is a superset of the sancov instrumentation.
config("fuzzer") {
compiler_flags = [ "-fsanitize=fuzzer" ]
asmflags = compiler_flags
cflags = compiler_flags
ldflags = compiler_flags
}
group("fuzzer_deps") {
if (is_fuchsia) {
# The statically-linked libFuzzer runtime depends on libfdio and
# libzircon.
deps = [
"//zircon/system/ulib/fdio",
"//zircon/system/ulib/zircon",
]
}
}
}
config("profile") {
compiler_flags = [
"-fprofile-instr-generate",
"-fcoverage-mapping",
]
asmflags = compiler_flags
cflags = compiler_flags
ldflags = compiler_flags
defines = [ "LLVM_PROFILE" ]
}
group("profile_deps") {
if (is_fuchsia && !is_kernel) {
# The statically-linked profiling runtime depends on libzircon.
deps = [ "//zircon/system/ulib/zircon" ]
}
}