@@ -202,12 +202,13 @@ static void printHelp(LLDBDAPOptTable &table, llvm::StringRef tool_name) {
202202//
203203// In case of errors launching the target, a suitable error message will be
204204// emitted to the debug adaptor.
205- static void LaunchRunInTerminalTarget (llvm::opt::Arg &target_arg,
206- llvm::StringRef comm_file,
207- lldb::pid_t debugger_pid, char *argv[]) {
205+ static llvm::Error LaunchRunInTerminalTarget (llvm::opt::Arg &target_arg,
206+ llvm::StringRef comm_file,
207+ lldb::pid_t debugger_pid,
208+ char *argv[]) {
208209#if defined(_WIN32)
209- llvm::errs () << " runInTerminal is only supported on POSIX systems \n " ;
210- exit (EXIT_FAILURE );
210+ return llvm::createStringError (
211+ " runInTerminal is only supported on POSIX systems " );
211212#else
212213
213214 // On Linux with the Yama security module enabled, a process can only attach
@@ -219,10 +220,8 @@ static void LaunchRunInTerminalTarget(llvm::opt::Arg &target_arg,
219220#endif
220221
221222 RunInTerminalLauncherCommChannel comm_channel (comm_file);
222- if (llvm::Error err = comm_channel.NotifyPid ()) {
223- llvm::errs () << llvm::toString (std::move (err)) << " \n " ;
224- exit (EXIT_FAILURE);
225- }
223+ if (llvm::Error err = comm_channel.NotifyPid ())
224+ return err;
226225
227226 // We will wait to be attached with a timeout. We don't wait indefinitely
228227 // using a signal to prevent being paused forever.
@@ -233,17 +232,16 @@ static void LaunchRunInTerminalTarget(llvm::opt::Arg &target_arg,
233232 timeout_env_var != nullptr ? atoi (timeout_env_var) : 20000 ;
234233 if (llvm::Error err = comm_channel.WaitUntilDebugAdaptorAttaches (
235234 std::chrono::milliseconds (timeout_in_ms))) {
236- llvm::errs () << llvm::toString (std::move (err)) << " \n " ;
237- exit (EXIT_FAILURE);
235+ return err;
238236 }
239237
240238 const char *target = target_arg.getValue ();
241239 execvp (target, argv);
242240
243241 std::string error = std::strerror (errno);
244242 comm_channel.NotifyError (error);
245- llvm::errs () << error << " \n " ;
246- exit (EXIT_FAILURE );
243+ return llvm::createStringError ( llvm::inconvertibleErrorCode (),
244+ std::move (error) );
247245#endif
248246}
249247
@@ -471,13 +469,18 @@ int main(int argc, char *argv[]) {
471469 }
472470 }
473471 int target_args_pos = argc;
474- for (int i = 0 ; i < argc; i++)
472+ for (int i = 0 ; i < argc; i++) {
475473 if (strcmp (argv[i], " --launch-target" ) == 0 ) {
476474 target_args_pos = i + 1 ;
477475 break ;
478476 }
479- LaunchRunInTerminalTarget (*target_arg, comm_file->getValue (), pid,
480- argv + target_args_pos);
477+ }
478+ if (llvm::Error err =
479+ LaunchRunInTerminalTarget (*target_arg, comm_file->getValue (), pid,
480+ argv + target_args_pos)) {
481+ llvm::errs () << llvm::toString (std::move (err)) << ' \n ' ;
482+ return EXIT_FAILURE;
483+ }
481484 } else {
482485 llvm::errs () << " \" --launch-target\" requires \" --comm-file\" to be "
483486 " specified\n " ;
0 commit comments