BasicGDBStub.h
Go to the documentation of this file.
1 #pragma once
2 #include "IGDBStub.h"
3 #include <map>
4 #include <string>
5 #include "IGDBTarget.h"
6 
7 namespace GDBServerFoundation
8 {
10  class BasicGDBStub : public IGDBStub
11  {
12  private:
14  std::map<std::string, std::string> m_GDBFeatures;
15 
17  std::map<std::string, std::string> m_StubFeatures;
18 
19  protected:
21 
22  //Should be updated from the code returning stop records
24 
25  public:
26  virtual StubResponse HandleRequest(const BazisLib::TempStringA &requestType, char splitterChar, const BazisLib::TempStringA &requestData);
27 
28  BasicGDBStub();
29 
30  protected:
32  virtual StubResponse Handle_qSupported(const BazisLib::TempStringA &requestData);
33 
35  virtual StubResponse Handle_H(const BazisLib::TempStringA &requestType);
36 
38 
40  virtual StubResponse Handle_g(int threadID)=0;
41 
43  virtual StubResponse Handle_G(int threadID, const BazisLib::TempStringA &registerValueBlock)=0;
44 
46  virtual StubResponse Handle_P(int threadID, const BazisLib::TempStringA &registerIndex, const BazisLib::TempStringA &registerValue)=0;
47 
49  virtual StubResponse Handle_m(const BazisLib::TempStringA &addr, const BazisLib::TempStringA &length)=0;
50 
52  virtual StubResponse Handle_M(const BazisLib::TempStringA &addr, const BazisLib::TempStringA &length, const BazisLib::TempStringA &data)=0;
53 
55  virtual StubResponse Handle_X(const BazisLib::TempStringA &addr, const BazisLib::TempStringA &length, const BazisLib::TempStringA &binaryData)=0;
56 
58  virtual StubResponse Handle_c(int threadID)=0;
59 
61  virtual StubResponse Handle_s(int threadID)=0;
62 
66 
68  virtual StubResponse Handle_qThreadExtraInfo(const BazisLib::TempStringA &strThreadID)=0;
69 
71  virtual StubResponse Handle_T(const BazisLib::TempStringA &strThreadID)=0;
72 
74  virtual StubResponse Handle_qC()=0;
75 
77  virtual StubResponse Handle_vCont(const BazisLib::TempStringA &arguments)=0;
78 
80  virtual StubResponse Handle_k()=0;
81 
83  virtual StubResponse Handle_Zz(bool setBreakpoint, char type, const BazisLib::TempStringA &addr, const BazisLib::TempStringA &kind, const BazisLib::TempStringA &conditions)=0;
84 
86  virtual StubResponse Handle_qCRC(const BazisLib::TempStringA &addr, const BazisLib::TempStringA &length)=0;
87 
89  virtual StubResponse Handle_qRcmd(const BazisLib::TempStringA &command)=0;
90 
91  virtual StubResponse Handle_vFlashErase(const BazisLib::TempStringA &addr, const BazisLib::TempStringA &length)=0;
92  virtual StubResponse Handle_vFlashWrite(const BazisLib::TempStringA &addr, const BazisLib::TempStringA &binaryData)=0;
93  virtual StubResponse Handle_vFlashDone()=0;
94 
95  protected:
96  StubResponse StopRecordToStopReply(const TargetStopRecord &rec, const char *pReportedRegisterValues = NULL, bool updateLastReportedThreadID = true);
97  int GetThreadIDForOp(bool isRegOp);
98 
99  void AppendRegisterValueToString(const RegisterValue &val, size_t sizeInBytes, BazisLib::DynamicStringA &str, const char *pSuffix = NULL);
100 
102 
103  void RegisterStubFeature(const char *pFeature) {m_StubFeatures[pFeature] = "+";}
104  virtual void ResetAllCachesWhenResumingTarget();
105 
106  };
107 }