brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.9 KiB · cdc3b09 Raw
93 lines · c
1//===-- HistoryThread.h -----------------------------------------*- C++ -*-===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8 9#ifndef LLDB_SOURCE_PLUGINS_PROCESS_UTILITY_HISTORYTHREAD_H10#define LLDB_SOURCE_PLUGINS_PROCESS_UTILITY_HISTORYTHREAD_H11 12#include <mutex>13 14#include "lldb/Core/UserSettingsController.h"15#include "lldb/Target/ExecutionContextScope.h"16#include "lldb/Target/StackFrameList.h"17#include "lldb/Target/Thread.h"18#include "lldb/Utility/Broadcaster.h"19#include "lldb/Utility/Event.h"20#include "lldb/Utility/UserID.h"21#include "lldb/lldb-private.h"22 23namespace lldb_private {24 25/// \class HistoryThread HistoryThread.h "HistoryThread.h"26/// A thread object representing a backtrace from a previous point in the27/// process execution28///29/// This subclass of Thread is used to provide a backtrace from earlier in30/// process execution.  It is given a backtrace list of pcs (return or call31/// addresses) and it will create stack frames for them.32 33class HistoryThread : public lldb_private::Thread {34public:35  HistoryThread(lldb_private::Process &process, lldb::tid_t tid,36                std::vector<lldb::addr_t> pcs,37                HistoryPCType pc_type = HistoryPCType::Returns);38 39  ~HistoryThread() override;40 41  lldb::RegisterContextSP GetRegisterContext() override;42 43  lldb::RegisterContextSP44  CreateRegisterContextForFrame(StackFrame *frame) override;45 46  void RefreshStateAfterStop() override {}47 48  bool CalculateStopInfo() override { return false; }49 50  void SetExtendedBacktraceToken(uint64_t token) override {51    m_extended_unwind_token = token;52  }53 54  uint64_t GetExtendedBacktraceToken() override {55    return m_extended_unwind_token;56  }57 58  const char *GetQueueName() override { return m_queue_name.c_str(); }59 60  void SetQueueName(const char *name) override { m_queue_name = name; }61 62  lldb::queue_id_t GetQueueID() override { return m_queue_id; }63 64  void SetQueueID(lldb::queue_id_t queue) override { m_queue_id = queue; }65 66  const char *GetThreadName() { return m_thread_name.c_str(); }67 68  uint32_t GetExtendedBacktraceOriginatingIndexID() override;69 70  void SetThreadName(const char *name) { m_thread_name = name; }71 72  const char *GetName() override { return m_thread_name.c_str(); }73 74  void SetName(const char *name) override { m_thread_name = name; }75 76protected:77  virtual lldb::StackFrameListSP GetStackFrameList();78 79  mutable std::mutex m_framelist_mutex;80  lldb::StackFrameListSP m_framelist;81  std::vector<lldb::addr_t> m_pcs;82 83  uint64_t m_extended_unwind_token;84  std::string m_queue_name;85  std::string m_thread_name;86  lldb::tid_t m_originating_unique_thread_id;87  lldb::queue_id_t m_queue_id;88};89 90} // namespace lldb_private91 92#endif // LLDB_SOURCE_PLUGINS_PROCESS_UTILITY_HISTORYTHREAD_H93