Driver.h revision 309124
1117845Ssam//===-- Driver.h ------------------------------------------------*- C++ -*-===// 2117845Ssam// 3117845Ssam// The LLVM Compiler Infrastructure 4117845Ssam// 5117845Ssam// This file is distributed under the University of Illinois Open Source 6117845Ssam// License. See LICENSE.TXT for details. 7117845Ssam// 8117845Ssam//===----------------------------------------------------------------------===// 9117845Ssam 10117845Ssam#ifndef lldb_Driver_h_ 11117845Ssam#define lldb_Driver_h_ 12117845Ssam 13117845Ssam#include "Platform.h" 14117845Ssam#include "lldb/Utility/PseudoTerminal.h" 15117845Ssam 16117845Ssam#include <set> 17117845Ssam#include <bitset> 18117845Ssam#include <string> 19117845Ssam#include <vector> 20117845Ssam 21117845Ssam#include "lldb/API/SBDefines.h" 22117845Ssam#include "lldb/API/SBBroadcaster.h" 23117845Ssam#include "lldb/API/SBDebugger.h" 24117845Ssam#include "lldb/API/SBError.h" 25117845Ssam 26117845Ssamclass IOChannel; 27117845Ssam 28117845Ssamclass Driver : public lldb::SBBroadcaster 29117845Ssam{ 30117845Ssampublic: 31117845Ssam typedef enum CommandPlacement 32117845Ssam { 33117845Ssam eCommandPlacementBeforeFile, 34117845Ssam eCommandPlacementAfterFile, 35117845Ssam eCommandPlacementAfterCrash, 36117845Ssam } CommandPlacement; 37117845Ssam 38117845Ssam Driver (); 39117845Ssam 40117845Ssam virtual 41117845Ssam ~Driver (); 42117845Ssam 43117845Ssam void 44117845Ssam MainLoop (); 45117845Ssam 46117845Ssam lldb::SBError 47117845Ssam ParseArgs (int argc, const char *argv[], FILE *out_fh, bool &do_exit); 48117845Ssam 49117845Ssam const char * 50117845Ssam GetFilename() const; 51117845Ssam 52117845Ssam const char * 53117845Ssam GetCrashLogFilename() const; 54117845Ssam 55117845Ssam const char * 56117845Ssam GetArchName() const; 57117845Ssam 58117845Ssam lldb::ScriptLanguage 59117845Ssam GetScriptLanguage() const; 60117845Ssam 61117845Ssam void 62117845Ssam WriteCommandsForSourcing (CommandPlacement placement, lldb::SBStream &strm); 63117845Ssam 64117845Ssam bool 65117845Ssam GetDebugMode() const; 66117845Ssam 67117845Ssam 68117845Ssam class OptionData 69117845Ssam { 70117845Ssam public: 71117845Ssam OptionData (); 72117845Ssam ~OptionData (); 73117845Ssam 74117845Ssam void 75117845Ssam Clear(); 76117845Ssam 77117845Ssam void 78117845Ssam AddInitialCommand (const char *command, CommandPlacement placement, bool is_file, lldb::SBError &error); 79117845Ssam 80117845Ssam //static OptionDefinition m_cmd_option_table[]; 81117845Ssam 82117845Ssam struct InitialCmdEntry 83117845Ssam { 84117845Ssam InitialCmdEntry (const char *in_contents, bool in_is_file, bool is_cwd_lldbinit_file_read, bool in_quiet = false) : 85117845Ssam contents (in_contents), 86117845Ssam is_file (in_is_file), 87117845Ssam is_cwd_lldbinit_file_read (is_cwd_lldbinit_file_read), 88117845Ssam source_quietly (in_quiet) 89117845Ssam {} 90117845Ssam 91117845Ssam std::string contents; 92117845Ssam bool is_file; 93117845Ssam bool is_cwd_lldbinit_file_read; // if this is reading ./.lldbinit - so we may skip if not permitted 94117845Ssam bool source_quietly; 95117845Ssam }; 96117845Ssam 97117845Ssam std::vector<std::string> m_args; 98117845Ssam lldb::ScriptLanguage m_script_lang; 99117845Ssam std::string m_core_file; 100117845Ssam std::string m_crash_log; 101117845Ssam std::vector<InitialCmdEntry> m_initial_commands; 102117845Ssam std::vector<InitialCmdEntry> m_after_file_commands; 103117845Ssam std::vector<InitialCmdEntry> m_after_crash_commands; 104117845Ssam bool m_debug_mode; 105117845Ssam bool m_source_quietly; 106117845Ssam bool m_print_version; 107117845Ssam bool m_print_python_path; 108117845Ssam bool m_print_help; 109117845Ssam bool m_wait_for; 110117845Ssam bool m_repl; 111117845Ssam lldb::LanguageType m_repl_lang; 112117845Ssam std::string m_repl_options; 113117845Ssam std::string m_process_name; 114117845Ssam lldb::pid_t m_process_pid; 115117845Ssam bool m_use_external_editor; // FIXME: When we have set/show variables we can remove this from here. 116117845Ssam bool m_batch; 117117845Ssam typedef std::set<char> OptionSet; 118117845Ssam OptionSet m_seen_options; 119117845Ssam }; 120117845Ssam 121117845Ssam 122117845Ssam static lldb::SBError 123117845Ssam SetOptionValue (int option_idx, 124117845Ssam const char *option_arg, 125117845Ssam Driver::OptionData &data); 126117845Ssam 127117845Ssam 128117845Ssam lldb::SBDebugger & 129117845Ssam GetDebugger() 130117845Ssam { 131117845Ssam return m_debugger; 132117845Ssam } 133117845Ssam 134117845Ssam void 135117845Ssam ResizeWindow (unsigned short col); 136117845Ssam 137117845Ssamprivate: 138117845Ssam lldb::SBDebugger m_debugger; 139117845Ssam OptionData m_option_data; 140117845Ssam 141117845Ssam void 142117845Ssam ResetOptionValues (); 143117845Ssam 144117845Ssam void 145117845Ssam ReadyForCommand (); 146117845Ssam}; 147117845Ssam 148117845Ssam#endif // lldb_Driver_h_ 149117845Ssam