@@ -93,54 +93,86 @@ add_compiler_rt_object_libraries(RTHwasan_dynamic
9393 CFLAGS ${HWASAN_DYNAMIC_CFLAGS}
9494 DEFS ${HWASAN_DEFINITIONS} )
9595
96+ # Compile a different runtime for x86 aliasing mode.
97+ set (HWASAN_ALIASES_RTL_CFLAGS ${HWASAN_RTL_CFLAGS} )
98+ list (APPEND HWASAN_ALIASES_RTL_CFLAGS -DHWASAN_ALIASING_MODE)
99+ set (HWASAN_ALIASES_DYNAMIC_CFLAGS ${HWASAN_DYNAMIC_CFLAGS} )
100+ list (APPEND HWASAN_ALIASES_DYNAMIC_CFLAGS -DHWASAN_ALIASING_MODE)
101+ add_compiler_rt_object_libraries(RTHwasanAliases
102+ ARCHS ${HWASAN_SUPPORTED_ARCH}
103+ SOURCES ${HWASAN_RTL_SOURCES}
104+ ADDITIONAL_HEADERS ${HWASAN_RTL_HEADERS}
105+ CFLAGS ${HWASAN_ALIASES_RTL_CFLAGS}
106+ DEFS ${HWASAN_DEFINITIONS} )
107+ add_compiler_rt_object_libraries(RTHwasanAliases_dynamic
108+ ARCHS ${HWASAN_SUPPORTED_ARCH}
109+ SOURCES ${HWASAN_RTL_SOURCES} ${HWASAN_RTL_CXX_SOURCES}
110+ ADDITIONAL_HEADERS ${HWASAN_RTL_HEADERS}
111+ CFLAGS ${HWASAN_ALIASES_DYNAMIC_CFLAGS}
112+ DEFS ${HWASAN_DEFINITIONS} )
113+
96114file (WRITE ${CMAKE_CURRENT_BINARY_DIR} /dummy.cpp "" )
97115add_compiler_rt_object_libraries(RTHwasan_dynamic_version_script_dummy
98116 ARCHS ${HWASAN_SUPPORTED_ARCH}
99117 SOURCES ${CMAKE_CURRENT_BINARY_DIR} /dummy.cpp
100118 CFLAGS ${HWASAN_DYNAMIC_CFLAGS}
101119 DEFS ${HWASAN_DEFINITIONS} )
102120
103- foreach (arch ${HWASAN_SUPPORTED_ARCH} )
104- add_compiler_rt_runtime(clang_rt.hwasan
121+ # If use_aliases is TRUE, adds the HWASan runtime built with alias support.
122+ # Otherwise adds the runtime without alias support.
123+ function (add_hwasan_runtimes arch use_aliases)
124+ set (hwasan_object_lib RTHwasan)
125+ set (hwasan_object_dyn_lib RTHwasan_dynamic)
126+ set (hwasan_runtime clang_rt.hwasan)
127+ set (hwasan_rtl_flags ${HWASAN_RTL_CFLAGS} )
128+ set (hwasan_dyn_flags ${HWASAN_DYNAMIC_CFLAGS} )
129+ if (use_aliases)
130+ set (hwasan_object_lib RTHwasanAliases)
131+ set (hwasan_object_dyn_lib RTHwasanAliases_dynamic)
132+ set (hwasan_runtime clang_rt.hwasan_aliases)
133+ set (hwasan_rtl_flags ${HWASAN_ALIASES_RTL_CFLAGS} )
134+ set (hwasan_dyn_flags ${HWASAN_ALIASES_DYNAMIC_CFLAGS} )
135+ endif ()
136+ add_compiler_rt_runtime(${hwasan_runtime}
105137 STATIC
106138 ARCHS ${arch}
107- OBJECT_LIBS RTHwasan
139+ OBJECT_LIBS ${hwasan_object_lib}
108140 RTInterception
109141 RTSanitizerCommon
110142 RTSanitizerCommonLibc
111143 RTSanitizerCommonCoverage
112144 RTSanitizerCommonSymbolizer
113145 RTUbsan
114- CFLAGS ${HWASAN_RTL_CFLAGS }
146+ CFLAGS ${hwasan_rtl_flags }
115147 PARENT_TARGET hwasan)
116- add_compiler_rt_runtime(clang_rt.hwasan_cxx
148+ add_compiler_rt_runtime(${hwasan_runtime} _cxx
117149 STATIC
118150 ARCHS ${arch}
119151 OBJECT_LIBS RTHwasan_cxx
120152 RTUbsan_cxx
121- CFLAGS ${HWASAN_RTL_CFLAGS }
153+ CFLAGS ${hwasan_rtl_flags }
122154 PARENT_TARGET hwasan)
123155
124156 if (UNIX )
125- add_sanitizer_rt_version_list(clang_rt.hwasan -dynamic-${arch}
126- LIBS clang_rt.hwasan -${arch} clang_rt.hwasan_cxx -${arch}
157+ add_sanitizer_rt_version_list(${hwasan_runtime} -dynamic-${arch}
158+ LIBS ${hwasan_runtime} -${arch} ${hwasan_runtime} _cxx -${arch}
127159 EXTRA hwasan.syms.extra)
128160 set (VERSION_SCRIPT_FLAG
129- -Wl,--version -script,${CMAKE_CURRENT_BINARY_DIR} /clang_rt.hwasan -dynamic-${arch} .vers)
161+ -Wl,--version -script,${CMAKE_CURRENT_BINARY_DIR} /${hwasan_runtime} -dynamic-${arch} .vers)
130162 set_property (SOURCE
131163 ${CMAKE_CURRENT_BINARY_DIR} /dummy.cpp
132164 APPEND PROPERTY
133- OBJECT_DEPENDS ${CMAKE_CURRENT_BINARY_DIR} /clang_rt.hwasan -dynamic-${arch} .vers)
165+ OBJECT_DEPENDS ${CMAKE_CURRENT_BINARY_DIR} /${hwasan_runtime} -dynamic-${arch} .vers)
134166 else ()
135167 set (VERSION_SCRIPT_FLAG)
136168 endif ()
137169
138170
139- add_compiler_rt_runtime(clang_rt.hwasan
171+ add_compiler_rt_runtime(${hwasan_runtime}
140172 SHARED
141173 ARCHS ${arch}
142174 OBJECT_LIBS
143- RTHwasan_dynamic
175+ ${hwasan_object_dyn_lib}
144176 RTInterception
145177 RTSanitizerCommon
146178 RTSanitizerCommonLibc
@@ -154,22 +186,29 @@ foreach(arch ${HWASAN_SUPPORTED_ARCH})
154186 # add_dependencies(clang_rt.asan-dynamic-${arch} clang_rt.asan-dynamic-${arch}-version-list)
155187 # generates an order-only dependency in ninja.
156188 RTHwasan_dynamic_version_script_dummy
157- CFLAGS ${HWASAN_DYNAMIC_CFLAGS }
189+ CFLAGS ${hwasan_dyn_flags }
158190 LINK_FLAGS ${HWASAN_DYNAMIC_LINK_FLAGS}
159191 ${VERSION_SCRIPT_FLAG}
160192 LINK_LIBS ${HWASAN_DYNAMIC_LIBS}
161193 DEFS ${ASAN_DYNAMIC_DEFINITIONS}
162194 PARENT_TARGET hwasan)
163195
164196 if (SANITIZER_USE_SYMBOLS)
165- add_sanitizer_rt_symbols(clang_rt.hwasan
197+ add_sanitizer_rt_symbols(${hwasan_runtime}
166198 ARCHS ${arch}
167199 EXTRA hwasan.syms.extra)
168- add_sanitizer_rt_symbols(clang_rt.hwasan_cxx
200+ add_sanitizer_rt_symbols(${hwasan_runtime} _cxx
169201 ARCHS ${arch}
170202 EXTRA hwasan.syms.extra)
171- add_dependencies (hwasan clang_rt.hwasan-${arch} -symbols
172- clang_rt.hwasan_cxx-${arch} -symbols)
203+ add_dependencies (hwasan ${hwasan_runtime} -${arch} -symbols
204+ ${hwasan_runtime} _cxx-${arch} -symbols)
205+ endif ()
206+ endfunction ()
207+
208+ foreach (arch ${HWASAN_SUPPORTED_ARCH} )
209+ add_hwasan_runtimes(${arch} FALSE )
210+ if (${arch} MATCHES "x86_64" )
211+ add_hwasan_runtimes(${arch} TRUE )
173212 endif ()
174213endforeach ()
175214
0 commit comments