aboutsummaryrefslogtreecommitdiffstats
path: root/library/cpp/yt/backtrace
diff options
context:
space:
mode:
authormax42 <max42@yandex-team.com>2023-06-30 11:13:34 +0300
committermax42 <max42@yandex-team.com>2023-06-30 11:13:34 +0300
commit3e1899838408bbad47622007aa382bc8a2b01f87 (patch)
tree0f21c1e6add187ddb6c3ccc048a7d640ce03fb87 /library/cpp/yt/backtrace
parent5463eb3f5e72a86f858a3d27c886470a724ede34 (diff)
downloadydb-3e1899838408bbad47622007aa382bc8a2b01f87.tar.gz
Revert "YT-19324: move YT provider to ydb/library/yql"
This reverts commit ca272f12fdd0e8d5c3e957fc87939148f1caaf72, reversing changes made to 49f8acfc8b0b5c0071b804423bcf53fda26c7c12.
Diffstat (limited to 'library/cpp/yt/backtrace')
-rw-r--r--library/cpp/yt/backtrace/backtrace-inl.h36
-rw-r--r--library/cpp/yt/backtrace/backtrace.cpp18
-rw-r--r--library/cpp/yt/backtrace/backtrace.h45
-rw-r--r--library/cpp/yt/backtrace/cursors/dummy/dummy_cursor.cpp22
-rw-r--r--library/cpp/yt/backtrace/cursors/dummy/dummy_cursor.h17
-rw-r--r--library/cpp/yt/backtrace/cursors/dummy/ya.make9
-rw-r--r--library/cpp/yt/backtrace/cursors/frame_pointer/frame_pointer_cursor.cpp146
-rw-r--r--library/cpp/yt/backtrace/cursors/frame_pointer/frame_pointer_cursor.h39
-rw-r--r--library/cpp/yt/backtrace/cursors/frame_pointer/ya.make9
-rw-r--r--library/cpp/yt/backtrace/cursors/interop/interop.cpp102
-rw-r--r--library/cpp/yt/backtrace/cursors/interop/interop.h25
-rw-r--r--library/cpp/yt/backtrace/cursors/interop/ya.make14
-rw-r--r--library/cpp/yt/backtrace/cursors/libunwind/libunwind_cursor.cpp70
-rw-r--r--library/cpp/yt/backtrace/cursors/libunwind/libunwind_cursor.h33
-rw-r--r--library/cpp/yt/backtrace/cursors/libunwind/ya.make13
-rw-r--r--library/cpp/yt/backtrace/symbolizers/dummy/dummy_symbolizer.cpp25
-rw-r--r--library/cpp/yt/backtrace/symbolizers/dwarf/dwarf_symbolizer.cpp64
-rw-r--r--library/cpp/yt/backtrace/symbolizers/dwarf/ya.make18
-rw-r--r--library/cpp/yt/backtrace/symbolizers/dynload/dynload_symbolizer.cpp113
-rw-r--r--library/cpp/yt/backtrace/unittests/backtrace_ut.cpp61
-rw-r--r--library/cpp/yt/backtrace/unittests/ya.make20
-rw-r--r--library/cpp/yt/backtrace/ya.make44
22 files changed, 0 insertions, 943 deletions
diff --git a/library/cpp/yt/backtrace/backtrace-inl.h b/library/cpp/yt/backtrace/backtrace-inl.h
deleted file mode 100644
index b78eeffd75f..00000000000
--- a/library/cpp/yt/backtrace/backtrace-inl.h
+++ /dev/null
@@ -1,36 +0,0 @@
-#pragma once
-#ifndef BACKTRACE_INL_H_
-#error "Direct inclusion of this file is not allowed, include backtrace.h"
-// For the sake of sane code completion.
-#include "backtrace.h"
-#endif
-
-#include <util/system/compiler.h>
-
-namespace NYT::NBacktrace {
-
-////////////////////////////////////////////////////////////////////////////////
-
-template <class TCursor>
-Y_NO_INLINE TBacktrace GetBacktrace(
- TCursor* cursor,
- TBacktraceBuffer buffer,
- int framesToSkip)
-{
- // Account for the current frame.
- ++framesToSkip;
- size_t frameCount = 0;
- while (frameCount < buffer.size() && !cursor->IsFinished()) {
- if (framesToSkip > 0) {
- --framesToSkip;
- } else {
- buffer[frameCount++] = cursor->GetCurrentIP();
- }
- cursor->MoveNext();
- }
- return {buffer.begin(), frameCount};
-}
-
-////////////////////////////////////////////////////////////////////////////////
-
-} // namespace NYT::NBacktrace
diff --git a/library/cpp/yt/backtrace/backtrace.cpp b/library/cpp/yt/backtrace/backtrace.cpp
deleted file mode 100644
index 153a0a5dd02..00000000000
--- a/library/cpp/yt/backtrace/backtrace.cpp
+++ /dev/null
@@ -1,18 +0,0 @@
-#include "backtrace.h"
-
-namespace NYT::NBacktrace {
-
-////////////////////////////////////////////////////////////////////////////////
-
-TString SymbolizeBacktrace(TBacktrace backtrace)
-{
- TString result;
- SymbolizeBacktrace(
- backtrace,
- [&] (TStringBuf str) { result += str; });
- return result;
-}
-
-////////////////////////////////////////////////////////////////////////////////
-
-} // namespace NYT::NBacktrace
diff --git a/library/cpp/yt/backtrace/backtrace.h b/library/cpp/yt/backtrace/backtrace.h
deleted file mode 100644
index ea70d9558ca..00000000000
--- a/library/cpp/yt/backtrace/backtrace.h
+++ /dev/null
@@ -1,45 +0,0 @@
-#pragma once
-
-#include <library/cpp/yt/memory/range.h>
-
-namespace NYT::NBacktrace {
-
-////////////////////////////////////////////////////////////////////////////////
-
-using TBacktrace = TRange<const void*>;
-using TBacktraceBuffer = TMutableRange<const void*>;
-
-//! Obtains a backtrace via a given cursor.
-/*!
- * \param buffer is the buffer where the backtrace is written to
- * \param framesToSkip is the number of top frames to skip
- * \returns the portion of #buffer that has actually been filled
- */
-template <class TCursor>
-TBacktrace GetBacktrace(
- TCursor* cursor,
- TBacktraceBuffer buffer,
- int framesToSkip);
-
-//! Symbolizes a backtrace invoking a given callback for each frame.
-/*!
- * \param backtrace Backtrace to symbolize
- * \param frameCallback Callback to invoke per each frame
- */
-void SymbolizeBacktrace(
- TBacktrace backtrace,
- const std::function<void(TStringBuf)>& frameCallback);
-
-//! Symbolizes a backtrace to a string.
-/*!
- * \param backtrace Backtrace to symbolize
- */
-TString SymbolizeBacktrace(TBacktrace backtrace);
-
-////////////////////////////////////////////////////////////////////////////////
-
-} // namespace NYT::NBacktrace
-
-#define BACKTRACE_INL_H_
-#include "backtrace-inl.h"
-#undef BACKTRACE_INL_H_
diff --git a/library/cpp/yt/backtrace/cursors/dummy/dummy_cursor.cpp b/library/cpp/yt/backtrace/cursors/dummy/dummy_cursor.cpp
deleted file mode 100644
index ea6e0bc08e7..00000000000
--- a/library/cpp/yt/backtrace/cursors/dummy/dummy_cursor.cpp
+++ /dev/null
@@ -1,22 +0,0 @@
-#include "dummy_cursor.h"
-
-namespace NYT::NBacktrace {
-
-////////////////////////////////////////////////////////////////////////////////
-
-bool TDummyCursor::IsFinished() const
-{
- return true;
-}
-
-const void* TDummyCursor::GetCurrentIP() const
-{
- return nullptr;
-}
-
-void TDummyCursor::MoveNext()
-{ }
-
-////////////////////////////////////////////////////////////////////////////////
-
-} // namespace NYT::NBacktrace
diff --git a/library/cpp/yt/backtrace/cursors/dummy/dummy_cursor.h b/library/cpp/yt/backtrace/cursors/dummy/dummy_cursor.h
deleted file mode 100644
index b47d7d2aba8..00000000000
--- a/library/cpp/yt/backtrace/cursors/dummy/dummy_cursor.h
+++ /dev/null
@@ -1,17 +0,0 @@
-#pragma once
-
-namespace NYT::NBacktrace {
-
-////////////////////////////////////////////////////////////////////////////////
-
-class TDummyCursor
-{
-public:
- bool IsFinished() const;
- const void* GetCurrentIP() const;
- void MoveNext();
-};
-
-////////////////////////////////////////////////////////////////////////////////
-
-} // namespace NYT::NBacktrace
diff --git a/library/cpp/yt/backtrace/cursors/dummy/ya.make b/library/cpp/yt/backtrace/cursors/dummy/ya.make
deleted file mode 100644
index 49fd7be050c..00000000000
--- a/library/cpp/yt/backtrace/cursors/dummy/ya.make
+++ /dev/null
@@ -1,9 +0,0 @@
-LIBRARY()
-
-INCLUDE(${ARCADIA_ROOT}/library/cpp/yt/ya_cpp.make.inc)
-
-SRCS(
- dummy_cursor.cpp
-)
-
-END()
diff --git a/library/cpp/yt/backtrace/cursors/frame_pointer/frame_pointer_cursor.cpp b/library/cpp/yt/backtrace/cursors/frame_pointer/frame_pointer_cursor.cpp
deleted file mode 100644
index 290d30c3cec..00000000000
--- a/library/cpp/yt/backtrace/cursors/frame_pointer/frame_pointer_cursor.cpp
+++ /dev/null
@@ -1,146 +0,0 @@
-#include "frame_pointer_cursor.h"
-
-#include <util/generic/size_literals.h>
-
-#include <array>
-
-namespace NYT::NBacktrace {
-
-////////////////////////////////////////////////////////////////////////////////
-
-TFramePointerCursor::TFramePointerCursor(
- TSafeMemoryReader* memoryReader,
- const TFramePointerCursorContext& context)
- : MemoryReader_(memoryReader)
- , Rip_(reinterpret_cast<const void*>(context.Rip))
- , Rbp_(reinterpret_cast<const void*>(context.Rbp))
- , StartRsp_(reinterpret_cast<const void*>(context.Rsp))
-{ }
-
-bool TFramePointerCursor::IsFinished() const
-{
- return Finished_;
-}
-
-const void* TFramePointerCursor::GetCurrentIP() const
-{
- return Rip_;
-}
-
-void TFramePointerCursor::MoveNext()
-{
- if (Finished_) {
- return;
- }
-
- auto add = [] (auto ptr, auto delta) {
- return reinterpret_cast<void*>(reinterpret_cast<intptr_t>(ptr) + delta);
- };
-
- auto checkPtr = [&] (auto ptr) {
- ui8 data;
- return MemoryReader_->Read(ptr, &data);
- };
-
- // We try unwinding stack manually by following frame pointers.
- //
- // We assume that stack does not span more than 4mb.
-
- if (First_) {
- First_ = false;
-
- // For the first frame there are three special cases where naive
- // unwinding would skip the caller frame.
- //
- // 1) Right after call instruction, rbp points to frame of a caller.
- // 2) Right after "push rbp" instruction.
- // 3) Right before ret instruction, rbp points to frame of a caller.
- //
- // We read current instruction and try to detect such cases.
- //
- // 55 push %rbp
- // 48 89 e5 mov %rsp, %rbp
- // c3 retq
-
- std::array<ui8, 3> data;
- if (!MemoryReader_->Read(Rip_, &data)) {
- Finished_ = true;
- return;
- }
-
- if (data[0] == 0xc3 || data[0] == 0x55) {
- void* savedRip;
- if (!MemoryReader_->Read(StartRsp_, &savedRip)) {
- Finished_ = true;
- return;
- }
-
- // Avoid infinite loop.
- if (Rip_ == savedRip) {
- Finished_ = true;
- return;
- }
-
- // Detect garbage pointer.
- if (!checkPtr(savedRip)) {
- Finished_ = true;
- return;
- }
-
- Rip_ = savedRip;
- return;
- }
-
- if (data[0] == 0x48 && data[1] == 0x89 && data[2] == 0xe5) {
- void* savedRip;
- if (!MemoryReader_->Read(add(StartRsp_, 8), &savedRip)) {
- Finished_ = true;
- return;
- }
-
- // Avoid infinite loop.
- if (Rip_ == savedRip) {
- Finished_ = true;
- return;
- }
-
- // Detect garbage pointer.
- if (!checkPtr(savedRip)) {
- Finished_ = true;
- return;
- }
-
- Rip_ = savedRip;
- return;
- }
- }
-
- const void* savedRbp;
- const void* savedRip;
- if (!MemoryReader_->Read(Rbp_, &savedRbp) || !MemoryReader_->Read(add(Rbp_, 8), &savedRip)) {
- Finished_ = true;
- return;
- }
-
- if (!checkPtr(savedRbp)) {
- Finished_ = true;
- return;
- }
-
- if (!checkPtr(savedRip)) {
- Finished_ = true;
- return;
- }
-
- if (savedRbp < StartRsp_ || savedRbp > add(StartRsp_, 4_MB)) {
- Finished_ = true;
- return;
- }
-
- Rip_ = savedRip;
- Rbp_ = savedRbp;
-}
-
-////////////////////////////////////////////////////////////////////////////////
-
-} // namespace NYT::NBacktrace
diff --git a/library/cpp/yt/backtrace/cursors/frame_pointer/frame_pointer_cursor.h b/library/cpp/yt/backtrace/cursors/frame_pointer/frame_pointer_cursor.h
deleted file mode 100644
index 7a6eaf431b8..00000000000
--- a/library/cpp/yt/backtrace/cursors/frame_pointer/frame_pointer_cursor.h
+++ /dev/null
@@ -1,39 +0,0 @@
-#pragma once
-
-#include <library/cpp/yt/memory/safe_memory_reader.h>
-
-namespace NYT::NBacktrace {
-
-////////////////////////////////////////////////////////////////////////////////
-
-struct TFramePointerCursorContext
-{
- ui64 Rip;
- ui64 Rsp;
- ui64 Rbp;
-};
-
-class TFramePointerCursor
-{
-public:
- TFramePointerCursor(
- TSafeMemoryReader* memoryReader,
- const TFramePointerCursorContext& context);
-
- bool IsFinished() const;
- const void* GetCurrentIP() const;
- void MoveNext();
-
-private:
- TSafeMemoryReader* MemoryReader_;
- bool Finished_ = false;
- bool First_ = true;
-
- const void* Rip_ = nullptr;
- const void* Rbp_ = nullptr;
- const void* StartRsp_ = nullptr;
-};
-
-////////////////////////////////////////////////////////////////////////////////
-
-} // namespace NYT::NBacktrace
diff --git a/library/cpp/yt/backtrace/cursors/frame_pointer/ya.make b/library/cpp/yt/backtrace/cursors/frame_pointer/ya.make
deleted file mode 100644
index cb85d70315c..00000000000
--- a/library/cpp/yt/backtrace/cursors/frame_pointer/ya.make
+++ /dev/null
@@ -1,9 +0,0 @@
-LIBRARY()
-
-INCLUDE(${ARCADIA_ROOT}/library/cpp/yt/ya_cpp.make.inc)
-
-SRCS(
- frame_pointer_cursor.cpp
-)
-
-END()
diff --git a/library/cpp/yt/backtrace/cursors/interop/interop.cpp b/library/cpp/yt/backtrace/cursors/interop/interop.cpp
deleted file mode 100644
index b4e6cfbe6ed..00000000000
--- a/library/cpp/yt/backtrace/cursors/interop/interop.cpp
+++ /dev/null
@@ -1,102 +0,0 @@
-#include "interop.h"
-
-namespace NYT::NBacktrace {
-
-////////////////////////////////////////////////////////////////////////////////
-
-TFramePointerCursorContext FramePointerCursorContextFromUcontext(const ucontext_t& ucontext)
-{
-#if defined(_linux_)
- return {
- .Rip = static_cast<ui64>(ucontext.uc_mcontext.gregs[REG_RIP]),
- .Rsp = static_cast<ui64>(ucontext.uc_mcontext.gregs[REG_RSP]),
- .Rbp = static_cast<ui64>(ucontext.uc_mcontext.gregs[REG_RBP]),
- };
-#elif defined(_darwin_)
- return {
- .Rip = static_cast<ui64>(ucontext.uc_mcontext->__ss.__rip),
- .Rsp = static_cast<ui64>(ucontext.uc_mcontext->__ss.__rsp),
- .Rbp = static_cast<ui64>(ucontext.uc_mcontext->__ss.__rbp),
- };
-#else
- #error Unsupported platform
-#endif
-}
-
-std::optional<unw_context_t> TrySynthesizeLibunwindContextFromMachineContext(
- const TContMachineContext& machineContext)
-{
- unw_context_t unwindContext;
- if (unw_getcontext(&unwindContext) != 0) {
- return {};
- }
-
- // Some dirty hacks follow.
- struct TUnwindContextRegisters
- {
- ui64 Rax;
- ui64 Rbx;
- ui64 Rcx;
- ui64 Rdx;
- ui64 Rdi;
- ui64 Rsi;
- ui64 Rbp;
- ui64 Rsp;
- ui64 R8;
- ui64 R9;
- ui64 R10;
- ui64 R11;
- ui64 R12;
- ui64 R13;
- ui64 R14;
- ui64 R15;
- ui64 Rip;
- ui64 Rflags;
- ui64 CS;
- ui64 FS;
- ui64 GS;
- };
-
- struct TMachineContextRegisters
- {
- ui64 Rbx;
- ui64 Rbp;
- ui64 R12;
- ui64 R13;
- ui64 R14;
- ui64 R15;
- ui64 Rsp;
- ui64 Rip;
- };
-
- static_assert(sizeof(TContMachineContext) >= sizeof(TMachineContextRegisters));
- static_assert(sizeof(unw_context_t) >= sizeof(TUnwindContextRegisters));
- const auto* machineContextRegisters = reinterpret_cast<const TMachineContextRegisters*>(&machineContext);
- auto* unwindContextRegisters = reinterpret_cast<TUnwindContextRegisters*>(&unwindContext);
- #define XX(register) unwindContextRegisters->register = machineContextRegisters->register;
- XX(Rbx)
- XX(Rbp)
- XX(R12)
- XX(R13)
- XX(R14)
- XX(R15)
- XX(Rsp)
- XX(Rip)
- #undef XX
- return unwindContext;
-}
-
-TFramePointerCursorContext FramePointerCursorContextFromLibunwindCursor(
- const unw_cursor_t& cursor)
-{
- TFramePointerCursorContext context{};
- auto& mutableCursor = const_cast<unw_cursor_t&>(cursor);
- YT_VERIFY(unw_get_reg(&mutableCursor, UNW_REG_IP, &context.Rip) == 0);
- YT_VERIFY(unw_get_reg(&mutableCursor, UNW_X86_64_RSP, &context.Rsp) == 0);
- YT_VERIFY(unw_get_reg(&mutableCursor, UNW_X86_64_RBP, &context.Rbp) == 0);
- return context;
-}
-
-////////////////////////////////////////////////////////////////////////////////
-
-} // namespace NYT::NBacktrace
diff --git a/library/cpp/yt/backtrace/cursors/interop/interop.h b/library/cpp/yt/backtrace/cursors/interop/interop.h
deleted file mode 100644
index 62e7177107c..00000000000
--- a/library/cpp/yt/backtrace/cursors/interop/interop.h
+++ /dev/null
@@ -1,25 +0,0 @@
-#pragma once
-
-#include <library/cpp/yt/backtrace/cursors/frame_pointer/frame_pointer_cursor.h>
-
-#include <contrib/libs/libunwind/include/libunwind.h>
-
-#include <util/system/context.h>
-
-#include <optional>
-
-namespace NYT::NBacktrace {
-
-////////////////////////////////////////////////////////////////////////////////
-
-TFramePointerCursorContext FramePointerCursorContextFromUcontext(const ucontext_t& ucontext);
-
-std::optional<unw_context_t> TrySynthesizeLibunwindContextFromMachineContext(
- const TContMachineContext& machineContext);
-
-TFramePointerCursorContext FramePointerCursorContextFromLibunwindCursor(
- const unw_cursor_t& uwCursor);
-
-////////////////////////////////////////////////////////////////////////////////
-
-} // namespace NYT::NBacktrace
diff --git a/library/cpp/yt/backtrace/cursors/interop/ya.make b/library/cpp/yt/backtrace/cursors/interop/ya.make
deleted file mode 100644
index 6637f6a9b4a..00000000000
--- a/library/cpp/yt/backtrace/cursors/interop/ya.make
+++ /dev/null
@@ -1,14 +0,0 @@
-LIBRARY()
-
-INCLUDE(${ARCADIA_ROOT}/library/cpp/yt/ya_cpp.make.inc)
-
-SRCS(
- interop.cpp
-)
-
-PEERDIR(
- library/cpp/yt/backtrace/cursors/frame_pointer
- contrib/libs/libunwind
-)
-
-END()
diff --git a/library/cpp/yt/backtrace/cursors/libunwind/libunwind_cursor.cpp b/library/cpp/yt/backtrace/cursors/libunwind/libunwind_cursor.cpp
deleted file mode 100644
index f814753034a..00000000000
--- a/library/cpp/yt/backtrace/cursors/libunwind/libunwind_cursor.cpp
+++ /dev/null
@@ -1,70 +0,0 @@
-#include "libunwind_cursor.h"
-
-namespace NYT::NBacktrace {
-
-////////////////////////////////////////////////////////////////////////////////
-
-TLibunwindCursor::TLibunwindCursor()
-{
- if (unw_getcontext(&Context_) != 0) {
- Finished_ = true;
- return;
- }
-
- Initialize();
-}
-
-TLibunwindCursor::TLibunwindCursor(const unw_context_t& context)
- : Context_(context)
-{
- Initialize();
-}
-
-void TLibunwindCursor::Initialize()
-{
- if (unw_init_local(&Cursor_, &Context_) != 0) {
- Finished_ = true;
- return;
- }
-
- ReadCurrentIP();
-}
-
-bool TLibunwindCursor::IsFinished() const
-{
- return Finished_;
-}
-
-const void* TLibunwindCursor::GetCurrentIP() const
-{
- return CurrentIP_;
-}
-
-void TLibunwindCursor::MoveNext()
-{
- if (Finished_) {
- return;
- }
-
- if (unw_step(&Cursor_) <= 0) {
- Finished_ = true;
- return;
- }
-
- ReadCurrentIP();
-}
-
-void TLibunwindCursor::ReadCurrentIP()
-{
- unw_word_t ip = 0;
- if (unw_get_reg(&Cursor_, UNW_REG_IP, &ip) < 0) {
- Finished_ = true;
- return;
- }
-
- CurrentIP_ = reinterpret_cast<const void*>(ip);
-}
-
-////////////////////////////////////////////////////////////////////////////////
-
-} // namespace NYT::NBacktrace
diff --git a/library/cpp/yt/backtrace/cursors/libunwind/libunwind_cursor.h b/library/cpp/yt/backtrace/cursors/libunwind/libunwind_cursor.h
deleted file mode 100644
index 08b01d07ef7..00000000000
--- a/library/cpp/yt/backtrace/cursors/libunwind/libunwind_cursor.h
+++ /dev/null
@@ -1,33 +0,0 @@
-#pragma once
-
-#include <contrib/libs/libunwind/include/libunwind.h>
-
-namespace NYT::NBacktrace {
-
-////////////////////////////////////////////////////////////////////////////////
-
-class TLibunwindCursor
-{
-public:
- TLibunwindCursor();
- explicit TLibunwindCursor(const unw_context_t& context);
-
- bool IsFinished() const;
- const void* GetCurrentIP() const;
- void MoveNext();
-
-private:
- unw_context_t Context_;
- unw_cursor_t Cursor_;
-
- bool Finished_ = false;
-
- const void* CurrentIP_ = nullptr;
-
- void Initialize();
- void ReadCurrentIP();
-};
-
-////////////////////////////////////////////////////////////////////////////////
-
-} // namespace NYT::NBacktrace
diff --git a/library/cpp/yt/backtrace/cursors/libunwind/ya.make b/library/cpp/yt/backtrace/cursors/libunwind/ya.make
deleted file mode 100644
index 8f3a8c5284c..00000000000
--- a/library/cpp/yt/backtrace/cursors/libunwind/ya.make
+++ /dev/null
@@ -1,13 +0,0 @@
-LIBRARY()
-
-INCLUDE(${ARCADIA_ROOT}/library/cpp/yt/ya_cpp.make.inc)
-
-SRCS(
- libunwind_cursor.cpp
-)
-
-PEERDIR(
- contrib/libs/libunwind
-)
-
-END()
diff --git a/library/cpp/yt/backtrace/symbolizers/dummy/dummy_symbolizer.cpp b/library/cpp/yt/backtrace/symbolizers/dummy/dummy_symbolizer.cpp
deleted file mode 100644
index 19cb41e7951..00000000000
--- a/library/cpp/yt/backtrace/symbolizers/dummy/dummy_symbolizer.cpp
+++ /dev/null
@@ -1,25 +0,0 @@
-#include <library/cpp/yt/backtrace/backtrace.h>
-
-#include <library/cpp/yt/string/raw_formatter.h>
-
-namespace NYT::NBacktrace {
-
-////////////////////////////////////////////////////////////////////////////////
-
-void SymbolizeBacktrace(
- TBacktrace backtrace,
- const std::function<void(TStringBuf)>& frameCallback)
-{
- for (int index = 0; index < std::ssize(backtrace); ++index) {
- TRawFormatter<1024> formatter;
- formatter.AppendNumber(index + 1, 10, 2);
- formatter.AppendString(". ");
- formatter.AppendNumberAsHexWithPadding(reinterpret_cast<uintptr_t>(backtrace[index]), 12);
- formatter.AppendString("\n");
- frameCallback(formatter.GetBuffer());
- }
-}
-
-////////////////////////////////////////////////////////////////////////////////
-
-} // namespace NYT::NBacktrace
diff --git a/library/cpp/yt/backtrace/symbolizers/dwarf/dwarf_symbolizer.cpp b/library/cpp/yt/backtrace/symbolizers/dwarf/dwarf_symbolizer.cpp
deleted file mode 100644
index f5d02aaa332..00000000000
--- a/library/cpp/yt/backtrace/symbolizers/dwarf/dwarf_symbolizer.cpp
+++ /dev/null
@@ -1,64 +0,0 @@
-#include <library/cpp/yt/backtrace/backtrace.h>
-
-#include <library/cpp/dwarf_backtrace/backtrace.h>
-
-#include <library/cpp/yt/string/raw_formatter.h>
-
-namespace NYT::NBacktrace {
-
-////////////////////////////////////////////////////////////////////////////////
-
-void SymbolizeBacktrace(
- TBacktrace backtrace,
- const std::function<void(TStringBuf)>& frameCallback)
-{
- auto error = NDwarf::ResolveBacktrace({backtrace.begin(), backtrace.size()}, [&] (const NDwarf::TLineInfo& info) {
- TRawFormatter<1024> formatter;
- formatter.AppendNumber(info.Index + 1, 10, 2);
- formatter.AppendString(". ");
- formatter.AppendString("0x");
- const int width = (sizeof(void*) == 8 ? 12 : 8);
- // 12 for x86_64 because higher bits are always zeroed.
- formatter.AppendNumber(info.Address, 16, width, '0');
- formatter.AppendString(" in ");
- formatter.AppendString(info.FunctionName);
- const int bytesToAppendEstimate = 4 + info.FileName.Size() + 1 + 4 /* who cares about line numbers > 9999 */ + 1;
- if (formatter.GetBytesRemaining() < bytesToAppendEstimate) {
- const int offset = formatter.GetBytesRemaining() - bytesToAppendEstimate;
- if (formatter.GetBytesWritten() + offset >= 0) {
- formatter.Advance(offset);
- }
- }
- formatter.AppendString(" at ");
- formatter.AppendString(info.FileName);
- formatter.AppendChar(':');
- formatter.AppendNumber(info.Line);
- if (formatter.GetBytesRemaining() == 0) {
- formatter.Revert(1);
- }
- formatter.AppendString("\n");
- frameCallback(formatter.GetBuffer());
- // Call the callback exactly `frameCount` times,
- // even if there are inline functions and one frame resolved to several lines.
- // It needs for case when caller uses `frameCount` less than 100 for pretty formatting.
- if (info.Index + 1 == std::ssize(backtrace)) {
- return NDwarf::EResolving::Break;
- }
- return NDwarf::EResolving::Continue;
- });
- if (error) {
- TRawFormatter<1024> formatter;
- formatter.AppendString("*** Error symbolizing backtrace via Dwarf\n");
- formatter.AppendString("*** Code: ");
- formatter.AppendNumber(error->Code);
- formatter.AppendString("\n");
- formatter.AppendString("*** Message: ");
- formatter.AppendString(error->Message);
- formatter.AppendString("\n");
- frameCallback(formatter.GetBuffer());
- }
-}
-
-////////////////////////////////////////////////////////////////////////////////
-
-} // namespace NYT::NBacktrace
diff --git a/library/cpp/yt/backtrace/symbolizers/dwarf/ya.make b/library/cpp/yt/backtrace/symbolizers/dwarf/ya.make
deleted file mode 100644
index bffeb676d8b..00000000000
--- a/library/cpp/yt/backtrace/symbolizers/dwarf/ya.make
+++ /dev/null
@@ -1,18 +0,0 @@
-LIBRARY()
-
-SRCS(
- GLOBAL dwarf_symbolizer.cpp
-)
-
-PEERDIR(
- library/cpp/dwarf_backtrace
- library/cpp/yt/backtrace
-)
-
-END()
-
-IF (BUILD_TYPE == "DEBUG" OR BUILD_TYPE == "PROFILE")
- RECURSE_FOR_TESTS(
- unittests
- )
-ENDIF()
diff --git a/library/cpp/yt/backtrace/symbolizers/dynload/dynload_symbolizer.cpp b/library/cpp/yt/backtrace/symbolizers/dynload/dynload_symbolizer.cpp
deleted file mode 100644
index 37ebda8e488..00000000000
--- a/library/cpp/yt/backtrace/symbolizers/dynload/dynload_symbolizer.cpp
+++ /dev/null
@@ -1,113 +0,0 @@
-#include <library/cpp/yt/backtrace/backtrace.h>
-
-#include <library/cpp/yt/string/raw_formatter.h>
-
-#include <util/system/compiler.h>
-
-#include <dlfcn.h>
-#include <cxxabi.h>
-
-namespace NYT::NBacktrace {
-
-////////////////////////////////////////////////////////////////////////////////
-
-namespace {
-
-int GetSymbolInfo(const void* pc, char* buffer, int length)
-{
- TBaseFormatter formatter(buffer, length);
-
- // See http://www.codesourcery.com/cxx-abi/abi.html#mangling
- // And, yes, dladdr() is not async signal safe. We can substitute it
- // with hand-written symbolization code from google-glog in case of any trouble.
- Dl_info info;
- if (!dladdr(pc, &info)) {
- return 0;
- }
-
- /*
- * typedef struct {
- * const char *dli_fname; // Pathname of shared object that
- * // contains address
- * void *dli_fbase; // Address at which shared object
- * // is loaded
- * const char *dli_sname; // Name of nearest symbol with address
- * // lower than addr
- * void *dli_saddr; // Exact address of symbol named
- * // in dli_sname
- * } Dl_info;
- *
- * If no symbol matching addr could be found, then dli_sname and dli_saddr are set to NULL.
- */
-
- if (info.dli_sname && info.dli_saddr) {
- formatter.AppendString("<");
- int demangleStatus = 0;
-
- if (info.dli_sname[0] == '_' && info.dli_sname[1] == 'Z') {
- // This is also not async signal safe.
- // But (ta-dah!) we can replace it with symbolization code from google-glob.
- char* demangledName = abi::__cxa_demangle(info.dli_sname, 0, 0, &demangleStatus);
- if (demangleStatus == 0) {
- formatter.AppendString(demangledName);
- } else {
- formatter.AppendString(info.dli_sname);
- }
- free(demangledName);
- } else {
- formatter.AppendString(info.dli_sname);
- }
- formatter.AppendString("+");
- formatter.AppendNumber((char*)pc - (char*)info.dli_saddr);
- formatter.AppendString(">");
- formatter.AppendString(" ");
- }
-
- if (info.dli_fname && info.dli_fbase) {
- formatter.AppendString("(");
- formatter.AppendString(info.dli_fname);
- formatter.AppendString("+");
- formatter.AppendNumber((char*)pc - (char*)info.dli_fbase);
- formatter.AppendString(")");
- }
- return formatter.GetBytesWritten();
-}
-
-void DumpStackFrameInfo(TBaseFormatter* formatter, const void* pc)
-{
- formatter->AppendString("@ ");
- const int width = (sizeof(void*) == 8 ? 12 : 8) + 2;
- // +2 for "0x"; 12 for x86_64 because higher bits are always zeroed.
- formatter->AppendNumberAsHexWithPadding(reinterpret_cast<uintptr_t>(pc), width);
- formatter->AppendString(" ");
- // Get the symbol from the previous address of PC,
- // because PC may be in the next function.
- formatter->Advance(GetSymbolInfo(
- reinterpret_cast<const char*>(pc) - 1,
- formatter->GetCursor(),
- formatter->GetBytesRemaining()));
- if (formatter->GetBytesRemaining() == 0) {
- formatter->Revert(1);
- }
- formatter->AppendString("\n");
-}
-
-} // namespace
-
-Y_WEAK void SymbolizeBacktrace(
- TBacktrace backtrace,
- const std::function<void(TStringBuf)>& frameCallback)
-{
- for (int i = 0; i < std::ssize(backtrace); ++i) {
- TRawFormatter<1024> formatter;
- formatter.Reset();
- formatter.AppendNumber(i + 1, 10, 2);
- formatter.AppendString(". ");
- DumpStackFrameInfo(&formatter, backtrace[i]);
- frameCallback(formatter.GetBuffer());
- }
-}
-
-////////////////////////////////////////////////////////////////////////////////
-
-} // namespace NYT::NBacktrace
diff --git a/library/cpp/yt/backtrace/unittests/backtrace_ut.cpp b/library/cpp/yt/backtrace/unittests/backtrace_ut.cpp
deleted file mode 100644
index 5992b692773..00000000000
--- a/library/cpp/yt/backtrace/unittests/backtrace_ut.cpp
+++ /dev/null
@@ -1,61 +0,0 @@
-#include <gtest/gtest.h>
-
-#include <gmock/gmock.h>
-
-#include <library/cpp/yt/memory/safe_memory_reader.h>
-
-#include <library/cpp/yt/backtrace/cursors/frame_pointer/frame_pointer_cursor.h>
-
-#include <library/cpp/yt/backtrace/cursors/interop/interop.h>
-
-#include <util/system/compiler.h>
-
-#include <contrib/libs/libunwind/include/libunwind.h>
-
-namespace NYT::NBacktrace {
-namespace {
-
-////////////////////////////////////////////////////////////////////////////////
-
-template <int Depth, class TFn>
-Y_NO_INLINE void RunInDeepStack(TFn cb)
-{
- if constexpr (Depth == 0) {
- cb();
- } else {
- std::vector<int> touchMem;
- touchMem.push_back(0);
-
- RunInDeepStack<Depth-1>(cb);
-
- DoNotOptimizeAway(touchMem);
- }
-}
-
-TEST(TFramePointerCursor, FramePointerCursor)
-{
- std::vector<const void*> backtrace;
- RunInDeepStack<64>([&] {
- unw_context_t unwContext;
- ASSERT_TRUE(unw_getcontext(&unwContext) == 0);
-
- unw_cursor_t unwCursor;
- ASSERT_TRUE(unw_init_local(&unwCursor, &unwContext) == 0);
-
- TSafeMemoryReader reader;
- auto fpCursorContext = NBacktrace::FramePointerCursorContextFromLibunwindCursor(unwCursor);
- NBacktrace::TFramePointerCursor fpCursor(&reader, fpCursorContext);
-
- while (!fpCursor.IsFinished()) {
- backtrace.push_back(fpCursor.GetCurrentIP());
- fpCursor.MoveNext();
- }
- });
-
- ASSERT_THAT(backtrace, testing::SizeIs(testing::Ge(64u)));
-}
-
-////////////////////////////////////////////////////////////////////////////////
-
-} // namespace
-} // namespace NYT::NBacktrace
diff --git a/library/cpp/yt/backtrace/unittests/ya.make b/library/cpp/yt/backtrace/unittests/ya.make
deleted file mode 100644
index 89e55a95ef4..00000000000
--- a/library/cpp/yt/backtrace/unittests/ya.make
+++ /dev/null
@@ -1,20 +0,0 @@
-GTEST()
-
-INCLUDE(${ARCADIA_ROOT}/library/cpp/yt/ya_cpp.make.inc)
-
-PEERDIR(
- library/cpp/testing/gtest
- library/cpp/yt/backtrace
- library/cpp/yt/backtrace/cursors/interop
- library/cpp/yt/backtrace/cursors/frame_pointer
- library/cpp/yt/backtrace/cursors/libunwind
- library/cpp/yt/memory
-)
-
-IF (BUILD_TYPE == "DEBUG" OR BUILD_TYPE == "PROFILE")
- SRCS(
- backtrace_ut.cpp
- )
-ENDIF()
-
-END()
diff --git a/library/cpp/yt/backtrace/ya.make b/library/cpp/yt/backtrace/ya.make
deleted file mode 100644
index d294082e06a..00000000000
--- a/library/cpp/yt/backtrace/ya.make
+++ /dev/null
@@ -1,44 +0,0 @@
-LIBRARY()
-
-INCLUDE(${ARCADIA_ROOT}/library/cpp/yt/ya_cpp.make.inc)
-
-SRCS(
- backtrace.cpp
-)
-
-IF (OS_WINDOWS)
- SRCS(
- symbolizers/dummy/dummy_symbolizer.cpp
- )
-ELSE()
- SRCS(
- symbolizers/dynload/dynload_symbolizer.cpp
- )
-ENDIF()
-
-PEERDIR(
- library/cpp/yt/string
-)
-
-END()
-
-RECURSE(
- cursors/dummy
- cursors/frame_pointer
-)
-
-IF (NOT OS_WINDOWS)
- RECURSE(
- cursors/libunwind
- )
-ENDIF()
-
-IF (OS_LINUX)
- RECURSE(
- symbolizers/dwarf
- )
-
- RECURSE_FOR_TESTS(
- unittests
- )
-ENDIF()