xref: /freebsd-src/contrib/llvm-project/compiler-rt/lib/xray/xray_trampoline_powerpc64.cpp (revision 5b27928474e6a4103d65b347544705c40c9618fd)
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 Andric void 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