diff options
Diffstat (limited to 'lldb/source/Plugins/Process/Darwin/NativeThreadListDarwin.h')
-rw-r--r-- | lldb/source/Plugins/Process/Darwin/NativeThreadListDarwin.h | 162 |
1 files changed, 162 insertions, 0 deletions
diff --git a/lldb/source/Plugins/Process/Darwin/NativeThreadListDarwin.h b/lldb/source/Plugins/Process/Darwin/NativeThreadListDarwin.h new file mode 100644 index 00000000000..588013043e1 --- /dev/null +++ b/lldb/source/Plugins/Process/Darwin/NativeThreadListDarwin.h @@ -0,0 +1,162 @@ +//===-- NativeThreadListDarwin.h --------------------------------------*- C++ -*-===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// +// +// Created by Greg Clayton on 6/19/07. +// +//===----------------------------------------------------------------------===// + +#ifndef __NativeThreadListDarwin_h__ +#define __NativeThreadListDarwin_h__ + +#include <memory> +#include <mutex> +#include <vector> + +#include "lldb/lldb-private-forward.h" +#include "lldb/lldb-types.h" + +#include "MachException.h" + +// #include "ThreadInfo.h" + +namespace lldb_private { +namespace process_darwin { + +class NativeBreakpointDarwin; +class NativeProcessDarwin; + +class NativeThreadDarwin; +using NativeThreadDarwinSP = std::shared_ptr<NativeThreadDarwin>; + +class NativeThreadListDarwin +{ +public: + NativeThreadListDarwin(); + ~NativeThreadListDarwin(); + + void + Clear(); + + void + Dump(Stream &stream) const; + + // These methods will be accessed directly from NativeThreadDarwin +#if 0 + bool GetRegisterValue (nub_thread_t tid, uint32_t set, uint32_t reg, DNBRegisterValue *reg_value) const; + bool SetRegisterValue (nub_thread_t tid, uint32_t set, uint32_t reg, const DNBRegisterValue *reg_value) const; + nub_size_t GetRegisterContext (nub_thread_t tid, void *buf, size_t buf_len); + nub_size_t SetRegisterContext (nub_thread_t tid, const void *buf, size_t buf_len); + uint32_t SaveRegisterState (nub_thread_t tid); + bool RestoreRegisterState (nub_thread_t tid, uint32_t save_id); +#endif + + const char * + GetThreadInfo(lldb::tid_t tid) const; + + void + ProcessWillResume(NativeProcessDarwin &process, + const ResumeActionList &thread_actions); + + uint32_t + ProcessDidStop(NativeProcessDarwin &process); + + bool + NotifyException(MachException::Data& exc); + + bool + ShouldStop(bool &step_more); + + // These methods will be accessed directly from NativeThreadDarwin +#if 0 + const char * GetName (nub_thread_t tid); + nub_state_t GetState (nub_thread_t tid); + nub_thread_t SetCurrentThread (nub_thread_t tid); +#endif + + // TODO: figure out if we need to add this to NativeThreadDarwin yet. +#if 0 + ThreadInfo::QoS GetRequestedQoS (nub_thread_t tid, nub_addr_t tsd, uint64_t dti_qos_class_index); + nub_addr_t GetPThreadT (nub_thread_t tid); + nub_addr_t GetDispatchQueueT (nub_thread_t tid); + nub_addr_t GetTSDAddressForThread (nub_thread_t tid, uint64_t plo_pthread_tsd_base_address_offset, uint64_t plo_pthread_tsd_base_offset, uint64_t plo_pthread_tsd_entry_size); +#endif + + // These methods will be accessed directly from NativeThreadDarwin +#if 0 + bool GetThreadStoppedReason (nub_thread_t tid, struct DNBThreadStopInfo *stop_info) const; + void DumpThreadStoppedReason (nub_thread_t tid) const; + bool GetIdentifierInfo (nub_thread_t tid, thread_identifier_info_data_t *ident_info); +#endif + + size_t + GetNumberOfThreads() const; + + lldb::tid_t + ThreadIDAtIndex(size_t idx) const; + + lldb::tid_t + GetCurrentThreadID(); + + NativeThreadDarwinSP + GetCurrentThread(); + + void + NotifyBreakpointChanged(const NativeBreakpointDarwin *bp); + + uint32_t + EnableHardwareBreakpoint(const NativeBreakpointDarwin *bp) const; + + bool + DisableHardwareBreakpoint(const NativeBreakpointDarwin *bp) const; + + uint32_t + EnableHardwareWatchpoint(const NativeBreakpointDarwin *wp) const; + + bool + DisableHardwareWatchpoint(const NativeBreakpointDarwin *wp) const; + + uint32_t + GetNumberOfSupportedHardwareWatchpoints() const; + + size_t + GetThreadIndexForThreadStoppedWithSignal(const int signo) const; + + NativeThreadDarwinSP + GetThreadByID(lldb::tid_t tid) const; + + NativeThreadDarwinSP + GetThreadByMachPortNumber(::thread_t mach_port_number) const; + + lldb::tid_t + GetThreadIDByMachPortNumber(::thread_t mach_port_number) const; + + thread_t + GetMachPortNumberByThreadID(lldb::tid_t globally_unique_id) const; + +protected: + typedef std::vector<NativeThreadDarwinSP> collection; + typedef collection::iterator iterator; + typedef collection::const_iterator const_iterator; + + // Consider having this return an lldb_private::Error. + uint32_t + UpdateThreadList (NativeProcessDarwin &process, bool update, + collection *num_threads = nullptr); + + collection m_threads; + mutable std::recursive_mutex m_threads_mutex; + NativeThreadDarwinSP m_current_thread; + bool m_is_64_bit; +}; + +} // namespace process_darwin +} // namespace lldb_private + +#endif // #ifndef __NativeThreadListDarwin_h__ + |