1*3cab2bb3Spatrick #include <atomic> 2*3cab2bb3Spatrick #include <xray/xray_interface.h> 3*3cab2bb3Spatrick 4*3cab2bb3Spatrick namespace __xray { 5*3cab2bb3Spatrick 6*3cab2bb3Spatrick extern std::atomic<void (*)(int32_t, XRayEntryType)> XRayPatchedFunction; 7*3cab2bb3Spatrick 8*3cab2bb3Spatrick // Implement this in C++ instead of assembly, to avoid dealing with ToC by hand. CallXRayPatchedFunction(int32_t FuncId,XRayEntryType Type)9*3cab2bb3Spatrickvoid CallXRayPatchedFunction(int32_t FuncId, XRayEntryType Type) { 10*3cab2bb3Spatrick auto fptr = __xray::XRayPatchedFunction.load(); 11*3cab2bb3Spatrick if (fptr != nullptr) 12*3cab2bb3Spatrick (*fptr)(FuncId, Type); 13*3cab2bb3Spatrick } 14*3cab2bb3Spatrick 15*3cab2bb3Spatrick } // namespace __xray 16