]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/llvm/tools/llvm-objcopy/CopyConfig.h
Merge llvm, clang, compiler-rt, libc++, libunwind, lld, lldb and openmp
[FreeBSD/FreeBSD.git] / contrib / llvm / tools / llvm-objcopy / CopyConfig.h
1 //===- CopyConfig.h -------------------------------------------------------===//
2 //
3 //                      The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9
10 #ifndef LLVM_TOOLS_LLVM_OBJCOPY_COPY_CONFIG_H
11 #define LLVM_TOOLS_LLVM_OBJCOPY_COPY_CONFIG_H
12
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"
20 #include <string>
21 #include <vector>
22
23 namespace llvm {
24 namespace objcopy {
25
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
28 // ELF file.
29 struct MachineInfo {
30   uint16_t EMachine;
31   bool Is64Bit;
32   bool IsLittleEndian;
33 };
34
35 struct SectionRename {
36   StringRef OriginalName;
37   StringRef NewName;
38   Optional<uint64_t> NewFlags;
39 };
40
41 // Configuration for copying/stripping a single file.
42 struct CopyConfig {
43   // Main input/output options
44   StringRef InputFilename;
45   StringRef InputFormat;
46   StringRef OutputFilename;
47   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.
102 struct 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.
109 DriverConfig 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.
114 DriverConfig parseStripOptions(ArrayRef<const char *> ArgsArr);
115
116 } // namespace objcopy
117 } // namespace llvm
118
119 #endif