xref: /openbsd-src/gnu/llvm/compiler-rt/lib/xray/xray_trampoline_powerpc64.cpp (revision 3cab2bb3f667058bece8e38b12449a63a9d73c4b)
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*3cab2bb3Spatrick void 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