1 //===- CopyConfig.h -------------------------------------------------------===//
3 // The LLVM Compiler Infrastructure
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
10 #ifndef LLVM_TOOLS_LLVM_OBJCOPY_COPY_CONFIG_H
11 #define LLVM_TOOLS_LLVM_OBJCOPY_COPY_CONFIG_H
13 #include "llvm/ADT/ArrayRef.h"
14 #include "llvm/ADT/Optional.h"
15 #include "llvm/ADT/SmallVector.h"
16 #include "llvm/ADT/StringMap.h"
17 #include "llvm/ADT/StringRef.h"
18 // Necessary for llvm::DebugCompressionType::None
19 #include "llvm/Target/TargetOptions.h"
26 // This type keeps track of the machine info for various architectures. This
27 // lets us map architecture names to ELF types and the e_machine value of the
35 struct SectionRename {
36 StringRef OriginalName;
38 Optional<uint64_t> NewFlags;
41 // Configuration for copying/stripping a single file.
43 // Main input/output options
44 StringRef InputFilename;
45 StringRef InputFormat;
46 StringRef OutputFilename;
47 StringRef OutputFormat;
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;
55 StringRef AddGnuDebugLink;
56 StringRef BuildIdLinkDir;
57 Optional<StringRef> BuildIdLinkInput;
58 Optional<StringRef> BuildIdLinkOutput;
60 StringRef SymbolsPrefix;
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;
76 StringMap<SectionRename> SectionsToRename;
77 StringMap<StringRef> SymbolsToRename;
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;
95 bool DecompressDebugSections = false;
96 DebugCompressionType CompressionType = DebugCompressionType::None;
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.
102 struct DriverConfig {
103 SmallVector<CopyConfig, 1> CopyConfigs;
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
109 DriverConfig parseObjcopyOptions(ArrayRef<const char *> ArgsArr);
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
114 DriverConfig parseStripOptions(ArrayRef<const char *> ArgsArr);
116 } // namespace objcopy