17fa27ce4SDimitry Andric //===-- CommandOptionsProcessAttach.cpp -----------------------------------===// 27fa27ce4SDimitry Andric // 37fa27ce4SDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 47fa27ce4SDimitry Andric // See https://llvm.org/LICENSE.txt for license information. 57fa27ce4SDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 67fa27ce4SDimitry Andric // 77fa27ce4SDimitry Andric //===----------------------------------------------------------------------===// 87fa27ce4SDimitry Andric 97fa27ce4SDimitry Andric #include "CommandOptionsProcessAttach.h" 107fa27ce4SDimitry Andric 117fa27ce4SDimitry Andric #include "lldb/Host/FileSystem.h" 127fa27ce4SDimitry Andric #include "lldb/Host/HostInfo.h" 137fa27ce4SDimitry Andric #include "lldb/Host/OptionParser.h" 147fa27ce4SDimitry Andric #include "lldb/Interpreter/CommandCompletions.h" 157fa27ce4SDimitry Andric #include "lldb/Interpreter/CommandObject.h" 167fa27ce4SDimitry Andric #include "lldb/Interpreter/CommandOptionArgumentTable.h" 177fa27ce4SDimitry Andric #include "lldb/Interpreter/OptionArgParser.h" 187fa27ce4SDimitry Andric #include "lldb/Target/ExecutionContext.h" 197fa27ce4SDimitry Andric #include "lldb/Target/Platform.h" 207fa27ce4SDimitry Andric #include "lldb/Target/Target.h" 217fa27ce4SDimitry Andric 227fa27ce4SDimitry Andric #include "llvm/ADT/ArrayRef.h" 237fa27ce4SDimitry Andric 247fa27ce4SDimitry Andric using namespace llvm; 257fa27ce4SDimitry Andric using namespace lldb; 267fa27ce4SDimitry Andric using namespace lldb_private; 277fa27ce4SDimitry Andric 287fa27ce4SDimitry Andric #define LLDB_OPTIONS_process_attach 297fa27ce4SDimitry Andric #include "CommandOptions.inc" 307fa27ce4SDimitry Andric SetOptionValue(uint32_t option_idx,llvm::StringRef option_arg,ExecutionContext * execution_context)317fa27ce4SDimitry AndricStatus CommandOptionsProcessAttach::SetOptionValue( 327fa27ce4SDimitry Andric uint32_t option_idx, llvm::StringRef option_arg, 337fa27ce4SDimitry Andric ExecutionContext *execution_context) { 347fa27ce4SDimitry Andric Status error; 357fa27ce4SDimitry Andric const int short_option = g_process_attach_options[option_idx].short_option; 367fa27ce4SDimitry Andric switch (short_option) { 377fa27ce4SDimitry Andric case 'c': 387fa27ce4SDimitry Andric attach_info.SetContinueOnceAttached(true); 397fa27ce4SDimitry Andric break; 407fa27ce4SDimitry Andric 417fa27ce4SDimitry Andric case 'p': { 427fa27ce4SDimitry Andric lldb::pid_t pid; 437fa27ce4SDimitry Andric if (option_arg.getAsInteger(0, pid)) { 447fa27ce4SDimitry Andric error.SetErrorStringWithFormat("invalid process ID '%s'", 457fa27ce4SDimitry Andric option_arg.str().c_str()); 467fa27ce4SDimitry Andric } else { 477fa27ce4SDimitry Andric attach_info.SetProcessID(pid); 487fa27ce4SDimitry Andric } 497fa27ce4SDimitry Andric } break; 507fa27ce4SDimitry Andric 517fa27ce4SDimitry Andric case 'P': 527fa27ce4SDimitry Andric attach_info.SetProcessPluginName(option_arg); 537fa27ce4SDimitry Andric break; 547fa27ce4SDimitry Andric 557fa27ce4SDimitry Andric case 'n': 567fa27ce4SDimitry Andric attach_info.GetExecutableFile().SetFile(option_arg, 577fa27ce4SDimitry Andric FileSpec::Style::native); 587fa27ce4SDimitry Andric break; 597fa27ce4SDimitry Andric 607fa27ce4SDimitry Andric case 'w': 617fa27ce4SDimitry Andric attach_info.SetWaitForLaunch(true); 627fa27ce4SDimitry Andric break; 637fa27ce4SDimitry Andric 647fa27ce4SDimitry Andric case 'i': 657fa27ce4SDimitry Andric attach_info.SetIgnoreExisting(false); 667fa27ce4SDimitry Andric break; 677fa27ce4SDimitry Andric 687fa27ce4SDimitry Andric default: 697fa27ce4SDimitry Andric llvm_unreachable("Unimplemented option"); 707fa27ce4SDimitry Andric } 717fa27ce4SDimitry Andric return error; 727fa27ce4SDimitry Andric } 737fa27ce4SDimitry Andric GetDefinitions()747fa27ce4SDimitry Andricllvm::ArrayRef<OptionDefinition> CommandOptionsProcessAttach::GetDefinitions() { 757fa27ce4SDimitry Andric return llvm::ArrayRef(g_process_attach_options); 767fa27ce4SDimitry Andric } 77