diff options
Diffstat (limited to 'driver/BUILD.bazel')
-rw-r--r-- | driver/BUILD.bazel | 213 |
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", ], |