GDBStub.h
Go to the documentation of this file.
1 #pragma once
2 #include "BasicGDBStub.h"
3 #include "IGDBTarget.h"
4 #include <vector>
5 #include <map>
6 
7 namespace GDBServerFoundation
8 {
10  class GDBStub : public BasicGDBStub
11  {
12  private:
13  ISyncGDBTarget *m_pTarget;
14  bool m_bOwnStub;
15 
16  const PlatformRegisterList *m_pRegisters;
17 
18  std::vector<ThreadRecord> m_CachedThreadInfo;
19  bool m_bThreadCacheValid, m_bThreadsSupported;
20 
21  std::map<std::pair<ULONGLONG, BreakpointType>, INT_PTR> m_BreakpointMap;
22 
23  std::vector<EmbeddedMemoryRegion> m_EmbeddedMemoryRegions;
24 
25  public:
26  GDBStub(ISyncGDBTarget *pTarget, bool own = true);
27 
29  {
30  if (m_bOwnStub)
31  delete m_pTarget;
32  }
33 
34  virtual void OnBreakInRequest()
35  {
36  if (m_pTarget)
37  m_pTarget->SendBreakInRequestAsync();
38  }
39 
41  virtual StubResponse Handle_g(int threadID);
42  virtual StubResponse Handle_G(int threadID, const BazisLib::TempStringA &registerValueBlock);
43  virtual StubResponse Handle_P(int threadID, const BazisLib::TempStringA &registerIndex, const BazisLib::TempStringA &registerValue);
44  virtual StubResponse Handle_m(const BazisLib::TempStringA &addr, const BazisLib::TempStringA &length);
45  virtual StubResponse Handle_M(const BazisLib::TempStringA &addr, const BazisLib::TempStringA &length, const BazisLib::TempStringA &data);
46  virtual StubResponse Handle_X(const BazisLib::TempStringA &addr, const BazisLib::TempStringA &length, const BazisLib::TempStringA &binaryData);
47 
48  virtual StubResponse Handle_qXfer(const BazisLib::TempStringA &object, const BazisLib::TempStringA &verb, const BazisLib::TempStringA &annex, const BazisLib::TempStringA &offset, const BazisLib::TempStringA &length);
49 
50  virtual StubResponse HandleRequest(const BazisLib::TempStringA &requestType, char splitterChar, const BazisLib::TempStringA &requestData);
51  virtual StubResponse Handle_c(int threadID);
52  virtual StubResponse Handle_s(int threadID);
55  virtual StubResponse Handle_qThreadExtraInfo(const BazisLib::TempStringA &strThreadID);
56  virtual StubResponse Handle_T(const BazisLib::TempStringA &strThreadID);
57  virtual StubResponse Handle_qC();
58  virtual StubResponse Handle_vCont(const BazisLib::TempStringA &arguments);
59  virtual StubResponse Handle_k();
60  virtual StubResponse Handle_Zz(bool setBreakpoint, char type, const BazisLib::TempStringA &addr, const BazisLib::TempStringA &kind, const BazisLib::TempStringA &conditions);
61  virtual StubResponse Handle_qCRC(const BazisLib::TempStringA &addr, const BazisLib::TempStringA &length);
62  virtual StubResponse Handle_qRcmd(const BazisLib::TempStringA &command);
63 
64  virtual StubResponse Handle_vFlashErase(const BazisLib::TempStringA &addr, const BazisLib::TempStringA &length);
65  virtual StubResponse Handle_vFlashWrite(const BazisLib::TempStringA &addr, const BazisLib::TempStringA &binaryData);
67 
68  protected:
69  virtual BazisLib::DynamicStringA BuildGDBReportByName(const BazisLib::TempStringA &name, const BazisLib::TempStringA &annex);
70 
71  protected:
74 
75  protected:
76  void ProvideThreadInfo();
77  };
78 }