brintos

brintos / llvm-project-archived public Read only

0
0
Text · 4.2 KiB · 20af84f Raw
107 lines · c
1//===-- MachThreadList.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//  Created by Greg Clayton on 6/19/07.10//11//===----------------------------------------------------------------------===//12 13#ifndef LLDB_TOOLS_DEBUGSERVER_SOURCE_MACOSX_MACHTHREADLIST_H14#define LLDB_TOOLS_DEBUGSERVER_SOURCE_MACOSX_MACHTHREADLIST_H15 16#include "MachThread.h"17#include "ThreadInfo.h"18 19class DNBThreadResumeActions;20 21class MachThreadList {22public:23  MachThreadList();24  ~MachThreadList();25 26  void Clear();27  void Dump() const;28  bool GetRegisterValue(nub_thread_t tid, uint32_t set, uint32_t reg,29                        DNBRegisterValue *reg_value) const;30  bool SetRegisterValue(nub_thread_t tid, uint32_t set, uint32_t reg,31                        const DNBRegisterValue *reg_value) const;32  nub_size_t GetRegisterContext(nub_thread_t tid, void *buf, size_t buf_len);33  nub_size_t SetRegisterContext(nub_thread_t tid, const void *buf,34                                size_t buf_len);35  uint32_t SaveRegisterState(nub_thread_t tid);36  bool RestoreRegisterState(nub_thread_t tid, uint32_t save_id);37  const char *GetThreadInfo(nub_thread_t tid) const;38  void ProcessWillResume(MachProcess *process,39                         const DNBThreadResumeActions &thread_actions);40  uint32_t ProcessDidStop(MachProcess *process);41  bool NotifyException(MachException::Data &exc);42  bool ShouldStop(bool &step_more);43  const char *GetName(nub_thread_t tid);44  nub_state_t GetState(nub_thread_t tid);45  nub_thread_t SetCurrentThread(nub_thread_t tid);46 47  ThreadInfo::QoS GetRequestedQoS(nub_thread_t tid, nub_addr_t tsd,48                                  uint64_t dti_qos_class_index);49  nub_addr_t GetPThreadT(nub_thread_t tid);50  nub_addr_t GetDispatchQueueT(nub_thread_t tid);51  nub_addr_t52  GetTSDAddressForThread(nub_thread_t tid,53                         uint64_t plo_pthread_tsd_base_address_offset,54                         uint64_t plo_pthread_tsd_base_offset,55                         uint64_t plo_pthread_tsd_entry_size);56 57  bool GetThreadStoppedReason(nub_thread_t tid,58                              struct DNBThreadStopInfo *stop_info) const;59  void DumpThreadStoppedReason(nub_thread_t tid) const;60  bool GetIdentifierInfo(nub_thread_t tid,61                         thread_identifier_info_data_t *ident_info);62  nub_size_t NumThreads() const;63  nub_thread_t ThreadIDAtIndex(nub_size_t idx) const;64  nub_thread_t CurrentThreadID();65  void CurrentThread(MachThreadSP &threadSP);66  void NotifyBreakpointChanged(const DNBBreakpoint *bp);67  uint32_t EnableHardwareBreakpoint(const DNBBreakpoint *bp) const;68  bool DisableHardwareBreakpoint(const DNBBreakpoint *bp) const;69  uint32_t EnableHardwareWatchpoint(const DNBBreakpoint *wp) const;70  bool DisableHardwareWatchpoint(const DNBBreakpoint *wp) const;71  uint32_t NumSupportedHardwareWatchpoints() const;72 73  uint32_t GetThreadIndexForThreadStoppedWithSignal(const int signo) const;74 75  MachThreadSP GetThreadByID(nub_thread_t tid) const;76 77  MachThreadSP GetThreadByMachPortNumber(thread_t mach_port_number) const;78  nub_thread_t GetThreadIDByMachPortNumber(thread_t mach_port_number) const;79  thread_t GetMachPortNumberByThreadID(nub_thread_t globally_unique_id) const;80 81protected:82  typedef std::vector<MachThreadSP> collection;83  typedef collection::iterator iterator;84  typedef collection::const_iterator const_iterator;85 86  enum class HardwareBreakpointAction {87    EnableWatchpoint,88    DisableWatchpoint,89    EnableBreakpoint,90    DisableBreakpoint,91  };92 93  uint32_t DoHardwareBreakpointAction(const DNBBreakpoint *bp,94                                      HardwareBreakpointAction action) const;95 96  uint32_t UpdateThreadList(MachProcess *process, bool update,97                            collection *num_threads = NULL);98  //  const_iterator  FindThreadByID (thread_t tid) const;99 100  collection m_threads;101  mutable std::recursive_mutex m_threads_mutex;102  MachThreadSP m_current_thread;103  bool m_is_64_bit;104};105 106#endif // LLDB_TOOLS_DEBUGSERVER_SOURCE_MACOSX_MACHTHREADLIST_H107