@@ -3,19 +3,17 @@ set(LIBFUZZER_SOURCES
3
3
FuzzerDataFlowTrace.cpp
4
4
FuzzerDriver.cpp
5
5
FuzzerExtFunctionsDlsym.cpp
6
- FuzzerExtFunctionsDlsymWin.cpp
7
6
FuzzerExtFunctionsWeak.cpp
7
+ FuzzerExtFunctionsWindows.cpp
8
8
FuzzerExtraCounters.cpp
9
+ FuzzerFork.cpp
9
10
FuzzerIO.cpp
10
11
FuzzerIOPosix.cpp
11
12
FuzzerIOWindows.cpp
12
13
FuzzerLoop.cpp
13
14
FuzzerMerge.cpp
14
15
FuzzerMutate.cpp
15
16
FuzzerSHA1.cpp
16
- FuzzerShmemFuchsia.cpp
17
- FuzzerShmemPosix.cpp
18
- FuzzerShmemWindows.cpp
19
17
FuzzerTracePC.cpp
20
18
FuzzerUtil.cpp
21
19
FuzzerUtilDarwin.cpp
@@ -25,6 +23,8 @@ set(LIBFUZZER_SOURCES
25
23
FuzzerUtilWindows.cpp)
26
24
27
25
set (LIBFUZZER_HEADERS
26
+ FuzzerBuiltins.h
27
+ FuzzerBuiltinsMsvc.h
28
28
FuzzerCommand.h
29
29
FuzzerCorpus.h
30
30
FuzzerDataFlowTrace.h
@@ -33,6 +33,7 @@ set(LIBFUZZER_HEADERS
33
33
FuzzerExtFunctions.def
34
34
FuzzerExtFunctions.h
35
35
FuzzerFlags.def
36
+ FuzzerFork.h
36
37
FuzzerIO.h
37
38
FuzzerInterface.h
38
39
FuzzerInternal.h
@@ -41,7 +42,6 @@ set(LIBFUZZER_HEADERS
41
42
FuzzerOptions.h
42
43
FuzzerRandom.h
43
44
FuzzerSHA1.h
44
- FuzzerShmem.h
45
45
FuzzerTracePC.h
46
46
FuzzerUtil.h
47
47
FuzzerValueBitMap.h)
@@ -55,7 +55,9 @@ CHECK_CXX_SOURCE_COMPILES("
55
55
56
56
set (LIBFUZZER_CFLAGS ${SANITIZER_COMMON_CFLAGS} )
57
57
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)
59
61
list (APPEND LIBFUZZER_CFLAGS -nostdinc++ -D_LIBCPP_ABI_VERSION=Fuzzer)
60
62
# Remove -stdlib= which is unused when passing -nostdinc++.
61
63
string (REGEX REPLACE "-stdlib=[a-zA-Z+]*" "" CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} )
@@ -69,12 +71,21 @@ if (CMAKE_CXX_FLAGS MATCHES "fsanitize-coverage")
69
71
list (APPEND LIBFUZZER_CFLAGS -fno-sanitize-coverage=trace-pc-guard,edge,trace-cmp,indirect-calls,8bit-counters)
70
72
endif ()
71
73
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 ()
74
83
endif ()
75
84
76
85
set (FUZZER_SUPPORTED_OS ${SANITIZER_COMMON_SUPPORTED_OS} )
77
86
87
+ add_compiler_rt_component(fuzzer)
88
+
78
89
add_compiler_rt_object_libraries(RTfuzzer
79
90
OS ${FUZZER_SUPPORTED_OS}
80
91
ARCHS ${FUZZER_SUPPORTED_ARCH}
@@ -106,12 +117,19 @@ add_compiler_rt_runtime(clang_rt.fuzzer_no_main
106
117
CFLAGS ${LIBFUZZER_CFLAGS}
107
118
PARENT_TARGET fuzzer)
108
119
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)
110
123
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 ()
111
129
set (cxx_${arch} _merge_dir "${CMAKE_CURRENT_BINARY_DIR} /cxx_${arch} _merge.dir" )
112
130
file (MAKE_DIRECTORY ${cxx_${arch} _merge_dir})
113
131
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
115
133
COMMAND ${CMAKE_OBJCOPY} --localize-hidden ${name} .o
116
134
COMMAND ${CMAKE_COMMAND} -E remove "$<TARGET_LINKER_FILE:clang_rt.${name} -${arch} >"
117
135
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)
124
142
set (LIBCXX_${arch} _PREFIX ${CMAKE_CURRENT_BINARY_DIR} /libcxx_fuzzer_${arch} )
125
143
add_custom_libcxx(libcxx_fuzzer_${arch} ${LIBCXX_${arch} _PREFIX}
126
144
CFLAGS ${TARGET_CFLAGS}
127
- -D_LIBCPP_ABI_VERSION=Fuzzer
128
- -D_LIBCPP_DISABLE_VISIBILITY_ANNOTATIONS=1
129
- -fvisibility=hidden
130
145
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)
134
147
target_compile_options (RTfuzzer.${arch} PRIVATE -isystem ${LIBCXX_${arch} _PREFIX}/include /c++/v1)
135
148
add_dependencies (RTfuzzer.${arch} libcxx_fuzzer_${arch} -build )
136
149
target_compile_options (RTfuzzer_main.${arch} PRIVATE -isystem ${LIBCXX_${arch} _PREFIX}/include /c++/v1)
0 commit comments