citrun

watch C/C++ source code execute
Log | Files | Refs | LICENSE

commit ef7d1fccdd5ebca036aed2c4074d237e22841450
parent b76041423d469eb31e5ba5c7b9828e27a67a2db7
Author: Kyle Milz <kyle@0x30.net>
Date:   Sun,  7 Aug 2016 18:25:06 -0600

src: give main a header file

Diffstat:
Msrc/inst_action.h | 18------------------
Msrc/inst_main.cc | 57+++++++++++++++------------------------------------------
Asrc/inst_main.h | 50++++++++++++++++++++++++++++++++++++++++++++++++++
3 files changed, 65 insertions(+), 60 deletions(-)

diff --git a/src/inst_action.h b/src/inst_action.h @@ -44,21 +44,3 @@ private: std::string m_pfx; bool m_is_citruninst; }; - -class InstrumentActionFactory : public clang::tooling::FrontendActionFactory { -public: - InstrumentActionFactory(llvm::raw_fd_ostream *log, std::string const &pfx, bool citruninst) : - m_log(log), - m_pfx(pfx), - m_is_citruninst(citruninst) - {}; - - clang::ASTFrontendAction *create() { - return new InstrumentAction(m_log, m_pfx, m_is_citruninst); - } - -private: - llvm::raw_fd_ostream *m_log; - std::string m_pfx; - bool m_is_citruninst; -}; diff --git a/src/inst_main.cc b/src/inst_main.cc @@ -29,42 +29,30 @@ #include <libgen.h> // basename #include <iostream> #include <sstream> // stringstream -#include <string> #include <unistd.h> // execvp, fork, getpid, unlink #include "lib/runtime.h" // citrun_major, citrun_minor -#include "inst_action.h" // InstrumentAction +#include "inst_main.h" #define STR_EXPAND(tok) #tok #define STR(tok) STR_EXPAND(tok) static llvm::cl::OptionCategory ToolingCategory("citrun-inst options"); -class CitrunInst { -public: - CitrunInst(int, char *argv[]); - - void clean_PATH(); - void process_cmdline(); - int instrument(); - int compile_modified(); - -private: - void exec_compiler(); - int fork_compiler(); - void restore_original_src(); - void save_if_srcfile(char *); - int try_unmodified_compile(); - - std::vector<char *> m_args; - std::vector<std::string> m_source_files; - std::map<std::string, std::string> m_temp_file_map; - std::error_code m_ec; - llvm::raw_fd_ostream m_log; - pid_t m_pid; - std::string m_pfx; - bool m_is_citruninst; -}; +int +main(int argc, char *argv[]) +{ + CitrunInst main(argc, argv); + + main.clean_PATH(); + + main.process_cmdline(); + + if (main.instrument()) + return 1; + + return main.compile_modified(); +} CitrunInst::CitrunInst(int argc, char *argv[]) : m_args(argv, argv + argc), @@ -392,18 +380,3 @@ CitrunInst::compile_modified() return ret; } - -int -main(int argc, char *argv[]) -{ - CitrunInst main(argc, argv); - - main.clean_PATH(); - - main.process_cmdline(); - - if (main.instrument()) - return 1; - - return main.compile_modified(); -} diff --git a/src/inst_main.h b/src/inst_main.h @@ -0,0 +1,50 @@ +#include <string> + +#include "inst_action.h" // InstrumentAction + +class CitrunInst { +public: + CitrunInst(int, char *argv[]); + + void clean_PATH(); + void process_cmdline(); + int instrument(); + int compile_modified(); + +private: + void exec_compiler(); + int fork_compiler(); + void restore_original_src(); + void save_if_srcfile(char *); + int try_unmodified_compile(); + + std::vector<char *> m_args; + std::vector<std::string> m_source_files; + std::map<std::string, std::string> m_temp_file_map; + std::error_code m_ec; + llvm::raw_fd_ostream m_log; + pid_t m_pid; + std::string m_pfx; + bool m_is_citruninst; +}; + +// +// Needed because we pass custom stuff down into the ASTFrontendAction +// +class InstrumentActionFactory : public clang::tooling::FrontendActionFactory { +public: + InstrumentActionFactory(llvm::raw_fd_ostream *log, std::string const &pfx, bool citruninst) : + m_log(log), + m_pfx(pfx), + m_is_citruninst(citruninst) + {}; + + clang::ASTFrontendAction *create() { + return new InstrumentAction(m_log, m_pfx, m_is_citruninst); + } + +private: + llvm::raw_fd_ostream *m_log; + std::string m_pfx; + bool m_is_citruninst; +};