@@ -197,12 +197,13 @@ static void printHelp(LLDBDAPOptTable &table, llvm::StringRef tool_name) {
197197//
198198// In case of errors launching the target, a suitable error message will be
199199// emitted to the debug adaptor.
200- static void LaunchRunInTerminalTarget (llvm::opt::Arg &target_arg,
201- llvm::StringRef comm_file,
202- lldb::pid_t debugger_pid, char *argv[]) {
200+ static llvm::Error LaunchRunInTerminalTarget (llvm::opt::Arg &target_arg,
201+ llvm::StringRef comm_file,
202+ lldb::pid_t debugger_pid,
203+ char *argv[]) {
203204#if defined(_WIN32)
204- llvm::errs () << " runInTerminal is only supported on POSIX systems \n " ;
205- exit (EXIT_FAILURE );
205+ return llvm::createStringError (
206+ " runInTerminal is only supported on POSIX systems " );
206207#else
207208
208209 // On Linux with the Yama security module enabled, a process can only attach
@@ -214,10 +215,8 @@ static void LaunchRunInTerminalTarget(llvm::opt::Arg &target_arg,
214215#endif
215216
216217 RunInTerminalLauncherCommChannel comm_channel (comm_file);
217- if (llvm::Error err = comm_channel.NotifyPid ()) {
218- llvm::errs () << llvm::toString (std::move (err)) << " \n " ;
219- exit (EXIT_FAILURE);
220- }
218+ if (llvm::Error err = comm_channel.NotifyPid ())
219+ return err;
221220
222221 // We will wait to be attached with a timeout. We don't wait indefinitely
223222 // using a signal to prevent being paused forever.
@@ -228,17 +227,16 @@ static void LaunchRunInTerminalTarget(llvm::opt::Arg &target_arg,
228227 timeout_env_var != nullptr ? atoi (timeout_env_var) : 20000 ;
229228 if (llvm::Error err = comm_channel.WaitUntilDebugAdaptorAttaches (
230229 std::chrono::milliseconds (timeout_in_ms))) {
231- llvm::errs () << llvm::toString (std::move (err)) << " \n " ;
232- exit (EXIT_FAILURE);
230+ return err;
233231 }
234232
235233 const char *target = target_arg.getValue ();
236234 execvp (target, argv);
237235
238236 std::string error = std::strerror (errno);
239237 comm_channel.NotifyError (error);
240- llvm::errs () << error << " \n " ;
241- exit (EXIT_FAILURE );
238+ return llvm::createStringError ( llvm::inconvertibleErrorCode (),
239+ std::move (error) );
242240#endif
243241}
244242
@@ -469,13 +467,18 @@ int main(int argc, char *argv[]) {
469467 }
470468 }
471469 int target_args_pos = argc;
472- for (int i = 0 ; i < argc; i++)
470+ for (int i = 0 ; i < argc; i++) {
473471 if (strcmp (argv[i], " --launch-target" ) == 0 ) {
474472 target_args_pos = i + 1 ;
475473 break ;
476474 }
477- LaunchRunInTerminalTarget (*target_arg, comm_file->getValue (), pid,
478- argv + target_args_pos);
475+ }
476+ if (llvm::Error err =
477+ LaunchRunInTerminalTarget (*target_arg, comm_file->getValue (), pid,
478+ argv + target_args_pos)) {
479+ llvm::errs () << llvm::toString (std::move (err)) << ' \n ' ;
480+ return EXIT_FAILURE;
481+ }
479482 } else {
480483 llvm::errs () << " \" --launch-target\" requires \" --comm-file\" to be "
481484 " specified\n " ;
0 commit comments