CopyConfig.h revision 343171
10Sduke//===- CopyConfig.h -------------------------------------------------------===// 22362Sohair// 30Sduke// The LLVM Compiler Infrastructure 40Sduke// 50Sduke// This file is distributed under the University of Illinois Open Source 60Sduke// License. See LICENSE.TXT for details. 70Sduke// 80Sduke//===----------------------------------------------------------------------===// 90Sduke 100Sduke#ifndef LLVM_TOOLS_LLVM_OBJCOPY_COPY_CONFIG_H 110Sduke#define LLVM_TOOLS_LLVM_OBJCOPY_COPY_CONFIG_H 120Sduke 130Sduke#include "llvm/ADT/ArrayRef.h" 140Sduke#include "llvm/ADT/Optional.h" 150Sduke#include "llvm/ADT/SmallVector.h" 160Sduke#include "llvm/ADT/StringMap.h" 170Sduke#include "llvm/ADT/StringRef.h" 180Sduke// Necessary for llvm::DebugCompressionType::None 192362Sohair#include "llvm/Target/TargetOptions.h" 202362Sohair#include <string> 212362Sohair#include <vector> 220Sduke 230Sdukenamespace llvm { 240Sdukenamespace objcopy { 250Sduke 260Sduke// This type keeps track of the machine info for various architectures. This 270Sduke// lets us map architecture names to ELF types and the e_machine value of the 280Sduke// ELF file. 290Sdukestruct MachineInfo { 300Sduke uint16_t EMachine; 310Sduke bool Is64Bit; 320Sduke bool IsLittleEndian; 330Sduke}; 340Sduke 350Sdukestruct SectionRename { 360Sduke StringRef OriginalName; 370Sduke StringRef NewName; 380Sduke Optional<uint64_t> NewFlags; 390Sduke}; 400Sduke 410Sduke// Configuration for copying/stripping a single file. 420Sdukestruct CopyConfig { 430Sduke // Main input/output options 440Sduke StringRef InputFilename; 450Sduke StringRef InputFormat; 460Sduke StringRef OutputFilename; 470Sduke StringRef OutputFormat; 48 49 // Only applicable for --input-format=binary 50 MachineInfo BinaryArch; 51 // Only applicable when --output-format!=binary (e.g. elf64-x86-64). 52 Optional<MachineInfo> OutputArch; 53 54 // Advanced options 55 StringRef AddGnuDebugLink; 56 StringRef BuildIdLinkDir; 57 Optional<StringRef> BuildIdLinkInput; 58 Optional<StringRef> BuildIdLinkOutput; 59 StringRef SplitDWO; 60 StringRef SymbolsPrefix; 61 62 // Repeated options 63 std::vector<StringRef> AddSection; 64 std::vector<StringRef> DumpSection; 65 std::vector<StringRef> KeepSection; 66 std::vector<StringRef> OnlySection; 67 std::vector<StringRef> SymbolsToGlobalize; 68 std::vector<StringRef> SymbolsToKeep; 69 std::vector<StringRef> SymbolsToLocalize; 70 std::vector<StringRef> SymbolsToRemove; 71 std::vector<StringRef> SymbolsToWeaken; 72 std::vector<StringRef> ToRemove; 73 std::vector<std::string> SymbolsToKeepGlobal; 74 75 // Map options 76 StringMap<SectionRename> SectionsToRename; 77 StringMap<StringRef> SymbolsToRename; 78 79 // Boolean options 80 bool DeterministicArchives = true; 81 bool DiscardAll = false; 82 bool ExtractDWO = false; 83 bool KeepFileSymbols = false; 84 bool LocalizeHidden = false; 85 bool OnlyKeepDebug = false; 86 bool PreserveDates = false; 87 bool StripAll = false; 88 bool StripAllGNU = false; 89 bool StripDWO = false; 90 bool StripDebug = false; 91 bool StripNonAlloc = false; 92 bool StripSections = false; 93 bool StripUnneeded = false; 94 bool Weaken = false; 95 bool DecompressDebugSections = false; 96 DebugCompressionType CompressionType = DebugCompressionType::None; 97}; 98 99// Configuration for the overall invocation of this tool. When invoked as 100// objcopy, will always contain exactly one CopyConfig. When invoked as strip, 101// will contain one or more CopyConfigs. 102struct DriverConfig { 103 SmallVector<CopyConfig, 1> CopyConfigs; 104}; 105 106// ParseObjcopyOptions returns the config and sets the input arguments. If a 107// help flag is set then ParseObjcopyOptions will print the help messege and 108// exit. 109DriverConfig parseObjcopyOptions(ArrayRef<const char *> ArgsArr); 110 111// ParseStripOptions returns the config and sets the input arguments. If a 112// help flag is set then ParseStripOptions will print the help messege and 113// exit. 114DriverConfig parseStripOptions(ArrayRef<const char *> ArgsArr); 115 116} // namespace objcopy 117} // namespace llvm 118 119#endif 120