xref: /llvm-project/lldb/source/Commands/CommandOptionsProcessAttach.cpp (revision 0642cd768b80665585c8500bed2933a3b99123dc)
13014a1c5SMed Ismail Bennani //===-- CommandOptionsProcessAttach.cpp -----------------------------------===//
23014a1c5SMed Ismail Bennani //
33014a1c5SMed Ismail Bennani // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
43014a1c5SMed Ismail Bennani // See https://llvm.org/LICENSE.txt for license information.
53014a1c5SMed Ismail Bennani // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
63014a1c5SMed Ismail Bennani //
73014a1c5SMed Ismail Bennani //===----------------------------------------------------------------------===//
83014a1c5SMed Ismail Bennani 
93014a1c5SMed Ismail Bennani #include "CommandOptionsProcessAttach.h"
103014a1c5SMed Ismail Bennani 
113014a1c5SMed Ismail Bennani #include "lldb/Host/FileSystem.h"
123014a1c5SMed Ismail Bennani #include "lldb/Host/HostInfo.h"
133014a1c5SMed Ismail Bennani #include "lldb/Host/OptionParser.h"
143014a1c5SMed Ismail Bennani #include "lldb/Interpreter/CommandCompletions.h"
153014a1c5SMed Ismail Bennani #include "lldb/Interpreter/CommandObject.h"
163014a1c5SMed Ismail Bennani #include "lldb/Interpreter/CommandOptionArgumentTable.h"
173014a1c5SMed Ismail Bennani #include "lldb/Interpreter/OptionArgParser.h"
183014a1c5SMed Ismail Bennani #include "lldb/Target/ExecutionContext.h"
193014a1c5SMed Ismail Bennani #include "lldb/Target/Platform.h"
203014a1c5SMed Ismail Bennani #include "lldb/Target/Target.h"
213014a1c5SMed Ismail Bennani 
223014a1c5SMed Ismail Bennani #include "llvm/ADT/ArrayRef.h"
233014a1c5SMed Ismail Bennani 
243014a1c5SMed Ismail Bennani using namespace llvm;
253014a1c5SMed Ismail Bennani using namespace lldb;
263014a1c5SMed Ismail Bennani using namespace lldb_private;
273014a1c5SMed Ismail Bennani 
283014a1c5SMed Ismail Bennani #define LLDB_OPTIONS_process_attach
293014a1c5SMed Ismail Bennani #include "CommandOptions.inc"
303014a1c5SMed Ismail Bennani 
313014a1c5SMed Ismail Bennani Status CommandOptionsProcessAttach::SetOptionValue(
323014a1c5SMed Ismail Bennani     uint32_t option_idx, llvm::StringRef option_arg,
333014a1c5SMed Ismail Bennani     ExecutionContext *execution_context) {
343014a1c5SMed Ismail Bennani   Status error;
353014a1c5SMed Ismail Bennani   const int short_option = g_process_attach_options[option_idx].short_option;
363014a1c5SMed Ismail Bennani   switch (short_option) {
373014a1c5SMed Ismail Bennani   case 'c':
383014a1c5SMed Ismail Bennani     attach_info.SetContinueOnceAttached(true);
393014a1c5SMed Ismail Bennani     break;
403014a1c5SMed Ismail Bennani 
413014a1c5SMed Ismail Bennani   case 'p': {
423014a1c5SMed Ismail Bennani     lldb::pid_t pid;
433014a1c5SMed Ismail Bennani     if (option_arg.getAsInteger(0, pid)) {
44*0642cd76SAdrian Prantl       return Status::FromErrorStringWithFormatv("invalid process ID '{0}'",
45*0642cd76SAdrian Prantl                                                 option_arg);
463014a1c5SMed Ismail Bennani     } else {
473014a1c5SMed Ismail Bennani       attach_info.SetProcessID(pid);
483014a1c5SMed Ismail Bennani     }
493014a1c5SMed Ismail Bennani   } break;
503014a1c5SMed Ismail Bennani 
513014a1c5SMed Ismail Bennani   case 'P':
523014a1c5SMed Ismail Bennani     attach_info.SetProcessPluginName(option_arg);
533014a1c5SMed Ismail Bennani     break;
543014a1c5SMed Ismail Bennani 
553014a1c5SMed Ismail Bennani   case 'n':
563014a1c5SMed Ismail Bennani     attach_info.GetExecutableFile().SetFile(option_arg,
573014a1c5SMed Ismail Bennani                                             FileSpec::Style::native);
583014a1c5SMed Ismail Bennani     break;
593014a1c5SMed Ismail Bennani 
603014a1c5SMed Ismail Bennani   case 'w':
613014a1c5SMed Ismail Bennani     attach_info.SetWaitForLaunch(true);
623014a1c5SMed Ismail Bennani     break;
633014a1c5SMed Ismail Bennani 
643014a1c5SMed Ismail Bennani   case 'i':
653014a1c5SMed Ismail Bennani     attach_info.SetIgnoreExisting(false);
663014a1c5SMed Ismail Bennani     break;
673014a1c5SMed Ismail Bennani 
683014a1c5SMed Ismail Bennani   default:
693014a1c5SMed Ismail Bennani     llvm_unreachable("Unimplemented option");
703014a1c5SMed Ismail Bennani   }
713014a1c5SMed Ismail Bennani   return error;
723014a1c5SMed Ismail Bennani }
733014a1c5SMed Ismail Bennani 
743014a1c5SMed Ismail Bennani llvm::ArrayRef<OptionDefinition> CommandOptionsProcessAttach::GetDefinitions() {
75088da8a0SArthur Eubanks   return llvm::ArrayRef(g_process_attach_options);
763014a1c5SMed Ismail Bennani }
77