xref: /freebsd-src/contrib/llvm-project/lldb/source/Commands/CommandOptionsProcessAttach.cpp (revision 06c3fb2749bda94cb5201f81ffdb8fa6c3161b2e)
1*06c3fb27SDimitry Andric //===-- CommandOptionsProcessAttach.cpp -----------------------------------===//
2*06c3fb27SDimitry Andric //
3*06c3fb27SDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4*06c3fb27SDimitry Andric // See https://llvm.org/LICENSE.txt for license information.
5*06c3fb27SDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6*06c3fb27SDimitry Andric //
7*06c3fb27SDimitry Andric //===----------------------------------------------------------------------===//
8*06c3fb27SDimitry Andric 
9*06c3fb27SDimitry Andric #include "CommandOptionsProcessAttach.h"
10*06c3fb27SDimitry Andric 
11*06c3fb27SDimitry Andric #include "lldb/Host/FileSystem.h"
12*06c3fb27SDimitry Andric #include "lldb/Host/HostInfo.h"
13*06c3fb27SDimitry Andric #include "lldb/Host/OptionParser.h"
14*06c3fb27SDimitry Andric #include "lldb/Interpreter/CommandCompletions.h"
15*06c3fb27SDimitry Andric #include "lldb/Interpreter/CommandObject.h"
16*06c3fb27SDimitry Andric #include "lldb/Interpreter/CommandOptionArgumentTable.h"
17*06c3fb27SDimitry Andric #include "lldb/Interpreter/OptionArgParser.h"
18*06c3fb27SDimitry Andric #include "lldb/Target/ExecutionContext.h"
19*06c3fb27SDimitry Andric #include "lldb/Target/Platform.h"
20*06c3fb27SDimitry Andric #include "lldb/Target/Target.h"
21*06c3fb27SDimitry Andric 
22*06c3fb27SDimitry Andric #include "llvm/ADT/ArrayRef.h"
23*06c3fb27SDimitry Andric 
24*06c3fb27SDimitry Andric using namespace llvm;
25*06c3fb27SDimitry Andric using namespace lldb;
26*06c3fb27SDimitry Andric using namespace lldb_private;
27*06c3fb27SDimitry Andric 
28*06c3fb27SDimitry Andric #define LLDB_OPTIONS_process_attach
29*06c3fb27SDimitry Andric #include "CommandOptions.inc"
30*06c3fb27SDimitry Andric 
SetOptionValue(uint32_t option_idx,llvm::StringRef option_arg,ExecutionContext * execution_context)31*06c3fb27SDimitry Andric Status CommandOptionsProcessAttach::SetOptionValue(
32*06c3fb27SDimitry Andric     uint32_t option_idx, llvm::StringRef option_arg,
33*06c3fb27SDimitry Andric     ExecutionContext *execution_context) {
34*06c3fb27SDimitry Andric   Status error;
35*06c3fb27SDimitry Andric   const int short_option = g_process_attach_options[option_idx].short_option;
36*06c3fb27SDimitry Andric   switch (short_option) {
37*06c3fb27SDimitry Andric   case 'c':
38*06c3fb27SDimitry Andric     attach_info.SetContinueOnceAttached(true);
39*06c3fb27SDimitry Andric     break;
40*06c3fb27SDimitry Andric 
41*06c3fb27SDimitry Andric   case 'p': {
42*06c3fb27SDimitry Andric     lldb::pid_t pid;
43*06c3fb27SDimitry Andric     if (option_arg.getAsInteger(0, pid)) {
44*06c3fb27SDimitry Andric       error.SetErrorStringWithFormat("invalid process ID '%s'",
45*06c3fb27SDimitry Andric                                      option_arg.str().c_str());
46*06c3fb27SDimitry Andric     } else {
47*06c3fb27SDimitry Andric       attach_info.SetProcessID(pid);
48*06c3fb27SDimitry Andric     }
49*06c3fb27SDimitry Andric   } break;
50*06c3fb27SDimitry Andric 
51*06c3fb27SDimitry Andric   case 'P':
52*06c3fb27SDimitry Andric     attach_info.SetProcessPluginName(option_arg);
53*06c3fb27SDimitry Andric     break;
54*06c3fb27SDimitry Andric 
55*06c3fb27SDimitry Andric   case 'n':
56*06c3fb27SDimitry Andric     attach_info.GetExecutableFile().SetFile(option_arg,
57*06c3fb27SDimitry Andric                                             FileSpec::Style::native);
58*06c3fb27SDimitry Andric     break;
59*06c3fb27SDimitry Andric 
60*06c3fb27SDimitry Andric   case 'w':
61*06c3fb27SDimitry Andric     attach_info.SetWaitForLaunch(true);
62*06c3fb27SDimitry Andric     break;
63*06c3fb27SDimitry Andric 
64*06c3fb27SDimitry Andric   case 'i':
65*06c3fb27SDimitry Andric     attach_info.SetIgnoreExisting(false);
66*06c3fb27SDimitry Andric     break;
67*06c3fb27SDimitry Andric 
68*06c3fb27SDimitry Andric   default:
69*06c3fb27SDimitry Andric     llvm_unreachable("Unimplemented option");
70*06c3fb27SDimitry Andric   }
71*06c3fb27SDimitry Andric   return error;
72*06c3fb27SDimitry Andric }
73*06c3fb27SDimitry Andric 
GetDefinitions()74*06c3fb27SDimitry Andric llvm::ArrayRef<OptionDefinition> CommandOptionsProcessAttach::GetDefinitions() {
75*06c3fb27SDimitry Andric   return llvm::ArrayRef(g_process_attach_options);
76*06c3fb27SDimitry Andric }
77