aboutsummaryrefslogtreecommitdiff
path: root/driver/BUILD.bazel
diff options
context:
space:
mode:
Diffstat (limited to 'driver/BUILD.bazel')
-rw-r--r--driver/BUILD.bazel213
1 files changed, 91 insertions, 122 deletions
diff --git a/driver/BUILD.bazel b/driver/BUILD.bazel
index becd4fe1..2d503cce 100644
--- a/driver/BUILD.bazel
+++ b/driver/BUILD.bazel
@@ -1,130 +1,103 @@
-load("//bazel:cc.bzl", "cc_17_library")
+load("@fmeum_rules_jni//jni:defs.bzl", "cc_jni_library")
+load("//bazel:compat.bzl", "SKIP_ON_WINDOWS")
cc_library(
- name = "sanitizer_hooks_with_pc",
- srcs = ["sanitizer_hooks_with_pc.cpp"],
- hdrs = ["sanitizer_hooks_with_pc.h"],
- linkstatic = True,
-)
-
-cc_test(
- name = "sanitizer_hooks_with_pc_test",
- size = "small",
- srcs = ["sanitizer_hooks_with_pc_test.cpp"],
- deps = [
- ":sanitizer_hooks_with_pc",
- "@googletest//:gtest",
- "@googletest//:gtest_main",
- ],
-)
-
-cc_library(
- name = "fuzzed_data_provider",
- srcs = [
- "fuzzed_data_provider.cpp",
- ],
- hdrs = [
- "fuzzed_data_provider.h",
- ],
- visibility = [
- "//agent/src/main/native/com/code_intelligence/jazzer/replay:__pkg__",
- ],
+ name = "jazzer_main",
+ srcs = ["jazzer_main.cpp"],
deps = [
- "@com_google_absl//absl/strings:str_format",
- "@fmeum_rules_jni//jni",
+ ":jvm_tooling_lib",
+ "@com_google_absl//absl/strings",
+ "@fmeum_rules_jni//jni:libjvm",
+ "@jazzer_com_github_gflags_gflags//:gflags",
],
)
cc_library(
name = "jvm_tooling_lib",
- srcs = [
- "coverage_tracker.cpp",
- "fuzz_target_runner.cpp",
- "java_reproducer.cpp",
- "java_reproducer.h",
- "java_reproducer_templates.h",
- "jvm_tooling.cpp",
- "libfuzzer_callbacks.cpp",
- "libfuzzer_callbacks.h",
- "libfuzzer_driver.cpp",
- "signal_handler.cpp",
- "signal_handler.h",
- "utils.cpp",
- "utils.h",
- ],
- hdrs = [
- "coverage_tracker.h",
- "fuzz_target_runner.h",
- "fuzzed_data_provider.h",
- "jvm_tooling.h",
- "libfuzzer_driver.h",
- ],
- linkopts = select({
- "@platforms//os:windows": [],
- "//conditions:default": ["-ldl"],
- }),
- # Needs to be linked statically for JNI_OnLoad_jazzer_initialize to be found
- # by the JVM.
- linkstatic = True,
- local_defines = select({
- # Windows does not have SIGUSR1, which triggers a graceful exit of
- # libFuzzer. Instead, trigger a hard exit.
- "@platforms//os:windows": ["SIGUSR1=SIGTERM"],
- "//conditions:default": [],
- }),
+ srcs = ["jvm_tooling.cpp"],
+ hdrs = ["jvm_tooling.h"],
tags = [
# Should be built through the cc_17_library driver_lib.
"manual",
],
- visibility = ["//visibility:public"],
deps = [
- ":fuzzed_data_provider",
- ":sanitizer_hooks_with_pc",
"@bazel_tools//tools/cpp/runfiles",
"@com_google_absl//absl/strings",
"@com_google_absl//absl/strings:str_format",
- "@com_google_glog//:glog",
- "@fmeum_rules_jni//jni:libjvm",
+ "@fmeum_rules_jni//jni",
"@jazzer_com_github_gflags_gflags//:gflags",
],
)
-cc_17_library(
- name = "driver_lib",
- srcs = [
- "libfuzzer_fuzz_target.cpp",
- ],
- linkstatic = True,
- deps = [
- ":jvm_tooling_lib",
- "@jazzer_libfuzzer//:libFuzzer",
- ],
+DYNAMIC_SYMBOLS_TO_EXPORT = [
+ "__sanitizer_cov_8bit_counters_init",
+ "__sanitizer_cov_pcs_init",
+ "__sanitizer_cov_trace_cmp1",
+ "__sanitizer_cov_trace_cmp4",
+ "__sanitizer_cov_trace_cmp4",
+ "__sanitizer_cov_trace_cmp8",
+ "__sanitizer_cov_trace_const_cmp1",
+ "__sanitizer_cov_trace_const_cmp4",
+ "__sanitizer_cov_trace_const_cmp4",
+ "__sanitizer_cov_trace_const_cmp8",
+ "__sanitizer_cov_trace_div4",
+ "__sanitizer_cov_trace_div8",
+ "__sanitizer_cov_trace_gep",
+ "__sanitizer_cov_trace_pc_indir",
+ "__sanitizer_cov_trace_switch",
+ "__sanitizer_weak_hook_memcmp",
+ "__sanitizer_weak_hook_memmem",
+ "__sanitizer_weak_hook_strcasecmp",
+ "__sanitizer_weak_hook_strcasestr",
+ "__sanitizer_weak_hook_strcmp",
+ "__sanitizer_weak_hook_strncasecmp",
+ "__sanitizer_weak_hook_strncmp",
+ "__sanitizer_weak_hook_strstr",
+ "bcmp",
+ "jazzer_initialize_native_hooks",
+ "memcmp",
+ "memmem",
+ "strcasecmp",
+ "strcasestr",
+ "strcmp",
+ "strncasecmp",
+ "strncmp",
+ "strstr",
+]
+
+cc_library(
+ name = "native_fuzzer_hooks",
+ srcs = ["native_fuzzer_hooks.c"],
+ linkopts = select({
+ "@platforms//os:linux": [
+ "-Wl,--export-dynamic-symbol=" + symbol
+ for symbol in DYNAMIC_SYMBOLS_TO_EXPORT
+ ] + [
+ "-ldl",
+ ],
+ "@platforms//os:macos": [
+ "-rdynamic",
+ "-ldl",
+ ],
+ "//conditions:default": [],
+ }),
+ target_compatible_with = SKIP_ON_WINDOWS,
+ deps = ["//driver/src/main/native/com/code_intelligence/jazzer/driver:sanitizer_hooks_with_pc"],
alwayslink = True,
)
cc_binary(
name = "jazzer_driver",
- srcs = [
- # Defines symbols otherwise defined by sanitizers to prevent linker
- # errors and print JVM stack traces.
- # Windows-compatible replacement for __attribute__((weak)).
- "sanitizer_symbols.cpp",
- ],
data = [
- "//agent:jazzer_agent_deploy.jar",
+ "//agent:jazzer_agent_deploy",
],
linkopts = select({
- "@platforms//os:windows": [],
- "//conditions:default": [
- "-rdynamic",
- ],
- }) + select({
"//:clang_on_linux": ["-fuse-ld=lld"],
"//conditions:default": [],
}),
linkstatic = True,
visibility = ["//visibility:public"],
- deps = [":driver_lib"],
+ deps = [":jazzer_main"],
)
alias(
@@ -140,10 +113,9 @@ alias(
cc_binary(
name = "jazzer_driver_asan",
data = [
- "//agent:jazzer_agent_deploy.jar",
+ "//agent:jazzer_agent_deploy",
],
- linkopts = [
- ] + select({
+ linkopts = select({
"@platforms//os:windows": [
# Sanitizer runtimes have to be linked manually on Windows:
# https://devblogs.microsoft.com/cppblog/addresssanitizer-asan-for-windows-with-msvc/
@@ -153,7 +125,6 @@ cc_binary(
"//conditions:default": [
"-fsanitize=address",
"-static-libsan",
- "-rdynamic",
],
}) + select({
"//:clang_on_linux": ["-fuse-ld=lld"],
@@ -161,21 +132,23 @@ cc_binary(
}),
linkstatic = True,
visibility = ["//visibility:public"],
- deps = [":driver_lib"] + select({
+ deps = [":jazzer_main"] + select({
# There is no static ASan runtime on macOS, so link to the dynamic
# runtime library if on macOS and using the toolchain.
":using_toolchain_on_osx": ["@llvm_toolchain_llvm//:macos_asan_dynamic"],
"//conditions:default": [],
+ }) + select({
+ "@platforms//os:windows": [],
+ "//conditions:default": [":native_fuzzer_hooks"],
}),
)
cc_binary(
name = "jazzer_driver_ubsan",
data = [
- "//agent:jazzer_agent_deploy.jar",
+ "//agent:jazzer_agent_deploy",
],
- linkopts = [
- ] + select({
+ linkopts = select({
"@platforms//os:windows": [
# Sanitizer runtimes have to be linked manually on Windows:
# https://devblogs.microsoft.com/cppblog/addresssanitizer-asan-for-windows-with-msvc/
@@ -187,7 +160,6 @@ cc_binary(
# Link UBSan statically, even on macOS.
"-static-libsan",
"-fsanitize-link-c++-runtime",
- "-rdynamic",
],
}) + select({
"//:clang_on_linux": ["-fuse-ld=lld"],
@@ -195,32 +167,26 @@ cc_binary(
}),
linkstatic = True,
visibility = ["//visibility:public"],
- deps = [":driver_lib"],
+ deps = [
+ ":jazzer_main",
+ ] + select({
+ "@platforms//os:windows": [],
+ "//conditions:default": [":native_fuzzer_hooks"],
+ }),
)
cc_test(
name = "jvm_tooling_test",
size = "small",
- srcs = [
- "jvm_tooling_test.cpp",
- "sanitizer_symbols_for_tests.cpp",
- ],
+ srcs = ["jvm_tooling_test.cpp"],
args = [
"--cp=jazzer/$(rootpath //driver/testdata:fuzz_target_mocks_deploy.jar)",
],
data = [
- "//agent:jazzer_agent_deploy.jar",
+ "//agent:jazzer_agent_deploy",
"//driver/testdata:fuzz_target_mocks_deploy.jar",
],
includes = ["."],
- linkopts = select({
- "@platforms//os:windows": [],
- "//conditions:default": [
- # Needs to export symbols dynamically for JNI_OnLoad_jazzer_initialize
- # to be found by the JVM.
- "-rdynamic",
- ],
- }),
deps = [
":jvm_tooling_lib",
":test_main",
@@ -233,21 +199,23 @@ cc_test(
cc_test(
name = "fuzzed_data_provider_test",
size = "medium",
- srcs = [
- "fuzzed_data_provider_test.cpp",
- "sanitizer_symbols_for_tests.cpp",
- ],
+ srcs = ["fuzzed_data_provider_test.cpp"],
args = [
"--cp=jazzer/$(rootpath //driver/testdata:fuzz_target_mocks_deploy.jar)",
],
+ copts = select({
+ "@platforms//os:windows": ["/std:c++17"],
+ "//conditions:default": ["-std=c++17"],
+ }),
data = [
- "//agent:jazzer_agent_deploy.jar",
+ "//agent:jazzer_agent_deploy",
"//driver/testdata:fuzz_target_mocks_deploy.jar",
],
includes = ["."],
deps = [
":jvm_tooling_lib",
":test_main",
+ "//driver/src/main/native/com/code_intelligence/jazzer/driver:fuzzed_data_provider",
"@bazel_tools//tools/cpp/runfiles",
"@googletest//:gtest",
"@jazzer_com_github_gflags_gflags//:gflags",
@@ -259,6 +227,7 @@ cc_library(
srcs = ["test_main.cpp"],
linkstatic = True,
deps = [
+ "@fmeum_rules_jni//jni:libjvm",
"@googletest//:gtest",
"@jazzer_com_github_gflags_gflags//:gflags",
],