brintos

brintos / llvm-project-archived public Read only

0
0
Text · 6.1 KiB · cfba787 Raw
191 lines · c
1//===-- NativeProcessWindows.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#ifndef liblldb_NativeProcessWindows_h_10#define liblldb_NativeProcessWindows_h_11 12#include "lldb/Host/common/NativeProcessProtocol.h"13#include "lldb/lldb-forward.h"14 15#include "IDebugDelegate.h"16#include "ProcessDebugger.h"17 18namespace lldb_private {19 20class HostProcess;21class NativeProcessWindows;22class NativeThreadWindows;23class NativeDebugDelegate;24 25typedef std::shared_ptr<NativeDebugDelegate> NativeDebugDelegateSP;26 27//------------------------------------------------------------------28// NativeProcessWindows29//------------------------------------------------------------------30class NativeProcessWindows : public NativeProcessProtocol,31                             public ProcessDebugger {32 33public:34  class Manager : public NativeProcessProtocol::Manager {35  public:36    using NativeProcessProtocol::Manager::Manager;37 38    llvm::Expected<std::unique_ptr<NativeProcessProtocol>>39    Launch(ProcessLaunchInfo &launch_info,40           NativeDelegate &native_delegate) override;41 42    llvm::Expected<std::unique_ptr<NativeProcessProtocol>>43    Attach(lldb::pid_t pid, NativeDelegate &native_delegate) override;44  };45 46  Status Resume(const ResumeActionList &resume_actions) override;47 48  Status Halt() override;49 50  Status Detach() override;51 52  Status Signal(int signo) override;53 54  Status Interrupt() override;55 56  Status Kill() override;57 58  Status IgnoreSignals(llvm::ArrayRef<int> signals) override;59 60  Status GetMemoryRegionInfo(lldb::addr_t load_addr,61                             MemoryRegionInfo &range_info) override;62 63  Status ReadMemory(lldb::addr_t addr, void *buf, size_t size,64                    size_t &bytes_read) override;65 66  Status WriteMemory(lldb::addr_t addr, const void *buf, size_t size,67                     size_t &bytes_written) override;68 69  llvm::Expected<lldb::addr_t> AllocateMemory(size_t size,70                                              uint32_t permissions) override;71 72  llvm::Error DeallocateMemory(lldb::addr_t addr) override;73 74  lldb::addr_t GetSharedLibraryInfoAddress() override;75 76  bool IsAlive() const override;77 78  size_t UpdateThreads() override;79 80  const ArchSpec &GetArchitecture() const override { return m_arch; }81 82  void SetArchitecture(const ArchSpec &arch_spec) { m_arch = arch_spec; }83 84  Status SetBreakpoint(lldb::addr_t addr, uint32_t size,85                       bool hardware) override;86 87  Status RemoveBreakpoint(lldb::addr_t addr, bool hardware = false) override;88 89  llvm::ErrorOr<std::unique_ptr<llvm::MemoryBuffer>>90  GetAuxvData() const override;91 92  Status GetLoadedModuleFileSpec(const char *module_path,93                                 FileSpec &file_spec) override;94 95  Status GetFileLoadAddress(const llvm::StringRef &file_name,96                            lldb::addr_t &load_addr) override;97 98  // ProcessDebugger Overrides99  void OnExitProcess(uint32_t exit_code) override;100  void OnDebuggerConnected(lldb::addr_t image_base) override;101  ExceptionResult OnDebugException(bool first_chance,102                                   const ExceptionRecord &record) override;103  void OnCreateThread(const HostThread &thread) override;104  void OnExitThread(lldb::tid_t thread_id, uint32_t exit_code) override;105  void OnLoadDll(const ModuleSpec &module_spec,106                 lldb::addr_t module_addr) override;107  void OnUnloadDll(lldb::addr_t module_addr) override;108 109protected:110  NativeThreadWindows *GetThreadByID(lldb::tid_t thread_id);111 112  llvm::Expected<llvm::ArrayRef<uint8_t>>113  GetSoftwareBreakpointTrapOpcode(size_t size_hint) override;114 115  size_t GetSoftwareBreakpointPCOffset() override;116 117  bool FindSoftwareBreakpoint(lldb::addr_t addr);118 119  void StopThread(lldb::tid_t thread_id, lldb::StopReason reason,120                  std::string description = "");121 122  void SetStopReasonForThread(NativeThreadWindows &thread,123                              lldb::StopReason reason,124                              std::string description = "");125 126private:127  ArchSpec m_arch;128 129  NativeProcessWindows(ProcessLaunchInfo &launch_info, NativeDelegate &delegate,130                       llvm::Error &E);131 132  NativeProcessWindows(lldb::pid_t pid, int terminal_fd,133                       NativeDelegate &delegate, llvm::Error &E);134 135  Status CacheLoadedModules();136  std::map<lldb_private::FileSpec, lldb::addr_t> m_loaded_modules;137};138 139//------------------------------------------------------------------140// NativeDebugDelegate141//------------------------------------------------------------------142class NativeDebugDelegate : public IDebugDelegate {143public:144  NativeDebugDelegate(NativeProcessWindows &process) : m_process(process) {}145 146  void OnExitProcess(uint32_t exit_code) override {147    m_process.OnExitProcess(exit_code);148  }149 150  void OnDebuggerConnected(lldb::addr_t image_base) override {151    m_process.OnDebuggerConnected(image_base);152  }153 154  ExceptionResult OnDebugException(bool first_chance,155                                   const ExceptionRecord &record) override {156    return m_process.OnDebugException(first_chance, record);157  }158 159  void OnCreateThread(const HostThread &thread) override {160    m_process.OnCreateThread(thread);161  }162 163  void OnExitThread(lldb::tid_t thread_id, uint32_t exit_code) override {164    m_process.OnExitThread(thread_id, exit_code);165  }166 167  void OnLoadDll(const lldb_private::ModuleSpec &module_spec,168                 lldb::addr_t module_addr) override {169    m_process.OnLoadDll(module_spec, module_addr);170  }171 172  void OnUnloadDll(lldb::addr_t module_addr) override {173    m_process.OnUnloadDll(module_addr);174  }175 176  void OnDebugString(const std::string &string) override {177    m_process.OnDebugString(string);178  }179 180  void OnDebuggerError(const Status &error, uint32_t type) override {181    return m_process.OnDebuggerError(error, type);182  }183 184private:185  NativeProcessWindows &m_process;186};187 188} // namespace lldb_private189 190#endif // #ifndef liblldb_NativeProcessWindows_h_191