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