diff --git a/private/runtest.sh b/private/runtest.sh index bebfcfc94..af3e573ee 100755 --- a/private/runtest.sh +++ b/private/runtest.sh @@ -14,7 +14,7 @@ fi --trace_kernel_calls=true \ --trace_user_calls=true \ --trace_instructions=false \ - \#--abort_before_entry=true \ + --abort_before_entry=true \ 1>build/run.txt #2>build/run.llvm.txt \ diff --git a/src/kernel/modules/xboxkrnl/module.cc b/src/kernel/modules/xboxkrnl/module.cc index b764f8a86..f4e5239b0 100644 --- a/src/kernel/modules/xboxkrnl/module.cc +++ b/src/kernel/modules/xboxkrnl/module.cc @@ -9,6 +9,8 @@ #include "kernel/modules/xboxkrnl/module.h" +#include + #include "kernel/modules/xboxkrnl/kernel_state.h" #include "kernel/modules/xboxkrnl/objects/xmodule.h" @@ -26,6 +28,10 @@ using namespace xe::kernel; using namespace xe::kernel::xboxkrnl; +DEFINE_bool(abort_before_entry, false, + "Abort execution right before launching the module."); + + namespace { } @@ -117,6 +123,12 @@ int XboxkrnlModule::LaunchModule(const char* path) { return 1; } + if (FLAGS_abort_before_entry) { + XELOGI(XT("--abort_before_entry causing an early exit")); + module->Release(); + return 0; + } + // Launch the module. // NOTE: this won't return until the module exits. result_code = module->Launch(0); diff --git a/tools/xenia-run/xenia-run.cc b/tools/xenia-run/xenia-run.cc index e284fd8f5..477a30b0d 100644 --- a/tools/xenia-run/xenia-run.cc +++ b/tools/xenia-run/xenia-run.cc @@ -18,10 +18,6 @@ using namespace xe::dbg; using namespace xe::kernel; -DEFINE_bool(abort_before_entry, false, - "Abort execution right before launching the module."); - - class Run { public: Run(); @@ -70,10 +66,6 @@ XECLEANUP: } int Run::Launch(const xechar_t* path) { - if (FLAGS_abort_before_entry) { - return 0; - } - // Normalize the path and make absolute. // TODO(benvanik): move this someplace common. xechar_t abs_path[XE_MAX_PATH];