1 /*
2  * Copyright Johannes Sixt
3  * This file is licensed under the GNU General Public License Version 2.
4  * See the file COPYING in the toplevel directory of the source directory.
5  */
6 
7 #ifndef GDBDRIVER_H
8 #define GDBDRIVER_H
9 
10 #include "dbgdriver.h"
11 
12 
13 class GdbDriver : public DebuggerDriver
14 {
15     Q_OBJECT
16 public:
17     GdbDriver();
18     ~GdbDriver();
19 
20     virtual QString driverName() const;
21     virtual QString defaultInvocation() const;
22     virtual QStringList boolOptionList() const;
setDefaultInvocation(QString cmd)23     void setDefaultInvocation(QString cmd) { m_defaultCmd = cmd; }
24     static QString defaultGdb();
25     virtual bool startup(QString cmdStr);
26     virtual void commandFinished(CmdQueueItem* cmd);
27 
28     virtual void terminate();
29     virtual void detachAndTerminate();
30     virtual void interruptInferior();
31     virtual void setPrintQStringDataCmd(const char* cmd);
32     virtual ExprValue* parseQCharArray(const char* output, bool wantErrorValue, bool qt3like);
33     virtual void parseBackTrace(const char* output, std::list<StackFrame>& stack);
34     virtual bool parseFrameChange(const char* output, int& frameNo,
35 				  QString& file, int& lineNo, DbgAddr& address);
36     virtual bool parseBreakList(const char* output, std::list<Breakpoint>& brks);
37     virtual std::list<ThreadInfo> parseThreadList(const char* output);
38     virtual bool parseBreakpoint(const char* output, int& id,
39 				 QString& file, int& lineNo, QString& address);
40     virtual void parseLocals(const char* output, std::list<ExprValue*>& newVars);
41     virtual ExprValue* parsePrintExpr(const char* output, bool wantErrorValue);
42     virtual bool parseChangeWD(const char* output, QString& message);
43     virtual bool parseChangeExecutable(const char* output, QString& message);
44     virtual bool parseCoreFile(const char* output);
45     virtual uint parseProgramStopped(const char* output, bool haveCoreFile,
46 				     QString& message);
47     virtual QStringList parseSharedLibs(const char* output);
48     virtual bool parseFindType(const char* output, QString& type);
49     virtual std::list<RegisterInfo> parseRegisters(const char* output);
50     virtual bool parseInfoLine(const char* output,
51 			       QString& addrFrom, QString& addrTo);
52     virtual std::list<DisassembledCode> parseDisassemble(const char* output);
53     virtual QString parseMemoryDump(const char* output, std::list<MemoryDump>& memdump);
54     virtual QString parseSetVariable(const char* output);
55     virtual QString editableValue(VarTree* value);
56 protected:
57     QString m_programWD;		/* just an intermediate storage */
58     QString m_redirect;			/* redirection to /dev/null */
59     bool m_littleendian = true;		/* if gdb works with little endian or big endian */
60     QString m_defaultCmd;		/* how to invoke gdb */
61 
62     virtual QString makeCmdString(DbgCommand cmd);
63     virtual QString makeCmdString(DbgCommand cmd, QString strArg);
64     virtual QString makeCmdString(DbgCommand cmd, int intArg);
65     virtual QString makeCmdString(DbgCommand cmd, QString strArg, int intArg);
66     virtual QString makeCmdString(DbgCommand cmd, QString strArg1, QString strArg2);
67     virtual QString makeCmdString(DbgCommand cmd, int intArg1, int intArg2);
68     virtual QString makeCmdString(DbgCommand cmd, QString strArg, int intArg1, int intArg2);
69     virtual int findPrompt(const QByteArray& output) const;
70     void parseMarker(CmdQueueItem* cmd);
71 };
72 
73 #endif // GDBDRIVER_H
74