]> git.tdb.fi Git - gldbg.git/blobdiff - source/gldbg.h
Track owners of breakpoints
[gldbg.git] / source / gldbg.h
index da5664eddf749102f4a996bdab12e14f35983fdc..99f0863c2c3f72cf91852ea0e356781aed23994c 100644 (file)
@@ -13,6 +13,7 @@ Distributed under the GPL
 #include <msp/core/application.h>
 #include <msp/fs/path.h>
 #include "commandinterpreter.h"
+#include "packet.h"
 #include "process.h"
 
 class Tool;
@@ -20,14 +21,35 @@ class Tool;
 class GlDbg: public Msp::Application
 {
 private:
+       typedef std::list<Tool *> ToolList;
+
+       struct Breakpoint
+       {
+               unsigned short function;
+               unsigned char flag;
+               ToolList owners;
+
+               Breakpoint(unsigned short, unsigned char);
+
+               void add_owner(Tool *);
+               bool has_owner(Tool *) const;
+               void remove_owner(Tool *);
+       };
+
+       typedef std::list<Breakpoint> BreakList;
+
        CommandInterpreter cmd_interp;
        Process process;
        int sock_fd;
        std::string buffer;
        unsigned buf_offset;
        bool flushing;
-       std::list<Tool *> tools;
+       ToolList tools;
        bool got_sigchld;
+       int stop_reason;
+       BreakList breakpoints;
+       const Breakpoint *current_break;
+       ToolList break_holders;
 
        static RegApp<GlDbg> reg;
 
@@ -39,13 +61,17 @@ public:
        CommandInterpreter &get_command_interpreter() { return cmd_interp; }
        Process &get_process() { return process; }
        void launch();
-       void set_breakpoint(unsigned short, char);
-       void clear_breakpoint(unsigned short, char);
+       void send(GlPacket *);
+       void hold();
+       void set_breakpoint(unsigned short, unsigned char, Tool *);
+       void clear_breakpoint(unsigned short, unsigned char, Tool *);
+       void resume_from_break(Tool *);
        void quit(bool);
 private:
        void tick();
        void check_child();
        void read_stream();
+       Breakpoint *get_breakpoint(unsigned short, unsigned char);
        virtual void sighandler(int);
 };