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 AndricStatus 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 Andricllvm::ArrayRef<OptionDefinition> CommandOptionsProcessAttach::GetDefinitions() { 75*06c3fb27SDimitry Andric return llvm::ArrayRef(g_process_attach_options); 76*06c3fb27SDimitry Andric } 77