xref: /src/contrib/llvm-project/lldb/source/Commands/CommandOptionsProcessAttach.cpp (revision 06c3fb2749bda94cb5201f81ffdb8fa6c3161b2e)
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 Andric Status 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 Andric llvm::ArrayRef<OptionDefinition> CommandOptionsProcessAttach::GetDefinitions() {
757fa27ce4SDimitry Andric   return llvm::ArrayRef(g_process_attach_options);
767fa27ce4SDimitry Andric }
77