Add Rust fuzzing support.
Add a rust_fuzz module which builds a libfuzzer binary that enabes
asan+sancov. This relies on the libfuzzer-sys crate.
Bug: 147140513
Test: Local rust_fuzz example builds, fuzzes with asan+sancov.
Change-Id: I57db3b8d25869791824ccfab768d13b0bb9d42fa
diff --git a/rust/config/toolchain.go b/rust/config/toolchain.go
index 616d88b..9525c38 100644
--- a/rust/config/toolchain.go
+++ b/rust/config/toolchain.go
@@ -34,6 +34,8 @@
Supported() bool
Bionic() bool
+
+ LibclangRuntimeLibraryArch() string
}
type toolchainBase struct {
@@ -106,6 +108,36 @@
return false
}
+func (toolchainBase) LibclangRuntimeLibraryArch() string {
+ return ""
+}
+
+func LibFuzzerRuntimeLibrary(t Toolchain) string {
+ return LibclangRuntimeLibrary(t, "fuzzer")
+}
+
+func LibclangRuntimeLibrary(t Toolchain, library string) string {
+ arch := t.LibclangRuntimeLibraryArch()
+ if arch == "" {
+ return ""
+ }
+ if !t.Bionic() {
+ return "libclang_rt." + library + "-" + arch
+ }
+ return "libclang_rt." + library + "-" + arch + "-android"
+}
+
+func LibRustRuntimeLibrary(t Toolchain, library string) string {
+ arch := t.LibclangRuntimeLibraryArch()
+ if arch == "" {
+ return ""
+ }
+ if !t.Bionic() {
+ return "librustc_rt." + library + "-" + arch
+ }
+ return "librustc_rt." + library + "-" + arch + "-android"
+}
+
func toolchainBaseFactory() Toolchain {
return &toolchainBase{}
}