diff options
Diffstat (limited to 'lldb/tools/driver/Driver.h')
-rw-r--r-- | lldb/tools/driver/Driver.h | 156 |
1 files changed, 156 insertions, 0 deletions
diff --git a/lldb/tools/driver/Driver.h b/lldb/tools/driver/Driver.h new file mode 100644 index 00000000000..ad82c989f1a --- /dev/null +++ b/lldb/tools/driver/Driver.h @@ -0,0 +1,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 "PseudoTerminal.h" + +#include <set> +#include <bitset> +#include <string> +#include <vector> + +#include <LLDB/SBDefines.h> +#include <LLDB/SBBroadcaster.h> +#include <LLDB/SBError.h> +#include <LLDB/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_ |