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