diff options
Diffstat (limited to 'contrib/compiler-rt/lib/xray/xray_init.cc')
| -rw-r--r-- | contrib/compiler-rt/lib/xray/xray_init.cc | 18 | 
1 files changed, 15 insertions, 3 deletions
diff --git a/contrib/compiler-rt/lib/xray/xray_init.cc b/contrib/compiler-rt/lib/xray/xray_init.cc index b4e069795195..b0922aa8e379 100644 --- a/contrib/compiler-rt/lib/xray/xray_init.cc +++ b/contrib/compiler-rt/lib/xray/xray_init.cc @@ -27,6 +27,15 @@ extern const XRaySledEntry __start_xray_instr_map[] __attribute__((weak));  extern const XRaySledEntry __stop_xray_instr_map[] __attribute__((weak));  extern const XRayFunctionSledIndex __start_xray_fn_idx[] __attribute__((weak));  extern const XRayFunctionSledIndex __stop_xray_fn_idx[] __attribute__((weak)); + +#if SANITIZER_MAC +// HACK: This is a temporary workaround to make XRay build on  +// Darwin, but it will probably not work at runtime. +const XRaySledEntry __start_xray_instr_map[] = {}; +extern const XRaySledEntry __stop_xray_instr_map[] = {}; +extern const XRayFunctionSledIndex __start_xray_fn_idx[] = {}; +extern const XRayFunctionSledIndex __stop_xray_fn_idx[] = {}; +#endif  }  using namespace __xray; @@ -58,6 +67,9 @@ void __xray_init() XRAY_NEVER_INSTRUMENT {    if (atomic_load(&XRayInitialized, memory_order_acquire))      return; +  // XRAY is not compatible with PaX MPROTECT +  CheckMPROTECT(); +    if (!atomic_load(&XRayFlagsInitialized, memory_order_acquire)) {      initializeFlags();      atomic_store(&XRayFlagsInitialized, true, memory_order_release); @@ -97,8 +109,8 @@ __attribute__((section(".preinit_array"),  #else  // If we cannot use the .preinit_array section, we should instead use dynamic  // initialisation. -static bool UNUSED __local_xray_dyninit = [] { +__attribute__ ((constructor (0))) +static void __local_xray_dyninit() {    __xray_init(); -  return true; -}(); +}  #endif  | 
