1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
|
//===-- Driver.h ------------------------------------------------*- C++ -*-===//
//
// The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
#ifndef lldb_Driver_h_
#define lldb_Driver_h_
#include "lldb/Utility/PseudoTerminal.h"
#include <set>
#include <bitset>
#include <string>
#include <vector>
#include "lldb/API/SBDefines.h"
#include "lldb/API/SBBroadcaster.h"
#include "lldb/API/SBError.h"
#include "lldb/API/SBInputReader.h"
class IOChannel;
namespace lldb
{
class SBInputReader;
}
class Driver : public lldb::SBBroadcaster
{
public:
enum {
eBroadcastBitReadyForInput = (1 << 0),
eBroadcastBitThreadShouldExit = (1 << 1)
};
Driver ();
virtual
~Driver ();
void
MainLoop ();
void
PutSTDIN (const char *src, size_t src_len);
void
GetFromMaster (const char *src, size_t src_len);
bool
HandleIOEvent (const lldb::SBEvent &event);
void
HandleProcessEvent (const lldb::SBEvent &event);
bool
ParseArgs (int argc, const char *argv[], FILE *out_fh, FILE *err_fh);
const char *
GetFilename() const;
const char *
GetCrashLogFilename() const;
const char *
GetArchName() const;
lldb::ScriptLanguage
GetScriptLanguage() const;
size_t
GetNumSourceCommandFiles () const;
const char *
GetSourceCommandFileAtIndex (uint32_t idx) const;
bool
GetDebugMode() const;
class OptionData
{
public:
OptionData ();
~OptionData ();
void
Clear();
//static lldb::OptionDefinition m_cmd_option_table[];
std::string m_filename;
lldb::ScriptLanguage m_script_lang;
std::string m_crash_log;
std::vector<std::string> m_source_command_files;
bool m_debug_mode;
bool m_print_version;
bool m_print_help;
typedef std::set<char> OptionSet;
OptionSet m_seen_options;
};
static lldb::SBError
SetOptionValue (int option_idx,
const char *option_arg,
Driver::OptionData &data);
private:
lldb_utility::PseudoTerminal m_editline_pty;
FILE *m_editline_slave_fh;
lldb::SBInputReader m_editline_reader;
std::auto_ptr<IOChannel> m_io_channel_ap;
OptionData m_option_data;
bool m_waiting_for_command;
void
ResetOptionValues ();
void
GetProcessSTDOUT ();
void
GetProcessSTDERR ();
void
UpdateCurrentThread ();
void
CloseIOChannelFile ();
static size_t
EditLineInputReaderCallback (void *baton,
lldb::SBInputReader *reader,
lldb::InputReaderAction notification,
const char *bytes,
size_t bytes_len);
static void
ReadThreadBytesReceived (void *baton, const void *src, size_t src_len);
static void
MasterThreadBytesReceived (void *baton, const void *src, size_t src_len);
void
ReadyForCommand ();
};
#endif // lldb_Driver_h_
|