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