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