]> git.tdb.fi Git - gldbg.git/blob - source/gldbg.h
Fix several problems reported by valgrind
[gldbg.git] / source / gldbg.h
1 #ifndef GLDBG_H_
2 #define GLDBG_H_
3
4 #include <list>
5 #include <string>
6 #include <vector>
7 #include "commandinterpreter.h"
8 #include "packet.h"
9 #include "process.h"
10
11 class Tool;
12
13 class GlDbg
14 {
15 private:
16         typedef std::list<Tool *> ToolList;
17
18         struct Breakpoint
19         {
20                 unsigned short function;
21                 unsigned char flag;
22                 ToolList owners;
23
24                 Breakpoint(unsigned short, unsigned char);
25
26                 void add_owner(Tool *);
27                 bool has_owner(Tool *) const;
28                 void remove_owner(Tool *);
29         };
30
31         typedef std::list<Breakpoint> BreakList;
32
33         bool done;
34         CommandInterpreter cmd_interp;
35         Process process;
36         int sock_fd;
37         std::string buffer;
38         unsigned buf_offset;
39         bool flushing;
40         ToolList tools;
41         bool got_sigchld;
42         int stop_reason;
43         BreakList breakpoints;
44         const Breakpoint *current_break;
45         ToolList break_holders;
46
47         static GlDbg *instance;
48
49 public:
50         GlDbg(int, char **);
51         ~GlDbg();
52
53         int main();
54         CommandInterpreter &get_command_interpreter() { return cmd_interp; }
55         Process &get_process() { return process; }
56         void launch();
57         void send(GlPacket *);
58         void hold();
59 private:
60         void send_breakpoint(unsigned short, unsigned char, unsigned char);
61 public:
62         void set_breakpoint(unsigned short, unsigned char, Tool *);
63         void clear_breakpoint(unsigned short, unsigned char, Tool *);
64         void resume_from_break(Tool *);
65         void quit(bool);
66 private:
67         void tick();
68         void check_child();
69         void read_stream();
70         Breakpoint *get_breakpoint(unsigned short, unsigned char);
71
72         static void sighandler(int);
73 };
74
75 #endif