udf_support.cpp 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. #define BUILD_UDF
  2. #include <util/system/backtrace.h>
  3. #if defined(_win_) || defined(_darwin_)
  4. #include <yql/essentials/public/udf/udf_registrator.h>
  5. #include <exception>
  6. static NYql::NUdf::TStaticSymbols Symbols;
  7. extern "C" void* UdfAllocate(ui64 size) {
  8. return Symbols.UdfAllocateFunc(size);
  9. }
  10. extern "C" void UdfFree(const void* mem) {
  11. return Symbols.UdfFreeFunc(mem);
  12. }
  13. extern "C" [[noreturn]] void UdfTerminate(const char* message) {
  14. Symbols.UdfTerminate(message);
  15. std::terminate();
  16. }
  17. extern "C" void UdfRegisterObject(::NYql::NUdf::TBoxedValue* object) {
  18. return Symbols.UdfRegisterObject(object);
  19. }
  20. extern "C" void UdfUnregisterObject(::NYql::NUdf::TBoxedValue* object) {
  21. return Symbols.UdfUnregisterObject(object);
  22. }
  23. #if UDF_ABI_COMPATIBILITY_VERSION_CURRENT >= UDF_ABI_COMPATIBILITY_VERSION(2, 8)
  24. extern "C" void* UdfAllocateWithSize(ui64 size) {
  25. return Symbols.UdfAllocateWithSizeFunc(size);
  26. }
  27. extern "C" void UdfFreeWithSize(const void* mem, ui64 size) {
  28. return Symbols.UdfFreeWithSizeFunc(mem, size);
  29. }
  30. #endif
  31. #if UDF_ABI_COMPATIBILITY_VERSION_CURRENT >= UDF_ABI_COMPATIBILITY_VERSION(2, 37)
  32. extern "C" void* UdfArrowAllocate(ui64 size) {
  33. return Symbols.UdfArrowAllocateFunc(size);
  34. }
  35. extern "C" void* UdfArrowReallocate(const void* mem, ui64 prevSize, ui64 size) {
  36. return Symbols.UdfArrowReallocateFunc(mem, prevSize, size);
  37. }
  38. extern "C" void UdfArrowFree(const void* mem, ui64 size) {
  39. return Symbols.UdfArrowFreeFunc(mem, size);
  40. }
  41. #endif
  42. extern "C" void BindSymbols(const NYql::NUdf::TStaticSymbols& symbols) {
  43. Symbols = symbols;
  44. }
  45. #endif
  46. namespace NYql {
  47. namespace NUdf {
  48. typedef void(*TBackTraceCallback)();
  49. static TBackTraceCallback BackTraceCallback;
  50. static void UdfBackTraceFn(IOutputStream*, void* const*, size_t) {
  51. BackTraceCallback();
  52. }
  53. void SetBackTraceCallbackImpl(TBackTraceCallback callback) {
  54. BackTraceCallback = callback;
  55. SetFormatBackTraceFn(UdfBackTraceFn);
  56. }
  57. }
  58. }