diff options
Diffstat (limited to 'lldb/source/Utility/SharingPtr.cpp')
-rw-r--r-- | lldb/source/Utility/SharingPtr.cpp | 134 |
1 files changed, 0 insertions, 134 deletions
diff --git a/lldb/source/Utility/SharingPtr.cpp b/lldb/source/Utility/SharingPtr.cpp deleted file mode 100644 index 45f2a773758b..000000000000 --- a/lldb/source/Utility/SharingPtr.cpp +++ /dev/null @@ -1,134 +0,0 @@ -//===---------------------SharingPtr.cpp ------------------------*- C++ -*-===// -// -// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. -// See https://llvm.org/LICENSE.txt for license information. -// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception -// -//===----------------------------------------------------------------------===// - -#include "lldb/Utility/SharingPtr.h" - -#if defined(ENABLE_SP_LOGGING) - -// If ENABLE_SP_LOGGING is defined, then log all shared pointer assignments and -// allow them to be queried using a pointer by a call to: -#include <assert.h> -#include <execinfo.h> - -#include "llvm/ADT/STLExtras.h" - -#include <map> -#include <mutex> -#include <vector> - -class Backtrace { -public: - Backtrace(); - - ~Backtrace(); - - void GetFrames(); - - void Dump() const; - -private: - void *m_sp_this; - std::vector<void *> m_frames; -}; - -Backtrace::Backtrace() : m_frames() {} - -Backtrace::~Backtrace() {} - -void Backtrace::GetFrames() { - void *frames[1024]; - const int count = ::backtrace(frames, llvm::array_lengthof(frames)); - if (count > 2) - m_frames.assign(frames + 2, frames + (count - 2)); -} - -void Backtrace::Dump() const { - if (!m_frames.empty()) - ::backtrace_symbols_fd(m_frames.data(), m_frames.size(), STDOUT_FILENO); - write(STDOUT_FILENO, "\n\n", 2); -} - -extern "C" void track_sp(void *sp_this, void *ptr, long use_count) { - typedef std::pair<void *, Backtrace> PtrBacktracePair; - typedef std::map<void *, PtrBacktracePair> PtrToBacktraceMap; - static std::mutex g_mutex; - std::lock_guard<std::mutex> guard(g_mutex); - static PtrToBacktraceMap g_map; - - if (sp_this) { - printf("sp(%p) -> %p %lu\n", sp_this, ptr, use_count); - - if (ptr) { - Backtrace bt; - bt.GetFrames(); - g_map[sp_this] = std::make_pair(ptr, bt); - } else { - g_map.erase(sp_this); - } - } else { - if (ptr) - printf("Searching for shared pointers that are tracking %p: ", ptr); - else - printf("Dump all live shared pointres: "); - - uint32_t matches = 0; - PtrToBacktraceMap::iterator pos, end = g_map.end(); - for (pos = g_map.begin(); pos != end; ++pos) { - if (ptr == NULL || pos->second.first == ptr) { - ++matches; - printf("\nsp(%p): %p\n", pos->first, pos->second.first); - pos->second.second.Dump(); - } - } - if (matches == 0) { - printf("none.\n"); - } - } -} -// Put dump_sp_refs in the lldb namespace to it gets through our exports lists -// filter in the LLDB.framework or lldb.so -namespace lldb { - -void dump_sp_refs(void *ptr) { - // Use a specially crafted call to "track_sp" which will dump info on all - // live shared pointers that reference "ptr" - track_sp(NULL, ptr, 0); -} -} - -#endif - -namespace lldb_private { - -namespace imp { - -shared_count::~shared_count() {} - -void shared_count::add_shared() { -#ifdef _MSC_VER - _InterlockedIncrement(&shared_owners_); -#else - ++shared_owners_; -#endif -} - -void shared_count::release_shared() { -#ifdef _MSC_VER - if (_InterlockedDecrement(&shared_owners_) == -1) -#else - if (--shared_owners_ == -1) -#endif - { - on_zero_shared(); - delete this; - } -} - -} // imp - -} // namespace lldb |