History

Add a way to set the number of system threads the VM will use for disvm-exec. Update banner in disvm-exec to indicate DisVM version.

arr committed 10 years ago

Commit 093cfc11 parent 265a2bf3 files · +45 −12Browse files

Showing the changes to src/exec/main.cpp (1 of 3 files). Show all

Unified · Split

src/exec/main.cpp+39−6
@@ -12,6 +12,7 @@ · 11 unmodified lines
12#include <debug.h>12#include <debug.h>
13#include <exceptions.h>13#include <exceptions.h>
14#include <vm_asm.h>14#include <vm_asm.h>
15#include <vm_version.h>
15#include "exec.h"16#include "exec.h"
16 17
17using namespace disvm;18using namespace disvm;
@@ -169,7 +170,7 @@ namespace · 151 unmodified lines
169 170
170struct arg_exception_t : std::runtime_error171struct arg_exception_t : std::runtime_error
171{172{
172 arg_exception_t(const char *m, const char *arg)173 arg_exception_t(const char *m, const char *arg = nullptr)
173 : std::runtime_error{ m }174 : std::runtime_error{ m }
174 , arg{ arg }175 , arg{ arg }
175 { }176 { }
@@ -179,8 +180,20 @@ struct arg_exception_t : std::runtime_error · 3 unmodified lines
179 180
180struct exec_options181struct exec_options
181{182{
183 exec_options()
184 : debugger{}
185 , enabled_debugger{ false }
186 , quiet_start{ false }
187 , print_help{ false }
188 , sys_thread_count{ vm_t::default_system_thread_count }
189 , thread_quanta{ vm_t::default_thread_quanta }
190 { }
191
182 std::vector<char *> vm_args;192 std::vector<char *> vm_args;
183 193
194 uint32_t sys_thread_count;
195 uint32_t thread_quanta;
196
184 bool print_help;197 bool print_help;
185 bool quiet_start;198 bool quiet_start;
186 bool enabled_debugger;199 bool enabled_debugger;
@@ -189,10 +202,15 @@ struct exec_options · 2 unmodified lines
189 202
190void print_banner(const exec_options &options)203void print_banner(const exec_options &options)
191{204{
205 std::cout << "DisVM " << DISVM_VERSION_MAJOR << '.' << DISVM_VERSION_MINOR << '.' << DISVM_VERSION_PATCH;
206
207 if (DISVM_VERSION_LABEL != nullptr)
208 std::cout << '-' << DISVM_VERSION_LABEL;
209
192 std::cout210 std::cout
193 << "DisVM\n"211 << "\n----------------\n"
194 << "----------------\n"212 << "Debugger enabled: " << std::boolalpha << options.enabled_debugger << "\n"
195 << "Debugger enabled: " << std::boolalpha << options.enabled_debugger << "\n";213 << "System thread usage: " << options.sys_thread_count << "\n";
196 214
197 if (options.enabled_debugger)215 if (options.enabled_debugger)
198 std::cout << options.debugger << "\n";216 std::cout << options.debugger << "\n";
@@ -203,12 +221,13 @@ void print_banner(const exec_options &options) · 4 unmodified lines
203void print_help()221void print_help()
204{222{
205 std::cout223 std::cout
206 << "Usage: disvm-exec [-d[e|m|x]*] [-q] [-?] <entry module> <args>*\n"224 << "Usage: disvm-exec [-d[e|m|x]*] [-t <num>] [-q] [-?] <entry module> <args>*\n"
207 << " d - Enable debugger\n"225 << " d - Enable debugger\n"
208 << " e - Break on entry\n"226 << " e - Break on entry\n"
209 << " m - Break on module load\n"227 << " m - Break on module load\n"
210 << " x - Break on exception (first chance)\n"228 << " x - Break on exception (first chance)\n"
211 << " q - Suppress banner and configuration\n"229 << " q - Suppress banner and configuration\n"
230 << " t - Specify the number of system threads to use (0 < x <= 4)\n"
212 << " ? - Print help\n";231 << " ? - Print help\n";
213}232}
214 233
@@ -243,7 +262,21 @@ void process_arg(char* arg, std::function<char *()> next, exec_options &options) · 28 unmodified lines
243 break;262 break;
244 }263 }
245 }264 }
265 break;
266
267 case 't':
268 {
269 auto sys_threads_str = next();
270 if (sys_threads_str == nullptr)
271 throw arg_exception_t{ "System thread requires count" };
246 272
273 char *end;
274 auto sys_threads = ::strtol(sys_threads_str, &end, 10);
275 if (sys_threads <= 0 || 4 < sys_threads)
276 throw arg_exception_t{ "Invalid system thread value", sys_threads_str };
277
278 options.sys_thread_count = sys_threads;
279 }
247 break;280 break;
248 281
249 case 'q':282 case 'q':
@@ -293,7 +326,7 @@ int main(int argc, char* argv[]) · 43 unmodified lines
293 return EXIT_SUCCESS;326 return EXIT_SUCCESS;
294 }327 }
295 328
296 vm_t vm;329 vm_t vm{ options.sys_thread_count, options.thread_quanta };
297 330
298 if (options.enabled_debugger)331 if (options.enabled_debugger)
299 vm.load_tool(std::make_shared<debugger>(options.debugger));332 vm.load_tool(std::make_shared<debugger>(options.debugger));