forked from OSchip/llvm-project
				
			
		
			
				
	
	
		
			140 lines
		
	
	
		
			4.6 KiB
		
	
	
	
		
			C++
		
	
	
	
			
		
		
	
	
			140 lines
		
	
	
		
			4.6 KiB
		
	
	
	
		
			C++
		
	
	
	
| //===-- 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::Status.
 | |
|   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__
 |