266 lines
7.2 KiB
Python
266 lines
7.2 KiB
Python
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",
|
|
],
|
|
)
|