130fdc8d8SChris Lattner //===-- MachThreadList.h ----------------------------------------*- C++ -*-===// 230fdc8d8SChris Lattner // 32946cd70SChandler Carruth // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 42946cd70SChandler Carruth // See https://llvm.org/LICENSE.txt for license information. 52946cd70SChandler Carruth // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 630fdc8d8SChris Lattner // 730fdc8d8SChris Lattner //===----------------------------------------------------------------------===// 830fdc8d8SChris Lattner // 930fdc8d8SChris Lattner // Created by Greg Clayton on 6/19/07. 1030fdc8d8SChris Lattner // 1130fdc8d8SChris Lattner //===----------------------------------------------------------------------===// 1230fdc8d8SChris Lattner 13*cdc514e4SJonas Devlieghere #ifndef LLDB_TOOLS_DEBUGSERVER_SOURCE_MACOSX_MACHTHREADLIST_H 14*cdc514e4SJonas Devlieghere #define LLDB_TOOLS_DEBUGSERVER_SOURCE_MACOSX_MACHTHREADLIST_H 1530fdc8d8SChris Lattner 1630fdc8d8SChris Lattner #include "MachThread.h" 17705b1809SJason Molenda #include "ThreadInfo.h" 1830fdc8d8SChris Lattner 1930fdc8d8SChris Lattner class DNBThreadResumeActions; 2030fdc8d8SChris Lattner 21b9c1b51eSKate Stone class MachThreadList { 2230fdc8d8SChris Lattner public: 2330fdc8d8SChris Lattner MachThreadList(); 2430fdc8d8SChris Lattner ~MachThreadList(); 2530fdc8d8SChris Lattner 2630fdc8d8SChris Lattner void Clear(); 2730fdc8d8SChris Lattner void Dump() const; 28b9c1b51eSKate Stone bool GetRegisterValue(nub_thread_t tid, uint32_t set, uint32_t reg, 29b9c1b51eSKate Stone DNBRegisterValue *reg_value) const; 30b9c1b51eSKate Stone bool SetRegisterValue(nub_thread_t tid, uint32_t set, uint32_t reg, 31b9c1b51eSKate Stone const DNBRegisterValue *reg_value) const; 3230fdc8d8SChris Lattner nub_size_t GetRegisterContext(nub_thread_t tid, void *buf, size_t buf_len); 33b9c1b51eSKate Stone nub_size_t SetRegisterContext(nub_thread_t tid, const void *buf, 34b9c1b51eSKate Stone size_t buf_len); 35f74cf86bSGreg Clayton uint32_t SaveRegisterState(nub_thread_t tid); 36f74cf86bSGreg Clayton bool RestoreRegisterState(nub_thread_t tid, uint32_t save_id); 3730fdc8d8SChris Lattner const char *GetThreadInfo(nub_thread_t tid) const; 38b9c1b51eSKate Stone void ProcessWillResume(MachProcess *process, 39b9c1b51eSKate Stone const DNBThreadResumeActions &thread_actions); 4030fdc8d8SChris Lattner uint32_t ProcessDidStop(MachProcess *process); 4130fdc8d8SChris Lattner bool NotifyException(MachException::Data &exc); 4230fdc8d8SChris Lattner bool ShouldStop(bool &step_more); 431c73911dSJason Molenda const char *GetName(nub_thread_t tid); 441c73911dSJason Molenda nub_state_t GetState(nub_thread_t tid); 451c73911dSJason Molenda nub_thread_t SetCurrentThread(nub_thread_t tid); 46705b1809SJason Molenda 47b9c1b51eSKate Stone ThreadInfo::QoS GetRequestedQoS(nub_thread_t tid, nub_addr_t tsd, 48b9c1b51eSKate Stone uint64_t dti_qos_class_index); 49705b1809SJason Molenda nub_addr_t GetPThreadT(nub_thread_t tid); 50705b1809SJason Molenda nub_addr_t GetDispatchQueueT(nub_thread_t tid); 51b9c1b51eSKate Stone nub_addr_t 52b9c1b51eSKate Stone GetTSDAddressForThread(nub_thread_t tid, 53b9c1b51eSKate Stone uint64_t plo_pthread_tsd_base_address_offset, 54b9c1b51eSKate Stone uint64_t plo_pthread_tsd_base_offset, 55b9c1b51eSKate Stone uint64_t plo_pthread_tsd_entry_size); 56705b1809SJason Molenda 57b9c1b51eSKate Stone bool GetThreadStoppedReason(nub_thread_t tid, 58b9c1b51eSKate Stone struct DNBThreadStopInfo *stop_info) const; 5930fdc8d8SChris Lattner void DumpThreadStoppedReason(nub_thread_t tid) const; 60b9c1b51eSKate Stone bool GetIdentifierInfo(nub_thread_t tid, 61b9c1b51eSKate Stone thread_identifier_info_data_t *ident_info); 6230fdc8d8SChris Lattner nub_size_t NumThreads() const; 6330fdc8d8SChris Lattner nub_thread_t ThreadIDAtIndex(nub_size_t idx) const; 6430fdc8d8SChris Lattner nub_thread_t CurrentThreadID(); 6530fdc8d8SChris Lattner void CurrentThread(MachThreadSP &threadSP); 6630fdc8d8SChris Lattner void NotifyBreakpointChanged(const DNBBreakpoint *bp); 6730fdc8d8SChris Lattner uint32_t EnableHardwareBreakpoint(const DNBBreakpoint *bp) const; 6830fdc8d8SChris Lattner bool DisableHardwareBreakpoint(const DNBBreakpoint *bp) const; 6930fdc8d8SChris Lattner uint32_t EnableHardwareWatchpoint(const DNBBreakpoint *wp) const; 7030fdc8d8SChris Lattner bool DisableHardwareWatchpoint(const DNBBreakpoint *wp) const; 7164637205SJohnny Chen uint32_t NumSupportedHardwareWatchpoints() const; 7264637205SJohnny Chen 7358d1c9a4SGreg Clayton uint32_t GetThreadIndexForThreadStoppedWithSignal(const int signo) const; 7430fdc8d8SChris Lattner 75e2d4f0d7SGreg Clayton MachThreadSP GetThreadByID(nub_thread_t tid) const; 763af9ea56SGreg Clayton 771c73911dSJason Molenda MachThreadSP GetThreadByMachPortNumber(thread_t mach_port_number) const; 781c73911dSJason Molenda nub_thread_t GetThreadIDByMachPortNumber(thread_t mach_port_number) const; 7907c446baSJason Molenda thread_t GetMachPortNumberByThreadID(nub_thread_t globally_unique_id) const; 801c73911dSJason Molenda 8130fdc8d8SChris Lattner protected: 8230fdc8d8SChris Lattner typedef std::vector<MachThreadSP> collection; 8330fdc8d8SChris Lattner typedef collection::iterator iterator; 8430fdc8d8SChris Lattner typedef collection::const_iterator const_iterator; 8530fdc8d8SChris Lattner 862981eceeSJonas Devlieghere enum class HardwareBreakpointAction { 872981eceeSJonas Devlieghere EnableWatchpoint, 882981eceeSJonas Devlieghere DisableWatchpoint, 899902c8e3SJonas Devlieghere EnableBreakpoint, 909902c8e3SJonas Devlieghere DisableBreakpoint, 912981eceeSJonas Devlieghere }; 922981eceeSJonas Devlieghere 939902c8e3SJonas Devlieghere uint32_t DoHardwareBreakpointAction(const DNBBreakpoint *bp, 942981eceeSJonas Devlieghere HardwareBreakpointAction action) const; 952981eceeSJonas Devlieghere 96b9c1b51eSKate Stone uint32_t UpdateThreadList(MachProcess *process, bool update, 97b9c1b51eSKate Stone collection *num_threads = NULL); 9830fdc8d8SChris Lattner // const_iterator FindThreadByID (thread_t tid) const; 9930fdc8d8SChris Lattner 10030fdc8d8SChris Lattner collection m_threads; 101e2d4f0d7SGreg Clayton mutable PThreadMutex m_threads_mutex; 10230fdc8d8SChris Lattner MachThreadSP m_current_thread; 103705b1809SJason Molenda bool m_is_64_bit; 10430fdc8d8SChris Lattner }; 10530fdc8d8SChris Lattner 106*cdc514e4SJonas Devlieghere #endif // LLDB_TOOLS_DEBUGSERVER_SOURCE_MACOSX_MACHTHREADLIST_H 107