@@ -202,12 +202,13 @@ static void printHelp(LLDBDAPOptTable &table, llvm::StringRef tool_name) {
202
202
//
203
203
// In case of errors launching the target, a suitable error message will be
204
204
// 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[]) {
208
209
#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 " );
211
212
#else
212
213
213
214
// 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,
219
220
#endif
220
221
221
222
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;
226
225
227
226
// We will wait to be attached with a timeout. We don't wait indefinitely
228
227
// using a signal to prevent being paused forever.
@@ -233,17 +232,16 @@ static void LaunchRunInTerminalTarget(llvm::opt::Arg &target_arg,
233
232
timeout_env_var != nullptr ? atoi (timeout_env_var) : 20000 ;
234
233
if (llvm::Error err = comm_channel.WaitUntilDebugAdaptorAttaches (
235
234
std::chrono::milliseconds (timeout_in_ms))) {
236
- llvm::errs () << llvm::toString (std::move (err)) << " \n " ;
237
- exit (EXIT_FAILURE);
235
+ return err;
238
236
}
239
237
240
238
const char *target = target_arg.getValue ();
241
239
execvp (target, argv);
242
240
243
241
std::string error = std::strerror (errno);
244
242
comm_channel.NotifyError (error);
245
- llvm::errs () << error << " \n " ;
246
- exit (EXIT_FAILURE );
243
+ return llvm::createStringError ( llvm::inconvertibleErrorCode (),
244
+ std::move (error) );
247
245
#endif
248
246
}
249
247
@@ -471,13 +469,18 @@ int main(int argc, char *argv[]) {
471
469
}
472
470
}
473
471
int target_args_pos = argc;
474
- for (int i = 0 ; i < argc; i++)
472
+ for (int i = 0 ; i < argc; i++) {
475
473
if (strcmp (argv[i], " --launch-target" ) == 0 ) {
476
474
target_args_pos = i + 1 ;
477
475
break ;
478
476
}
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
+ }
481
484
} else {
482
485
llvm::errs () << " \" --launch-target\" requires \" --comm-file\" to be "
483
486
" specified\n " ;
0 commit comments