diff --git a/scripts/distribute-experiment.sh b/scripts/distribute-experiment.sh index 0024fb29..4c961bec 100755 --- a/scripts/distribute-experiment.sh +++ b/scripts/distribute-experiment.sh @@ -39,7 +39,7 @@ fi for h in $FAIL_DISTRIBUTE_HOSTS do echo Distributing to $h ... - rsync -az --partial --delete-before --delete-excluded --exclude=core --exclude=trace.tc . $h:"$FAIL_EXPERIMENT_TARGETDIR" & + rsync -az --partial --delete-before --delete-excluded --exclude=core --exclude=*.tc . $h:"$FAIL_EXPERIMENT_TARGETDIR" & done wait diff --git a/scripts/killall-bochs.sh b/scripts/killall-bochs.sh index 1ff77cc5..f50838d3 100755 --- a/scripts/killall-bochs.sh +++ b/scripts/killall-bochs.sh @@ -14,7 +14,7 @@ SCRIPTDIR=$(readlink -f $(dirname $0)) # env variable defaults source $SCRIPTDIR/fail-env.sh -CMD="killall -q client.sh" +CMD="killall -q client.sh; killall -q fail-client" CONNECTION_ATTEMPTS=2 SSH="ssh -o BatchMode=yes -o ConnectTimeout=60 -o ConnectionAttempts=$CONNECTION_ATTEMPTS" @@ -31,3 +31,6 @@ do $SSH $h "$CMD $NCLIENTS" & done + +wait +echo "Done." diff --git a/src/core/cpn/DatabaseCampaign.cc b/src/core/cpn/DatabaseCampaign.cc index 9e9003bd..1303722e 100644 --- a/src/core/cpn/DatabaseCampaign.cc +++ b/src/core/cpn/DatabaseCampaign.cc @@ -20,7 +20,7 @@ bool DatabaseCampaign::run() { CommandLine &cmd = CommandLine::Inst(); cmd.addOption("", "", Arg::None, "USAGE: fail-server [options...]\n\n"); - CommandLine::option_handle HELP = cmd.addOption("h", "help", Arg::None, "-h,--help\t Print usage and exit"); + CommandLine::option_handle HELP = cmd.addOption("h", "help", Arg::None, "-h,--help \tPrint usage and exit"); Database::cmdline_setup(); @@ -29,11 +29,11 @@ bool DatabaseCampaign::run() { if (!cb_commandline_init()) return false; CommandLine::option_handle VARIANT = cmd.addOption("v", "variant", Arg::Required, - "-v/--variant\t Variant label (default: \"none\")"); + "-v/--variant \tVariant label (default: \"none\")"); CommandLine::option_handle BENCHMARK = cmd.addOption("b", "benchmark", Arg::Required, - "-b/--benchmark\t Benchmark label (default: \"none\")\n"); + "-b/--benchmark \tBenchmark label (default: \"none\")\n"); CommandLine::option_handle PRUNER = cmd.addOption("p", "prune-method", Arg::Required, - "-p/--prune-method\t Which import method to use (default: basic)"); + "-p/--prune-method \tWhich import method to use (default: basic)"); if(!cmd.parse()) { log_send << "Error parsing arguments." << std::endl; diff --git a/src/core/cpn/JobServer.cc b/src/core/cpn/JobServer.cc index a21ef6af..fd9e1838 100644 --- a/src/core/cpn/JobServer.cc +++ b/src/core/cpn/JobServer.cc @@ -40,7 +40,6 @@ boost::mutex CommThread::m_CommMutex; ExperimentData *JobServer::getDone() { - #ifndef __puma if (m_undoneJobs.Size() == 0 && noMoreExperiments() @@ -151,7 +150,7 @@ void JobServer::run() // TODO: Log-level? return; } - cout << "JobServer listening...." << endl; + cout << "JobServer listening ..." << endl; // TODO: Log-level? #ifndef __puma boost::thread* th; @@ -248,43 +247,39 @@ void CommThread::sendPendingExperimentData(Minion& minion) ctrlmsg.set_run_id(m_js.m_runid); ctrlmsg.set_command(FailControlMessage::WORK_FOLLOWS); - for (i = 0; i < m_job_size ; i++) { - if (m_js.m_undoneJobs.Dequeue_nb(temp_exp) == true) { - // Got an element from queue, assign ID to workload and send to minion - workloadID = m_js.m_counter.increment(); // increment workload counter - temp_exp->setWorkloadID(workloadID); // store ID for identification when receiving result - ctrlmsg.add_workloadid(workloadID); - exp.push_back(temp_exp); - } else { - break; - } - - if (!m_js.m_runningJobs.insert(workloadID, temp_exp)) { - cout << "!![Server]could not insert workload id: [" << workloadID << "] double entry?" << endl; - } + for (i = 0; i < m_job_size; i++) { + if (m_js.m_undoneJobs.Dequeue_nb(temp_exp) == true) { + // Got an element from queue, assign ID to workload and send to minion + workloadID = m_js.m_counter.increment(); // increment workload counter + temp_exp->setWorkloadID(workloadID); // store ID for identification when receiving result + ctrlmsg.add_workloadid(workloadID); + exp.push_back(temp_exp); + } else { + break; } - if (exp.size() != 0) { - ctrlmsg.set_job_size(exp.size()); - cout << " >>["; - for ( i = 0; i < exp.size() ; i++) { - cout << " "<< ctrlmsg.workloadid(i) <<" "; - } - cout << "] " << flush; + if (!m_js.m_runningJobs.insert(workloadID, temp_exp)) { + cout << "!![Server]could not insert workload id: [" << workloadID << "] double entry?" << endl; + } + } + if (exp.size() != 0) { + ctrlmsg.set_job_size(exp.size()); + cout << " >>[" << ctrlmsg.workloadid(0) << "+" + << exp.size() << "] \r" << flush; - if (SocketComm::sendMsg(minion.getSocketDescriptor(), ctrlmsg)) { - for (i = 0; i < ctrlmsg.job_size() ; i++) { - if (SocketComm::sendMsg(minion.getSocketDescriptor(), exp.front()->getMessage())) { - exp.pop_front(); - } else { - break; - } - + if (SocketComm::sendMsg(minion.getSocketDescriptor(), ctrlmsg)) { + for (i = 0; i < ctrlmsg.job_size(); i++) { + if (SocketComm::sendMsg(minion.getSocketDescriptor(), exp.front()->getMessage())) { + exp.pop_front(); + } else { + break; } + } - return; } + return; + } #ifndef __puma // Prevent receiveExperimentResults from modifying (or indirectly, via @@ -310,7 +305,7 @@ void CommThread::sendPendingExperimentData(Minion& minion) ctrlmsg.add_workloadid(workloadID); // set workload id ctrlmsg.set_job_size(1); // In 2nd priority the jobserver send only one job //cout << ">>[Server] Re-sending workload [" << workloadID << "]" << endl; - cout << ">>R[" << workloadID << "] " << flush; + cout << ">>R[" << workloadID << "] \r" << flush; if (SocketComm::sendMsg(minion.getSocketDescriptor(), ctrlmsg)) { SocketComm::sendMsg(minion.getSocketDescriptor(), temp_exp->getMessage()); } @@ -332,11 +327,10 @@ void CommThread::receiveExperimentResults(Minion& minion, FailControlMessage& ct { int i; ExperimentData* exp = NULL; // Get exp* from running jobs - cout << " <<[ "; - for (i = 0; i < ctrlmsg.workloadid_size(); i++) { - cout << ctrlmsg.workloadid(i) << " "; + if (ctrlmsg.workloadid_size() > 0) { + cout << " <<[" << ctrlmsg.workloadid(0) << "+" + << ctrlmsg.workloadid_size() << "] \r" << flush; } - cout << "] " << flush; #ifndef __puma // Prevent re-sending jobs in sendPendingExperimentData: // a) sendPendingExperimentData needs an intact job to serialize and send it. @@ -346,8 +340,8 @@ void CommThread::receiveExperimentResults(Minion& minion, FailControlMessage& ct // already may cause breakage in sendPendingExperimentData (a). boost::unique_lock lock(m_CommMutex); #endif - for (i = 0 ; i < ctrlmsg.workloadid_size() ; i++) { - if (m_js.m_runningJobs.remove( ctrlmsg.workloadid(i), exp)) { // ExperimentData* found + for (i = 0; i < ctrlmsg.workloadid_size(); i++) { + if (m_js.m_runningJobs.remove(ctrlmsg.workloadid(i), exp)) { // ExperimentData* found // deserialize results, expect failures if (!SocketComm::rcvMsg(minion.getSocketDescriptor(), exp->getMessage())) { m_js.m_runningJobs.insert(ctrlmsg.workloadid(i), exp); diff --git a/src/core/cpn/JobServer.hpp b/src/core/cpn/JobServer.hpp index 15ea64a3..5ab6d5ba 100644 --- a/src/core/cpn/JobServer.hpp +++ b/src/core/cpn/JobServer.hpp @@ -112,21 +112,21 @@ public: */ ExperimentData* getDone(); /** - * The Campaign controller must signalize, that there will be no - * more parameter sets. We need this, as we allow concurrent parameter - * generation and distribution. + * The Campaign controller must signal that there will be no more parameter + * sets. We need this, as we allow concurrent parameter generation and + * distribution. */ void setNoMoreExperiments() { m_noMoreExps = true; } /** - * Checks whether there are no more experiment paremeter sets. + * Checks whether there are no more experiment parameter sets. * @return \c true if no more parameter sets available, \c false otherwise * @see setNoMoreExperiments */ bool noMoreExperiments() const { return m_noMoreExps; } - /** - * The Campaign Controller can signalize, that the jobserver can - * stop listening for client connections. + /** + * The Campaign Controller may signal that the jobserver can stop listening + * for client connections. */ void done() { m_finish = true; } }; diff --git a/src/core/efw/JobClient.cc b/src/core/efw/JobClient.cc index 45a0a387..a102a10f 100644 --- a/src/core/efw/JobClient.cc +++ b/src/core/efw/JobClient.cc @@ -188,9 +188,7 @@ bool JobClient::sendResult(ExperimentData& result) if (m_job_throughput > CLIENT_JOB_LIMIT) { m_job_throughput = CLIENT_JOB_LIMIT; - } - - if (m_job_throughput < 1) { + } else if (m_job_throughput < 1) { m_job_throughput = 1; } diff --git a/src/core/sal/bochs/BochsController.hpp b/src/core/sal/bochs/BochsController.hpp index 99c86f50..a9d3491d 100644 --- a/src/core/sal/bochs/BochsController.hpp +++ b/src/core/sal/bochs/BochsController.hpp @@ -115,6 +115,8 @@ public: * Fire done: Callback from Simulator */ void fireInterruptDone(); + virtual simtime_t getTimerTicks() { return bx_pc_system.time_ticks(); } + virtual simtime_t getTimerTicksPerSecond() { return bx_pc_system.time_ticks() / bx_pc_system.time_usec(); /* imprecise hack */ } /* ******************************************************************** * BochsController-specific (not implemented in SimulatorController!): * ********************************************************************/ @@ -150,8 +152,6 @@ public: * @see The uses SimulatorController::getCPU(). */ ConcreteCPU& detectCPU(BX_CPU_C* pCPU) const; - virtual simtime_t getTimerTicks() { return bx_pc_system.time_ticks(); } - virtual simtime_t getTimerTicksPerSecond() { return bx_pc_system.time_ticks() / bx_pc_system.time_usec(); /* imprecise hack */ } }; } // end-of-namespace: fail diff --git a/src/core/util/Database.cc b/src/core/util/Database.cc index d7a98754..9b073300 100644 --- a/src/core/util/Database.cc +++ b/src/core/util/Database.cc @@ -144,11 +144,11 @@ void Database::cmdline_setup() { CommandLine &cmd = CommandLine::Inst(); DATABASE = cmd.addOption("d", "database", Arg::Required, - "-d/--database\t MYSQL Database (default: taken from ~/.my.cnf)"); + "-d/--database \tMYSQL Database (default: taken from ~/.my.cnf)"); HOSTNAME = cmd.addOption("H", "hostname", Arg::Required, - "-h/--hostname\t MYSQL Hostname (default: taken from ~/.my.cnf)"); + "-h/--hostname \tMYSQL Hostname (default: taken from ~/.my.cnf)"); USERNAME = cmd.addOption("u", "username", Arg::Required, - "-u/--username\t MYSQL Username (default: taken from ~/.my.cnf, or your current user)"); + "-u/--username \tMYSQL Username (default: taken from ~/.my.cnf, or your current user)"); } Database * Database::cmdline_connect() { diff --git a/src/core/util/DatabaseProtobufAdapter.cc b/src/core/util/DatabaseProtobufAdapter.cc index 3184ab9f..21c8dcb5 100644 --- a/src/core/util/DatabaseProtobufAdapter.cc +++ b/src/core/util/DatabaseProtobufAdapter.cc @@ -251,7 +251,7 @@ int DatabaseProtobufAdapter::TypeBridge_message::gatherTypes(StringJoiner &inser bool can_be_repeated = true; // default value // For repeated messages - TypeBridge_message *top_level_msg; + TypeBridge_message *top_level_msg = 0; const FieldOptions& field_options = field->options(); if (field_options.GetExtension(sql_ignore)) { @@ -411,9 +411,7 @@ int DatabaseProtobufAdapter::field_size_at_pos(const Message *msg, std::vectorGetReflection(); - const Descriptor *d = msg->GetDescriptor(); - assert (d != 0 && ref != 0); + assert (msg->GetDescriptor() != 0 && msg->GetReflection() != 0); MYSQL_BIND *bind = new MYSQL_BIND[top_level_msg.field_count]; diff --git a/src/core/util/SynchronizedMap.hpp b/src/core/util/SynchronizedMap.hpp index 817e93e3..61ee62e0 100644 --- a/src/core/util/SynchronizedMap.hpp +++ b/src/core/util/SynchronizedMap.hpp @@ -28,7 +28,10 @@ private: int nextpick; // We need a window at least as wide as the number of clients we serve. - enum { pick_window_size = 2000 }; + // FIXME better solution: when inbound queue is empty, *copy* in-flight map + // to a vector, iterate but don't delete; when at the end, copy in-flight + // map again and repeat + enum { pick_window_size = 50000 }; public: SynchronizedMap() : nextpick(0) { } diff --git a/src/core/util/SynchronizedQueue.hpp b/src/core/util/SynchronizedQueue.hpp index cc72dcdf..5a9a4047 100644 --- a/src/core/util/SynchronizedQueue.hpp +++ b/src/core/util/SynchronizedQueue.hpp @@ -33,7 +33,7 @@ public: #endif return m_queue.size(); } - // Add data to the queue and notify others + // Add data to the queue and notify others void Enqueue(const T& data) { // Acquire lock on the queue @@ -47,13 +47,13 @@ public: #endif } - // Add the data to the queue + // Add the data to the queue m_queue.push(data); - // Notify others that data is ready + // Notify others that data is ready #ifndef __puma m_cond.notify_one(); #endif - } // Lock is automatically released here + } // Lock is automatically released here /** * Get data from the queue. Wait for data if not available @@ -64,15 +64,17 @@ public: #ifndef __puma boost::unique_lock lock(m_mutex); #endif - // When there is no data, wait till someone fills it. + // When there is no data, wait till someone fills it. // Lock is automatically released in the wait and obtained // again after the wait #ifndef __puma - while (m_queue.size() == 0) + while (m_queue.size() == 0) { m_cond.wait(lock); + } #endif // Retrieve the data from the queue - T result=m_queue.front(); m_queue.pop(); + T result = m_queue.front(); + m_queue.pop(); // Notify others that we have free slots #ifndef __puma @@ -101,7 +103,8 @@ public: // again after the wait if (m_queue.size() > 0) { // Retrieve the data from the queue - d = m_queue.front(); m_queue.pop(); + d = m_queue.front(); + m_queue.pop(); // Notify others that we have free slots #ifndef __puma if (m_queue.size() < capacity) { diff --git a/src/experiments/ecos_kernel_test/experiment.cc b/src/experiments/ecos_kernel_test/experiment.cc index d038f8e3..ec7a62a1 100644 --- a/src/experiments/ecos_kernel_test/experiment.cc +++ b/src/experiments/ecos_kernel_test/experiment.cc @@ -649,11 +649,11 @@ void EcosKernelTestExperiment::parseOptions() CommandLine &cmd = CommandLine::Inst(); cmd.addOption("", "", Arg::None, "USAGE: fail-client -Wf,[option] -Wf,[option] ... "); CommandLine::option_handle HELP = - cmd.addOption("h", "help", Arg::None, "-h,--help\t Print usage and exit"); + cmd.addOption("h", "help", Arg::None, "-h,--help \tPrint usage and exit"); CommandLine::option_handle VARIANT = - cmd.addOption("", "variant", Arg::Required, "--variant v\t experiment variant"); + cmd.addOption("", "variant", Arg::Required, "--variant v \texperiment variant"); CommandLine::option_handle BENCHMARK = - cmd.addOption("", "benchmark", Arg::Required, "--benchmark b\t benchmark"); + cmd.addOption("", "benchmark", Arg::Required, "--benchmark b \tbenchmark"); if (!cmd.parse()) { cerr << "Error parsing arguments." << endl; diff --git a/src/experiments/generic-tracing/experiment.cc b/src/experiments/generic-tracing/experiment.cc index 37a2fb78..f7a114c9 100644 --- a/src/experiments/generic-tracing/experiment.cc +++ b/src/experiments/generic-tracing/experiment.cc @@ -23,27 +23,27 @@ using namespace fail; void GenericTracing::parseOptions() { CommandLine &cmd = CommandLine::Inst(); CommandLine::option_handle IGNORE = cmd.addOption("", "", Arg::None, "USAGE: fail-client -Wf,[option] -Wf,[option] ... \n\n"); - CommandLine::option_handle HELP = cmd.addOption("h", "help", Arg::None, "-h,--help\t Print usage and exit"); + CommandLine::option_handle HELP = cmd.addOption("h", "help", Arg::None, "-h,--help \tPrint usage and exit"); CommandLine::option_handle ELF_FILE = cmd.addOption("", "elf-file", Arg::Required, - "--elf-file\t ELF Binary File (default: $FAIL_ELF_PATH)"); + "--elf-file \tELF Binary File (default: $FAIL_ELF_PATH)"); CommandLine::option_handle START_SYMBOL = cmd.addOption("s", "start-symbol", Arg::Required, - "-s,--start-symbol\t ELF symbol to start tracing (default: main)"); + "-s,--start-symbol \tELF symbol to start tracing (default: main)"); CommandLine::option_handle STOP_SYMBOL = cmd.addOption("e", "end-symbol", Arg::Required, - "-e,--end-symbol\t ELF symbol to end tracing"); + "-e,--end-symbol \tELF symbol to end tracing"); CommandLine::option_handle SAVE_SYMBOL = cmd.addOption("S", "save-symbol", Arg::Required, - "-S,--save-symbol\t ELF symbol to save the state of the machine (default: main)\n"); + "-S,--save-symbol \tELF symbol to save the state of the machine (default: main)\n"); CommandLine::option_handle STATE_FILE = cmd.addOption("f", "state-file", Arg::Required, - "-f,--state-file\t File/dir to save the state to (default state)"); + "-f,--state-file \tFile/dir to save the state to (default state)"); CommandLine::option_handle TRACE_FILE = cmd.addOption("t", "trace-file", Arg::Required, - "-t,--trace-file\t File to save the execution trace to\n"); + "-t,--trace-file \tFile to save the execution trace to\n"); - CommandLine::option_handle FULL_TRACE = cmd.addOption("", "full-trace", Arg::None, "--full-trace\t Do a full trace (more data, default: off)"); + CommandLine::option_handle FULL_TRACE = cmd.addOption("", "full-trace", Arg::None, "--full-trace \tDo a full trace (more data, default: off)"); CommandLine::option_handle MEM_SYMBOL = cmd.addOption("m", "memory-symbol", Arg::Required, - "-m,--memory-symbol\t ELF symbol(s) to trace accesses (without specifiying all mem read/writes are traced)"); + "-m,--memory-symbol \tELF symbol(s) to trace accesses (without specifiying all mem read/writes are traced)"); CommandLine::option_handle MEM_REGION = cmd.addOption("M", "memory-region", Arg::Required, - "-M,--memory-region\t restrict memory region which is traced" + "-M,--memory-region \trestrict memory region which is traced" " Possible formats: 0x
, 0x
:0x
, 0x
:"); if(!cmd.parse()) { diff --git a/tools/dump-trace/.gitignore b/tools/dump-trace/.gitignore index c9eb240e..f99131ef 100644 --- a/tools/dump-trace/.gitignore +++ b/tools/dump-trace/.gitignore @@ -1 +1 @@ -TracePlugin_pb2.py{,c} +TracePlugin_pb2.py diff --git a/tools/dump-trace/DumpTrace.cc b/tools/dump-trace/DumpTrace.cc index ed3b8b9e..3710f9bf 100644 --- a/tools/dump-trace/DumpTrace.cc +++ b/tools/dump-trace/DumpTrace.cc @@ -14,13 +14,13 @@ using std::cerr; using std::hex; using std::dec; -Logger log("dump-trace", true); +Logger LOG("dump-trace", true); std::istream& openStream(const char *input_file, std::ifstream& normal_stream, igzstream& gz_stream) { normal_stream.open(input_file); if (!normal_stream) { - log << "couldn't open " << input_file << endl; + LOG << "couldn't open " << input_file << endl; exit(-1); } unsigned char b1, b2; @@ -30,16 +30,16 @@ std::istream& openStream(const char *input_file, normal_stream.close(); gz_stream.open(input_file); if (!gz_stream) { - log << "couldn't open " << input_file << endl; + LOG << "couldn't open " << input_file << endl; exit(-1); } - //log << "opened file " << input_file << " in GZip mode" << endl; + //LOG << "opened file " << input_file << " in GZip mode" << endl; return gz_stream; } normal_stream.seekg(0); - //log << "opened file " << input_file << " in normal mode" << endl; + //LOG << "opened file " << input_file << " in normal mode" << endl; return normal_stream; } diff --git a/tools/import-trace/CMakeLists.txt b/tools/import-trace/CMakeLists.txt index 939d87fa..2e7770de 100644 --- a/tools/import-trace/CMakeLists.txt +++ b/tools/import-trace/CMakeLists.txt @@ -4,7 +4,6 @@ set(SRCS DCiAOKernelImporter.cc ) -## This is the example's campaign server distributing experiment parameters -add_executable(import-trace main.cc ${SRCS} ${PROTO_SRCS} ${PROTO_HDRS}) +add_executable(import-trace main.cc ${SRCS}) target_link_libraries(import-trace ${PROTOBUF_LIBRARY} -lmysqlclient fail-util fail-sal fail-comm) install(TARGETS import-trace RUNTIME DESTINATION bin) diff --git a/tools/import-trace/Importer.hpp b/tools/import-trace/Importer.hpp index 0ac0f0d6..9c48fe0f 100644 --- a/tools/import-trace/Importer.hpp +++ b/tools/import-trace/Importer.hpp @@ -14,7 +14,7 @@ class Importer { protected: int m_variant_id; fail::ElfReader *m_elf; - fail::Database *db; + fail::Database *db; public: typedef unsigned instruction_count_t; @@ -27,7 +27,7 @@ public: virtual bool add_trace_event(instruction_count_t begin, instruction_count_t end, const Trace_Event &event, bool is_fake = false) = 0; - void set_elf_file(fail::ElfReader *elf) {m_elf = elf;}; + void set_elf_file(fail::ElfReader *elf) { m_elf = elf; } protected: private: typedef std::map AddrLastaccessMap; diff --git a/tools/import-trace/main.cc b/tools/import-trace/main.cc index 867e96af..dfb51863 100644 --- a/tools/import-trace/main.cc +++ b/tools/import-trace/main.cc @@ -55,7 +55,7 @@ int main(int argc, char *argv[]) { for (int i = 1; i < argc; ++i) cmd.add_args(argv[i]); - CommandLine::option_handle IGNORE = cmd.addOption("", "", Arg::None, "USAGE: import-trace [options]"); + cmd.addOption("", "", Arg::None, "USAGE: import-trace [options]"); CommandLine::option_handle HELP = cmd.addOption("h", "help", Arg::None, "-h/--help\t Print usage and exit"); CommandLine::option_handle TRACE_FILE = cmd.addOption("t", "trace-file", Arg::Required, "-t/--trace-file\t File to load the execution trace from\n"); @@ -75,7 +75,7 @@ int main(int argc, char *argv[]) { "-e/--elf-file\t ELF File (default: UNSET)"); - if(!cmd.parse()) { + if (!cmd.parse()) { std::cerr << "Error parsing arguments." << std::endl; exit(-1); } diff --git a/tools/prune-trace/main.cc b/tools/prune-trace/main.cc index 98309c43..990a94fd 100644 --- a/tools/prune-trace/main.cc +++ b/tools/prune-trace/main.cc @@ -20,17 +20,17 @@ int main(int argc, char *argv[]) { for (int i = 1; i < argc; ++i) cmd.add_args(argv[i]); - CommandLine::option_handle IGNORE = cmd.addOption("", "", Arg::None, "USAGE: import-trace [options]"); - CommandLine::option_handle HELP = cmd.addOption("h", "help", Arg::None, "-h,--help\t Print usage and exit"); + cmd.addOption("", "", Arg::None, "USAGE: import-trace [options]"); + CommandLine::option_handle HELP = cmd.addOption("h", "help", Arg::None, "-h,--help \tPrint usage and exit"); Database::cmdline_setup(); CommandLine::option_handle VARIANT = cmd.addOption("v", "variant", Arg::Required, - "-v/--variant\t Variant label (default: \"none\")"); + "-v/--variant \tVariant label (default: \"none\")"); CommandLine::option_handle BENCHMARK = cmd.addOption("b", "benchmark", Arg::Required, - "-b/--benchmark\t Benchmark label (default: \"none\")\n"); + "-b/--benchmark \tBenchmark label (default: \"none\")\n"); CommandLine::option_handle PRUNER = cmd.addOption("p", "prune-method", Arg::Required, - "-p/--prune-method\t Which import method to use (default: basic)"); + "-p/--prune-method \tWhich import method to use (default: basic)"); if(!cmd.parse()) { std::cerr << "Error parsing arguments." << std::endl;