@@ -10,6 +10,10 @@ set(XRAY_SOURCES
1010 xray_utils.cpp
1111 )
1212
13+ set (XRAY_DSO_SOURCES
14+ xray_dso_init.cpp
15+ )
16+
1317# Implementation files for all XRay modes.
1418set (XRAY_FDR_MODE_SOURCES
1519 xray_fdr_flags.cpp
@@ -33,6 +37,11 @@ set(x86_64_SOURCES
3337 xray_trampoline_x86_64.S
3438 )
3539
40+ set (x86_64_DSO_SOURCES
41+ xray_trampoline_x86_64.S
42+ )
43+
44+
3645set (arm_SOURCES
3746 xray_arm.cpp
3847 xray_trampoline_arm.S
@@ -128,10 +137,12 @@ set(XRAY_IMPL_HEADERS
128137# consumption by tests.
129138set (XRAY_ALL_SOURCE_FILES
130139 ${XRAY_SOURCES}
140+ ${XRAY_DSO_SOURCES}
131141 ${XRAY_FDR_MODE_SOURCES}
132142 ${XRAY_BASIC_MODE_SOURCES}
133143 ${XRAY_PROFILING_MODE_SOURCES}
134144 ${x86_64_SOURCES}
145+ ${x86_64_DSO_SOURCES}
135146 ${arm_SOURCES}
136147 ${armhf_SOURCES}
137148 ${hexagon_SOURCES}
@@ -162,6 +173,9 @@ set(XRAY_CFLAGS
162173 ${COMPILER_RT_CXX_CFLAGS} )
163174set (XRAY_COMMON_DEFINITIONS SANITIZER_COMMON_NO_REDEFINE_BUILTINS XRAY_HAS_EXCEPTIONS=1)
164175
176+ # DSO trampolines need to be compiled with GOT addressing
177+ set (XRAY_COMMON_DEFINITIONS_DSO ${XRAY_COMMON_DEFINITIONS} XRAY_PIC)
178+
165179# Too many existing bugs, needs cleanup.
166180append_list_if(COMPILER_RT_HAS_WNO_FORMAT -Wno-format XRAY_CFLAGS)
167181
@@ -201,7 +215,16 @@ if (APPLE)
201215 CFLAGS ${XRAY_CFLAGS}
202216 DEFS ${XRAY_COMMON_DEFINITIONS}
203217 DEPS ${XRAY_DEPS} )
218+ add_compiler_rt_object_libraries(RTXrayDSO
219+ OS ${XRAY_SUPPORTED_OS}
220+ ARCHS ${XRAY_DSO_SUPPORTED_ARCH}
221+ SOURCES ${XRAY_DSO_SOURCES}
222+ ADDITIONAL_HEADERS ${XRAY_IMPL_HEADERS}
223+ CFLAGS ${XRAY_CFLAGS}
224+ DEFS ${XRAY_COMMON_DEFINITIONS_DSO}
225+ DEPS ${XRAY_DEPS} )
204226 set (XRAY_RTXRAY_ARCH_LIBS "" )
227+ set (XRAY_DSO_RTXRAY_ARCH_LIBS "" )
205228 foreach (arch ${XRAY_SUPPORTED_ARCH} )
206229 if (NOT ${arch} IN_LIST XRAY_SOURCE_ARCHS)
207230 continue ()
@@ -215,6 +238,17 @@ if (APPLE)
215238 DEFS ${XRAY_COMMON_DEFINITIONS}
216239 DEPS ${XRAY_DEPS} )
217240 list (APPEND XRAY_RTXRAY_ARCH_LIBS RTXray_${arch} )
241+ if (${arch} IN_LIST XRAY_DSO_SUPPORTED_ARCH)
242+ add_compiler_rt_object_libraries(RTXrayDSO_${arch}
243+ OS ${XRAY_SUPPORTED_OS}
244+ ARCHS ${XRAY_DSO_SUPPORTED_ARCH}
245+ SOURCES ${${arch} _DSO_SOURCES}
246+ ADDITIONAL_HEADERS ${XRAY_IMPL_HEADERS}
247+ CFLAGS ${XRAY_CFLAGS}
248+ DEFS ${XRAY_COMMON_DEFINITIONS_DSO}
249+ DEPS ${XRAY_DEPS} )
250+ list (APPEND XRAY_DSO_RTXRAY_ARCH_LIBS RTXrayDSO_${arch} )
251+ endif ()
218252 endforeach ()
219253 add_compiler_rt_object_libraries(RTXrayFDR
220254 OS ${XRAY_SUPPORTED_OS}
@@ -252,6 +286,17 @@ if (APPLE)
252286 LINK_FLAGS ${XRAY_LINK_FLAGS} ${WEAK_SYMBOL_LINK_FLAGS}
253287 LINK_LIBS ${XRAY_LINK_LIBS}
254288 PARENT_TARGET xray)
289+ add_compiler_rt_runtime(clang_rt.xray-dso
290+ STATIC
291+ OS ${XRAY_SUPPORTED_OS}
292+ ARCHS ${XRAY_DSO_SUPPORTED_ARCH}
293+ OBJECT_LIBS RTXrayDSO ${XRAY_DSO_RTXRAY_ARCH_LIBS}
294+ CFLAGS ${XRAY_CFLAGS}
295+ DEFS ${XRAY_COMMON_DEFINITIONS}
296+ LINK_FLAGS ${XRAY_LINK_FLAGS} ${WEAK_SYMBOL_LINK_FLAGS}
297+ LINK_LIBS ${XRAY_LINK_LIBS}
298+ PARENT_TARGET xray)
299+
255300 add_compiler_rt_runtime(clang_rt.xray-fdr
256301 STATIC
257302 OS ${XRAY_SUPPORTED_OS}
@@ -346,16 +391,37 @@ else() # not Apple
346391 DEFS ${XRAY_COMMON_DEFINITIONS}
347392 OBJECT_LIBS RTXrayBASIC
348393 PARENT_TARGET xray)
349- # Profiler Mode runtime
350- add_compiler_rt_runtime(clang_rt.xray-profiling
351- STATIC
352- ARCHS ${arch}
353- CFLAGS ${XRAY_CFLAGS}
354- LINK_FLAGS ${XRAY_LINK_FLAGS}
355- LINK_LIBS ${XRAY_LINK_LIBS}
356- DEFS ${XRAY_COMMON_DEFINITIONS}
357- OBJECT_LIBS RTXrayPROFILING
358- PARENT_TARGET xray)
394+ # Profiler Mode runtime
395+ add_compiler_rt_runtime(clang_rt.xray-profiling
396+ STATIC
397+ ARCHS ${arch}
398+ CFLAGS ${XRAY_CFLAGS}
399+ LINK_FLAGS ${XRAY_LINK_FLAGS}
400+ LINK_LIBS ${XRAY_LINK_LIBS}
401+ DEFS ${XRAY_COMMON_DEFINITIONS}
402+ OBJECT_LIBS RTXrayPROFILING
403+ PARENT_TARGET xray)
404+
405+ if (${arch} IN_LIST XRAY_DSO_SUPPORTED_ARCH)
406+ # TODO: Only implemented for X86 at the moment
407+ add_compiler_rt_object_libraries(RTXrayDSO
408+ ARCHS ${arch}
409+ SOURCES ${XRAY_DSO_SOURCES} ${${arch} _DSO_SOURCES}
410+ ADDITIONAL_HEADERS ${XRAY_IMPL_HEADERS}
411+ CFLAGS ${XRAY_CFLAGS}
412+ DEFS ${XRAY_COMMON_DEFINITIONS_DSO}
413+ DEPS ${XRAY_DEPS} )
414+ # DSO runtime archive
415+ add_compiler_rt_runtime(clang_rt.xray-dso
416+ STATIC
417+ ARCHS ${arch}
418+ CFLAGS ${XRAY_CFLAGS}
419+ LINK_FLAGS ${XRAY_LINK_FLAGS}
420+ LINK_LIBS ${XRAY_LINK_LIBS}
421+ DEFS ${XRAY_COMMON_DEFINITIONS}
422+ OBJECT_LIBS RTXrayDSO
423+ PARENT_TARGET xray)
424+ endif ()
359425 endforeach ()
360426endif () # not Apple
361427
0 commit comments