diff options
Diffstat (limited to 'lldb/source/Plugins/Process/Linux/NativeProcessLinux.h')
-rw-r--r-- | lldb/source/Plugins/Process/Linux/NativeProcessLinux.h | 291 |
1 files changed, 123 insertions, 168 deletions
diff --git a/lldb/source/Plugins/Process/Linux/NativeProcessLinux.h b/lldb/source/Plugins/Process/Linux/NativeProcessLinux.h index 7b1fcd81b4b..fcb13c8b016 100644 --- a/lldb/source/Plugins/Process/Linux/NativeProcessLinux.h +++ b/lldb/source/Plugins/Process/Linux/NativeProcessLinux.h @@ -15,186 +15,151 @@ // Other libraries and framework includes #include "lldb/Core/ArchSpec.h" -#include "lldb/lldb-types.h" #include "lldb/Host/Debug.h" #include "lldb/Host/FileSpec.h" #include "lldb/Host/HostThread.h" #include "lldb/Target/MemoryRegionInfo.h" +#include "lldb/lldb-types.h" -#include "lldb/Host/common/NativeProcessProtocol.h" #include "NativeThreadLinux.h" +#include "lldb/Host/common/NativeProcessProtocol.h" namespace lldb_private { - class Error; - class Scalar; +class Error; +class Scalar; namespace process_linux { - /// @class NativeProcessLinux - /// @brief Manages communication with the inferior (debugee) process. - /// - /// Upon construction, this class prepares and launches an inferior process for - /// debugging. - /// - /// Changes in the inferior process state are broadcasted. - class NativeProcessLinux: public NativeProcessProtocol - { - friend Error - NativeProcessProtocol::Launch (ProcessLaunchInfo &launch_info, - NativeDelegate &native_delegate, - MainLoop &mainloop, - NativeProcessProtocolSP &process_sp); +/// @class NativeProcessLinux +/// @brief Manages communication with the inferior (debugee) process. +/// +/// Upon construction, this class prepares and launches an inferior process for +/// debugging. +/// +/// Changes in the inferior process state are broadcasted. +class NativeProcessLinux : public NativeProcessProtocol { + friend Error NativeProcessProtocol::Launch( + ProcessLaunchInfo &launch_info, NativeDelegate &native_delegate, + MainLoop &mainloop, NativeProcessProtocolSP &process_sp); - friend Error - NativeProcessProtocol::Attach (lldb::pid_t pid, - NativeProcessProtocol::NativeDelegate &native_delegate, - MainLoop &mainloop, - NativeProcessProtocolSP &process_sp); + friend Error NativeProcessProtocol::Attach( + lldb::pid_t pid, NativeProcessProtocol::NativeDelegate &native_delegate, + MainLoop &mainloop, NativeProcessProtocolSP &process_sp); - public: - // --------------------------------------------------------------------- - // NativeProcessProtocol Interface - // --------------------------------------------------------------------- - Error - Resume (const ResumeActionList &resume_actions) override; +public: + // --------------------------------------------------------------------- + // NativeProcessProtocol Interface + // --------------------------------------------------------------------- + Error Resume(const ResumeActionList &resume_actions) override; - Error - Halt () override; + Error Halt() override; - Error - Detach () override; + Error Detach() override; - Error - Signal (int signo) override; + Error Signal(int signo) override; - Error - Interrupt () override; + Error Interrupt() override; - Error - Kill () override; + Error Kill() override; - Error - GetMemoryRegionInfo (lldb::addr_t load_addr, MemoryRegionInfo &range_info) override; + Error GetMemoryRegionInfo(lldb::addr_t load_addr, + MemoryRegionInfo &range_info) override; - Error - ReadMemory(lldb::addr_t addr, void *buf, size_t size, size_t &bytes_read) override; + Error ReadMemory(lldb::addr_t addr, void *buf, size_t size, + size_t &bytes_read) override; - Error - ReadMemoryWithoutTrap(lldb::addr_t addr, void *buf, size_t size, size_t &bytes_read) override; + Error ReadMemoryWithoutTrap(lldb::addr_t addr, void *buf, size_t size, + size_t &bytes_read) override; - Error - WriteMemory(lldb::addr_t addr, const void *buf, size_t size, size_t &bytes_written) override; + Error WriteMemory(lldb::addr_t addr, const void *buf, size_t size, + size_t &bytes_written) override; - Error - AllocateMemory(size_t size, uint32_t permissions, lldb::addr_t &addr) override; + Error AllocateMemory(size_t size, uint32_t permissions, + lldb::addr_t &addr) override; - Error - DeallocateMemory (lldb::addr_t addr) override; + Error DeallocateMemory(lldb::addr_t addr) override; - lldb::addr_t - GetSharedLibraryInfoAddress () override; + lldb::addr_t GetSharedLibraryInfoAddress() override; - size_t - UpdateThreads () override; + size_t UpdateThreads() override; - bool - GetArchitecture (ArchSpec &arch) const override; + bool GetArchitecture(ArchSpec &arch) const override; - Error - SetBreakpoint (lldb::addr_t addr, uint32_t size, bool hardware) override; + Error SetBreakpoint(lldb::addr_t addr, uint32_t size, bool hardware) override; - void - DoStopIDBumped (uint32_t newBumpId) override; + void DoStopIDBumped(uint32_t newBumpId) override; - Error - GetLoadedModuleFileSpec(const char* module_path, FileSpec& file_spec) override; + Error GetLoadedModuleFileSpec(const char *module_path, + FileSpec &file_spec) override; - Error - GetFileLoadAddress(const llvm::StringRef& file_name, lldb::addr_t& load_addr) override; + Error GetFileLoadAddress(const llvm::StringRef &file_name, + lldb::addr_t &load_addr) override; - NativeThreadLinuxSP - GetThreadByID(lldb::tid_t id); + NativeThreadLinuxSP GetThreadByID(lldb::tid_t id); - // --------------------------------------------------------------------- - // Interface used by NativeRegisterContext-derived classes. - // --------------------------------------------------------------------- - static Error - PtraceWrapper(int req, - lldb::pid_t pid, - void *addr = nullptr, - void *data = nullptr, - size_t data_size = 0, - long *result = nullptr); + // --------------------------------------------------------------------- + // Interface used by NativeRegisterContext-derived classes. + // --------------------------------------------------------------------- + static Error PtraceWrapper(int req, lldb::pid_t pid, void *addr = nullptr, + void *data = nullptr, size_t data_size = 0, + long *result = nullptr); - bool - SupportHardwareSingleStepping() const; + bool SupportHardwareSingleStepping() const; - protected: - // --------------------------------------------------------------------- - // NativeProcessProtocol protected interface - // --------------------------------------------------------------------- - Error - GetSoftwareBreakpointTrapOpcode (size_t trap_opcode_size_hint, size_t &actual_opcode_size, const uint8_t *&trap_opcode_bytes) override; +protected: + // --------------------------------------------------------------------- + // NativeProcessProtocol protected interface + // --------------------------------------------------------------------- + Error + GetSoftwareBreakpointTrapOpcode(size_t trap_opcode_size_hint, + size_t &actual_opcode_size, + const uint8_t *&trap_opcode_bytes) override; - private: +private: + MainLoop::SignalHandleUP m_sigchld_handle; + ArchSpec m_arch; - MainLoop::SignalHandleUP m_sigchld_handle; - ArchSpec m_arch; + LazyBool m_supports_mem_region; + std::vector<MemoryRegionInfo> m_mem_region_cache; - LazyBool m_supports_mem_region; - std::vector<MemoryRegionInfo> m_mem_region_cache; + lldb::tid_t m_pending_notification_tid; - lldb::tid_t m_pending_notification_tid; + // List of thread ids stepping with a breakpoint with the address of + // the relevan breakpoint + std::map<lldb::tid_t, lldb::addr_t> m_threads_stepping_with_breakpoint; - // List of thread ids stepping with a breakpoint with the address of - // the relevan breakpoint - std::map<lldb::tid_t, lldb::addr_t> m_threads_stepping_with_breakpoint; + // --------------------------------------------------------------------- + // Private Instance Methods + // --------------------------------------------------------------------- + NativeProcessLinux(); + Error LaunchInferior(MainLoop &mainloop, ProcessLaunchInfo &launch_info); - // --------------------------------------------------------------------- - // Private Instance Methods - // --------------------------------------------------------------------- - NativeProcessLinux (); + /// Attaches to an existing process. Forms the + /// implementation of Process::DoAttach + void AttachToInferior(MainLoop &mainloop, lldb::pid_t pid, Error &error); - Error - LaunchInferior(MainLoop &mainloop, ProcessLaunchInfo &launch_info); + ::pid_t Attach(lldb::pid_t pid, Error &error); - /// Attaches to an existing process. Forms the - /// implementation of Process::DoAttach - void - AttachToInferior (MainLoop &mainloop, lldb::pid_t pid, Error &error); + static Error SetDefaultPtraceOpts(const lldb::pid_t); - ::pid_t - Attach(lldb::pid_t pid, Error &error); + static void *MonitorThread(void *baton); - static Error - SetDefaultPtraceOpts(const lldb::pid_t); + void MonitorCallback(lldb::pid_t pid, bool exited, int signal, int status); - static void * - MonitorThread(void *baton); + void WaitForNewThread(::pid_t tid); - void - MonitorCallback(lldb::pid_t pid, bool exited, int signal, int status); + void MonitorSIGTRAP(const siginfo_t &info, NativeThreadLinux &thread); - void - WaitForNewThread(::pid_t tid); + void MonitorTrace(NativeThreadLinux &thread); - void - MonitorSIGTRAP(const siginfo_t &info, NativeThreadLinux &thread); + void MonitorBreakpoint(NativeThreadLinux &thread); - void - MonitorTrace(NativeThreadLinux &thread); + void MonitorWatchpoint(NativeThreadLinux &thread, uint32_t wp_index); - void - MonitorBreakpoint(NativeThreadLinux &thread); + void MonitorSignal(const siginfo_t &info, NativeThreadLinux &thread, + bool exited); - void - MonitorWatchpoint(NativeThreadLinux &thread, uint32_t wp_index); - - void - MonitorSignal(const siginfo_t &info, NativeThreadLinux &thread, bool exited); - - Error - SetupSoftwareSingleStepping(NativeThreadLinux &thread); + Error SetupSoftwareSingleStepping(NativeThreadLinux &thread); #if 0 static ::ProcessMessage::CrashReason @@ -210,59 +175,49 @@ namespace process_linux { GetCrashReasonForSIGBUS(const siginfo_t *info); #endif - bool - HasThreadNoLock (lldb::tid_t thread_id); - - bool - StopTrackingThread (lldb::tid_t thread_id); + bool HasThreadNoLock(lldb::tid_t thread_id); - NativeThreadLinuxSP - AddThread (lldb::tid_t thread_id); + bool StopTrackingThread(lldb::tid_t thread_id); - Error - GetSoftwareBreakpointPCOffset(uint32_t &actual_opcode_size); + NativeThreadLinuxSP AddThread(lldb::tid_t thread_id); - Error - FixupBreakpointPCAsNeeded(NativeThreadLinux &thread); + Error GetSoftwareBreakpointPCOffset(uint32_t &actual_opcode_size); - /// Writes a siginfo_t structure corresponding to the given thread ID to the - /// memory region pointed to by @p siginfo. - Error - GetSignalInfo(lldb::tid_t tid, void *siginfo); + Error FixupBreakpointPCAsNeeded(NativeThreadLinux &thread); - /// Writes the raw event message code (vis-a-vis PTRACE_GETEVENTMSG) - /// corresponding to the given thread ID to the memory pointed to by @p - /// message. - Error - GetEventMessage(lldb::tid_t tid, unsigned long *message); + /// Writes a siginfo_t structure corresponding to the given thread ID to the + /// memory region pointed to by @p siginfo. + Error GetSignalInfo(lldb::tid_t tid, void *siginfo); - void - NotifyThreadDeath (lldb::tid_t tid); + /// Writes the raw event message code (vis-a-vis PTRACE_GETEVENTMSG) + /// corresponding to the given thread ID to the memory pointed to by @p + /// message. + Error GetEventMessage(lldb::tid_t tid, unsigned long *message); - Error - Detach(lldb::tid_t tid); + void NotifyThreadDeath(lldb::tid_t tid); + Error Detach(lldb::tid_t tid); - // This method is requests a stop on all threads which are still running. It sets up a - // deferred delegate notification, which will fire once threads report as stopped. The - // triggerring_tid will be set as the current thread (main stop reason). - void - StopRunningThreads(lldb::tid_t triggering_tid); + // This method is requests a stop on all threads which are still running. It + // sets up a + // deferred delegate notification, which will fire once threads report as + // stopped. The + // triggerring_tid will be set as the current thread (main stop reason). + void StopRunningThreads(lldb::tid_t triggering_tid); - // Notify the delegate if all threads have stopped. - void SignalIfAllThreadsStopped(); + // Notify the delegate if all threads have stopped. + void SignalIfAllThreadsStopped(); - // Resume the given thread, optionally passing it the given signal. The type of resume - // operation (continue, single-step) depends on the state parameter. - Error - ResumeThread(NativeThreadLinux &thread, lldb::StateType state, int signo); + // Resume the given thread, optionally passing it the given signal. The type + // of resume + // operation (continue, single-step) depends on the state parameter. + Error ResumeThread(NativeThreadLinux &thread, lldb::StateType state, + int signo); - void - ThreadWasCreated(NativeThreadLinux &thread); + void ThreadWasCreated(NativeThreadLinux &thread); - void - SigchldHandler(); - }; + void SigchldHandler(); +}; } // namespace process_linux } // namespace lldb_private |