@@ -3,19 +3,17 @@ set(LIBFUZZER_SOURCES
33 FuzzerDataFlowTrace.cpp
44 FuzzerDriver.cpp
55 FuzzerExtFunctionsDlsym.cpp
6- FuzzerExtFunctionsDlsymWin.cpp
76 FuzzerExtFunctionsWeak.cpp
7+ FuzzerExtFunctionsWindows.cpp
88 FuzzerExtraCounters.cpp
9+ FuzzerFork.cpp
910 FuzzerIO.cpp
1011 FuzzerIOPosix.cpp
1112 FuzzerIOWindows.cpp
1213 FuzzerLoop.cpp
1314 FuzzerMerge.cpp
1415 FuzzerMutate.cpp
1516 FuzzerSHA1.cpp
16- FuzzerShmemFuchsia.cpp
17- FuzzerShmemPosix.cpp
18- FuzzerShmemWindows.cpp
1917 FuzzerTracePC.cpp
2018 FuzzerUtil.cpp
2119 FuzzerUtilDarwin.cpp
@@ -25,6 +23,8 @@ set(LIBFUZZER_SOURCES
2523 FuzzerUtilWindows.cpp)
2624
2725set (LIBFUZZER_HEADERS
26+ FuzzerBuiltins.h
27+ FuzzerBuiltinsMsvc.h
2828 FuzzerCommand.h
2929 FuzzerCorpus.h
3030 FuzzerDataFlowTrace.h
@@ -33,6 +33,7 @@ set(LIBFUZZER_HEADERS
3333 FuzzerExtFunctions.def
3434 FuzzerExtFunctions.h
3535 FuzzerFlags.def
36+ FuzzerFork.h
3637 FuzzerIO.h
3738 FuzzerInterface.h
3839 FuzzerInternal.h
@@ -41,7 +42,6 @@ set(LIBFUZZER_HEADERS
4142 FuzzerOptions.h
4243 FuzzerRandom.h
4344 FuzzerSHA1.h
44- FuzzerShmem.h
4545 FuzzerTracePC.h
4646 FuzzerUtil.h
4747 FuzzerValueBitMap.h)
@@ -55,7 +55,9 @@ CHECK_CXX_SOURCE_COMPILES("
5555
5656set (LIBFUZZER_CFLAGS ${SANITIZER_COMMON_CFLAGS} )
5757
58- if (OS_NAME MATCHES "Linux|Fuchsia" AND COMPILER_RT_LIBCXX_PATH)
58+ if (OS_NAME MATCHES "Linux|Fuchsia" AND
59+ COMPILER_RT_LIBCXX_PATH AND
60+ COMPILER_RT_LIBCXXABI_PATH)
5961 list (APPEND LIBFUZZER_CFLAGS -nostdinc++ -D_LIBCPP_ABI_VERSION=Fuzzer)
6062 # Remove -stdlib= which is unused when passing -nostdinc++.
6163 string (REGEX REPLACE "-stdlib=[a-zA-Z+]*" "" CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} )
@@ -69,12 +71,21 @@ if (CMAKE_CXX_FLAGS MATCHES "fsanitize-coverage")
6971 list (APPEND LIBFUZZER_CFLAGS -fno-sanitize-coverage=trace-pc-guard,edge,trace-cmp,indirect-calls,8bit-counters)
7072endif ()
7173
72- if (NOT HAS_THREAD_LOCAL)
73- list (APPEND LIBFUZZER_CFLAGS -Dthread_local=__thread)
74+ if (MSVC )
75+ # Silence warnings by turning off exceptions in MSVC headers and avoid an
76+ # error by unecessarily defining thread_local when it isn't even used on
77+ # Windows.
78+ list (APPEND LIBFUZZER_CFLAGS -D_HAS_EXCEPTIONS=0)
79+ else ()
80+ if (NOT HAS_THREAD_LOCAL)
81+ list (APPEND LIBFUZZER_CFLAGS -Dthread_local=__thread)
82+ endif ()
7483endif ()
7584
7685set (FUZZER_SUPPORTED_OS ${SANITIZER_COMMON_SUPPORTED_OS} )
7786
87+ add_compiler_rt_component(fuzzer)
88+
7889add_compiler_rt_object_libraries(RTfuzzer
7990 OS ${FUZZER_SUPPORTED_OS}
8091 ARCHS ${FUZZER_SUPPORTED_ARCH}
@@ -106,12 +117,19 @@ add_compiler_rt_runtime(clang_rt.fuzzer_no_main
106117 CFLAGS ${LIBFUZZER_CFLAGS}
107118 PARENT_TARGET fuzzer)
108119
109- if (OS_NAME MATCHES "Linux|Fuchsia" AND COMPILER_RT_LIBCXX_PATH)
120+ if (OS_NAME MATCHES "Linux|Fuchsia" AND
121+ COMPILER_RT_LIBCXX_PATH AND
122+ COMPILER_RT_LIBCXXABI_PATH)
110123 macro (partially_link_libcxx name dir arch)
124+ if (${arch} MATCHES "i386" )
125+ set (EMULATION_ARGUMENT "-m" "elf_i386" )
126+ else ()
127+ set (EMULATION_ARGUMENT "" )
128+ endif ()
111129 set (cxx_${arch} _merge_dir "${CMAKE_CURRENT_BINARY_DIR} /cxx_${arch} _merge.dir" )
112130 file (MAKE_DIRECTORY ${cxx_${arch} _merge_dir})
113131 add_custom_command (TARGET clang_rt.${name} -${arch} POST_BUILD
114- COMMAND ${CMAKE_LINKER} --whole-archive "$<TARGET_LINKER_FILE:clang_rt.${name} -${arch} >" --no -whole-archive ${dir} /lib/libc++.a -r -o ${name} .o
132+ COMMAND ${CMAKE_LINKER} ${EMULATION_ARGUMENT} --whole-archive "$<TARGET_LINKER_FILE:clang_rt.${name} -${arch} >" --no -whole-archive ${dir} /lib/libc++.a -r -o ${name} .o
115133 COMMAND ${CMAKE_OBJCOPY} --localize-hidden ${name} .o
116134 COMMAND ${CMAKE_COMMAND} -E remove "$<TARGET_LINKER_FILE:clang_rt.${name} -${arch} >"
117135 COMMAND ${CMAKE_AR} qcs "$<TARGET_LINKER_FILE:clang_rt.${name} -${arch} >" ${name} .o
@@ -124,13 +142,8 @@ if(OS_NAME MATCHES "Linux|Fuchsia" AND COMPILER_RT_LIBCXX_PATH)
124142 set (LIBCXX_${arch} _PREFIX ${CMAKE_CURRENT_BINARY_DIR} /libcxx_fuzzer_${arch} )
125143 add_custom_libcxx(libcxx_fuzzer_${arch} ${LIBCXX_${arch} _PREFIX}
126144 CFLAGS ${TARGET_CFLAGS}
127- -D_LIBCPP_ABI_VERSION=Fuzzer
128- -D_LIBCPP_DISABLE_VISIBILITY_ANNOTATIONS=1
129- -fvisibility=hidden
130145 CMAKE_ARGS -DCMAKE_CXX_COMPILER_WORKS=ON
131- -DLIBCXX_ENABLE_EXCEPTIONS=OFF
132- -DLIBCXX_ENABLE_SHARED=OFF
133- -DLIBCXX_CXX_ABI=none)
146+ -DLIBCXX_ABI_NAMESPACE=Fuzzer)
134147 target_compile_options (RTfuzzer.${arch} PRIVATE -isystem ${LIBCXX_${arch} _PREFIX}/include /c++/v1)
135148 add_dependencies (RTfuzzer.${arch} libcxx_fuzzer_${arch} -build )
136149 target_compile_options (RTfuzzer_main.${arch} PRIVATE -isystem ${LIBCXX_${arch} _PREFIX}/include /c++/v1)
0 commit comments