| load("//bazel:cc.bzl", "cc_17_library") |
| |
| 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__", |
| ], |
| deps = [ |
| "@com_google_absl//absl/strings:str_format", |
| "@fmeum_rules_jni//jni", |
| ], |
| ) |
| |
| 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": [], |
| }), |
| 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", |
| "@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", |
| ], |
| 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", |
| ], |
| 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"], |
| ) |
| |
| alias( |
| name = "using_toolchain_on_osx", |
| actual = select({ |
| "//third_party:uses_toolchain": "@platforms//os:osx", |
| # In order to achieve AND semantics, reference a setting that is known |
| # not to apply. |
| "//conditions:default": "//third_party:uses_toolchain", |
| }), |
| ) |
| |
| cc_binary( |
| name = "jazzer_driver_asan", |
| data = [ |
| "//agent:jazzer_agent_deploy.jar", |
| ], |
| 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/ |
| "/wholearchive:clang_rt.asan-x86_64.lib", |
| "/wholearchive:clang_rt.asan_cxx-x86_64.lib", |
| ], |
| "//conditions:default": [ |
| "-fsanitize=address", |
| "-static-libsan", |
| "-rdynamic", |
| ], |
| }) + select({ |
| "//:clang_on_linux": ["-fuse-ld=lld"], |
| "//conditions:default": [], |
| }), |
| linkstatic = True, |
| visibility = ["//visibility:public"], |
| deps = [":driver_lib"] + 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": [], |
| }), |
| ) |
| |
| cc_binary( |
| name = "jazzer_driver_ubsan", |
| data = [ |
| "//agent:jazzer_agent_deploy.jar", |
| ], |
| 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/ |
| "/wholearchive:clang_rt.ubsan_standalone-x86_64.lib", |
| "/wholearchive:clang_rt.ubsan_standalone_cxx-x86_64.lib", |
| ], |
| "//conditions:default": [ |
| "-fsanitize=undefined", |
| # Link UBSan statically, even on macOS. |
| "-static-libsan", |
| "-fsanitize-link-c++-runtime", |
| "-rdynamic", |
| ], |
| }) + select({ |
| "//:clang_on_linux": ["-fuse-ld=lld"], |
| "//conditions:default": [], |
| }), |
| linkstatic = True, |
| visibility = ["//visibility:public"], |
| deps = [":driver_lib"], |
| ) |
| |
| cc_test( |
| name = "jvm_tooling_test", |
| size = "small", |
| srcs = [ |
| "jvm_tooling_test.cpp", |
| "sanitizer_symbols_for_tests.cpp", |
| ], |
| args = [ |
| "--cp=jazzer/$(rootpath //driver/testdata:fuzz_target_mocks_deploy.jar)", |
| ], |
| data = [ |
| "//agent:jazzer_agent_deploy.jar", |
| "//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", |
| "@bazel_tools//tools/cpp/runfiles", |
| "@googletest//:gtest", |
| "@jazzer_com_github_gflags_gflags//:gflags", |
| ], |
| ) |
| |
| cc_test( |
| name = "fuzzed_data_provider_test", |
| size = "medium", |
| srcs = [ |
| "fuzzed_data_provider_test.cpp", |
| "sanitizer_symbols_for_tests.cpp", |
| ], |
| args = [ |
| "--cp=jazzer/$(rootpath //driver/testdata:fuzz_target_mocks_deploy.jar)", |
| ], |
| data = [ |
| "//agent:jazzer_agent_deploy.jar", |
| "//driver/testdata:fuzz_target_mocks_deploy.jar", |
| ], |
| includes = ["."], |
| deps = [ |
| ":jvm_tooling_lib", |
| ":test_main", |
| "@bazel_tools//tools/cpp/runfiles", |
| "@googletest//:gtest", |
| "@jazzer_com_github_gflags_gflags//:gflags", |
| ], |
| ) |
| |
| cc_library( |
| name = "test_main", |
| srcs = ["test_main.cpp"], |
| linkstatic = True, |
| deps = [ |
| "@googletest//:gtest", |
| "@jazzer_com_github_gflags_gflags//:gflags", |
| ], |
| ) |