aboutsummaryrefslogtreecommitdiffstats
path: root/contrib/libs/llvm12/tools/llvm-objcopy/COFF/Object.h
diff options
context:
space:
mode:
authororivej <orivej@yandex-team.ru>2022-02-10 16:44:49 +0300
committerDaniil Cherednik <dcherednik@yandex-team.ru>2022-02-10 16:44:49 +0300
commit718c552901d703c502ccbefdfc3c9028d608b947 (patch)
tree46534a98bbefcd7b1f3faa5b52c138ab27db75b7 /contrib/libs/llvm12/tools/llvm-objcopy/COFF/Object.h
parente9656aae26e0358d5378e5b63dcac5c8dbe0e4d0 (diff)
downloadydb-718c552901d703c502ccbefdfc3c9028d608b947.tar.gz
Restoring authorship annotation for <orivej@yandex-team.ru>. Commit 1 of 2.
Diffstat (limited to 'contrib/libs/llvm12/tools/llvm-objcopy/COFF/Object.h')
-rw-r--r--contrib/libs/llvm12/tools/llvm-objcopy/COFF/Object.h418
1 files changed, 209 insertions, 209 deletions
diff --git a/contrib/libs/llvm12/tools/llvm-objcopy/COFF/Object.h b/contrib/libs/llvm12/tools/llvm-objcopy/COFF/Object.h
index 0e854b58cb..9602f56e63 100644
--- a/contrib/libs/llvm12/tools/llvm-objcopy/COFF/Object.h
+++ b/contrib/libs/llvm12/tools/llvm-objcopy/COFF/Object.h
@@ -1,211 +1,211 @@
-//===- Object.h -------------------------------------------------*- C++ -*-===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef LLVM_TOOLS_OBJCOPY_COFF_OBJECT_H
-#define LLVM_TOOLS_OBJCOPY_COFF_OBJECT_H
-
-#include "llvm/ADT/ArrayRef.h"
-#include "llvm/ADT/DenseMap.h"
-#include "llvm/ADT/Optional.h"
-#include "llvm/ADT/StringRef.h"
-#include "llvm/ADT/iterator_range.h"
-#include "llvm/BinaryFormat/COFF.h"
-#include "llvm/Object/COFF.h"
-#include <cstddef>
-#include <cstdint>
-#include <vector>
-
-namespace llvm {
-namespace objcopy {
-namespace coff {
-
-struct Relocation {
- Relocation() = default;
+//===- Object.h -------------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_TOOLS_OBJCOPY_COFF_OBJECT_H
+#define LLVM_TOOLS_OBJCOPY_COFF_OBJECT_H
+
+#include "llvm/ADT/ArrayRef.h"
+#include "llvm/ADT/DenseMap.h"
+#include "llvm/ADT/Optional.h"
+#include "llvm/ADT/StringRef.h"
+#include "llvm/ADT/iterator_range.h"
+#include "llvm/BinaryFormat/COFF.h"
+#include "llvm/Object/COFF.h"
+#include <cstddef>
+#include <cstdint>
+#include <vector>
+
+namespace llvm {
+namespace objcopy {
+namespace coff {
+
+struct Relocation {
+ Relocation() = default;
Relocation(const object::coff_relocation &R) : Reloc(R) {}
-
- object::coff_relocation Reloc;
- size_t Target = 0;
- StringRef TargetName; // Used for diagnostics only
-};
-
-struct Section {
- object::coff_section Header;
- std::vector<Relocation> Relocs;
- StringRef Name;
- ssize_t UniqueId;
- size_t Index;
-
- ArrayRef<uint8_t> getContents() const {
- if (!OwnedContents.empty())
- return OwnedContents;
- return ContentsRef;
- }
-
- void setContentsRef(ArrayRef<uint8_t> Data) {
- OwnedContents.clear();
- ContentsRef = Data;
- }
-
- void setOwnedContents(std::vector<uint8_t> &&Data) {
- ContentsRef = ArrayRef<uint8_t>();
- OwnedContents = std::move(Data);
- }
-
- void clearContents() {
- ContentsRef = ArrayRef<uint8_t>();
- OwnedContents.clear();
- }
-
-private:
- ArrayRef<uint8_t> ContentsRef;
- std::vector<uint8_t> OwnedContents;
-};
-
-struct AuxSymbol {
- AuxSymbol(ArrayRef<uint8_t> In) {
- assert(In.size() == sizeof(Opaque));
- std::copy(In.begin(), In.end(), Opaque);
- }
-
- ArrayRef<uint8_t> getRef() const {
- return ArrayRef<uint8_t>(Opaque, sizeof(Opaque));
- }
-
- uint8_t Opaque[sizeof(object::coff_symbol16)];
-};
-
-struct Symbol {
- object::coff_symbol32 Sym;
- StringRef Name;
- std::vector<AuxSymbol> AuxData;
- StringRef AuxFile;
- ssize_t TargetSectionId;
- ssize_t AssociativeComdatTargetSectionId = 0;
- Optional<size_t> WeakTargetSymbolId;
- size_t UniqueId;
- size_t RawIndex;
- bool Referenced;
-};
-
-struct Object {
- bool IsPE = false;
-
- object::dos_header DosHeader;
- ArrayRef<uint8_t> DosStub;
-
- object::coff_file_header CoffFileHeader;
-
- bool Is64 = false;
- object::pe32plus_header PeHeader;
- uint32_t BaseOfData = 0; // pe32plus_header lacks this field.
-
- std::vector<object::data_directory> DataDirectories;
-
- ArrayRef<Symbol> getSymbols() const { return Symbols; }
- // This allows mutating individual Symbols, but not mutating the list
- // of symbols itself.
- iterator_range<std::vector<Symbol>::iterator> getMutableSymbols() {
- return make_range(Symbols.begin(), Symbols.end());
- }
-
- const Symbol *findSymbol(size_t UniqueId) const;
-
- void addSymbols(ArrayRef<Symbol> NewSymbols);
+
+ object::coff_relocation Reloc;
+ size_t Target = 0;
+ StringRef TargetName; // Used for diagnostics only
+};
+
+struct Section {
+ object::coff_section Header;
+ std::vector<Relocation> Relocs;
+ StringRef Name;
+ ssize_t UniqueId;
+ size_t Index;
+
+ ArrayRef<uint8_t> getContents() const {
+ if (!OwnedContents.empty())
+ return OwnedContents;
+ return ContentsRef;
+ }
+
+ void setContentsRef(ArrayRef<uint8_t> Data) {
+ OwnedContents.clear();
+ ContentsRef = Data;
+ }
+
+ void setOwnedContents(std::vector<uint8_t> &&Data) {
+ ContentsRef = ArrayRef<uint8_t>();
+ OwnedContents = std::move(Data);
+ }
+
+ void clearContents() {
+ ContentsRef = ArrayRef<uint8_t>();
+ OwnedContents.clear();
+ }
+
+private:
+ ArrayRef<uint8_t> ContentsRef;
+ std::vector<uint8_t> OwnedContents;
+};
+
+struct AuxSymbol {
+ AuxSymbol(ArrayRef<uint8_t> In) {
+ assert(In.size() == sizeof(Opaque));
+ std::copy(In.begin(), In.end(), Opaque);
+ }
+
+ ArrayRef<uint8_t> getRef() const {
+ return ArrayRef<uint8_t>(Opaque, sizeof(Opaque));
+ }
+
+ uint8_t Opaque[sizeof(object::coff_symbol16)];
+};
+
+struct Symbol {
+ object::coff_symbol32 Sym;
+ StringRef Name;
+ std::vector<AuxSymbol> AuxData;
+ StringRef AuxFile;
+ ssize_t TargetSectionId;
+ ssize_t AssociativeComdatTargetSectionId = 0;
+ Optional<size_t> WeakTargetSymbolId;
+ size_t UniqueId;
+ size_t RawIndex;
+ bool Referenced;
+};
+
+struct Object {
+ bool IsPE = false;
+
+ object::dos_header DosHeader;
+ ArrayRef<uint8_t> DosStub;
+
+ object::coff_file_header CoffFileHeader;
+
+ bool Is64 = false;
+ object::pe32plus_header PeHeader;
+ uint32_t BaseOfData = 0; // pe32plus_header lacks this field.
+
+ std::vector<object::data_directory> DataDirectories;
+
+ ArrayRef<Symbol> getSymbols() const { return Symbols; }
+ // This allows mutating individual Symbols, but not mutating the list
+ // of symbols itself.
+ iterator_range<std::vector<Symbol>::iterator> getMutableSymbols() {
+ return make_range(Symbols.begin(), Symbols.end());
+ }
+
+ const Symbol *findSymbol(size_t UniqueId) const;
+
+ void addSymbols(ArrayRef<Symbol> NewSymbols);
Error removeSymbols(function_ref<Expected<bool>(const Symbol &)> ToRemove);
-
- // Set the Referenced field on all Symbols, based on relocations in
- // all sections.
- Error markSymbols();
-
- ArrayRef<Section> getSections() const { return Sections; }
- // This allows mutating individual Sections, but not mutating the list
- // of sections itself.
- iterator_range<std::vector<Section>::iterator> getMutableSections() {
- return make_range(Sections.begin(), Sections.end());
- }
-
- const Section *findSection(ssize_t UniqueId) const;
-
- void addSections(ArrayRef<Section> NewSections);
- void removeSections(function_ref<bool(const Section &)> ToRemove);
- void truncateSections(function_ref<bool(const Section &)> ToTruncate);
-
-private:
- std::vector<Symbol> Symbols;
- DenseMap<size_t, Symbol *> SymbolMap;
-
- size_t NextSymbolUniqueId = 0;
-
- std::vector<Section> Sections;
- DenseMap<ssize_t, Section *> SectionMap;
-
- ssize_t NextSectionUniqueId = 1; // Allow a UniqueId 0 to mean undefined.
-
- // Update SymbolMap.
- void updateSymbols();
-
- // Update SectionMap and Index in each Section.
- void updateSections();
-};
-
-// Copy between coff_symbol16 and coff_symbol32.
-// The source and destination files can use either coff_symbol16 or
-// coff_symbol32, while we always store them as coff_symbol32 in the
-// intermediate data structure.
-template <class Symbol1Ty, class Symbol2Ty>
-void copySymbol(Symbol1Ty &Dest, const Symbol2Ty &Src) {
- static_assert(sizeof(Dest.Name.ShortName) == sizeof(Src.Name.ShortName),
- "Mismatched name sizes");
- memcpy(Dest.Name.ShortName, Src.Name.ShortName, sizeof(Dest.Name.ShortName));
- Dest.Value = Src.Value;
- Dest.SectionNumber = Src.SectionNumber;
- Dest.Type = Src.Type;
- Dest.StorageClass = Src.StorageClass;
- Dest.NumberOfAuxSymbols = Src.NumberOfAuxSymbols;
-}
-
-// Copy between pe32_header and pe32plus_header.
-// We store the intermediate state in a pe32plus_header.
-template <class PeHeader1Ty, class PeHeader2Ty>
-void copyPeHeader(PeHeader1Ty &Dest, const PeHeader2Ty &Src) {
- Dest.Magic = Src.Magic;
- Dest.MajorLinkerVersion = Src.MajorLinkerVersion;
- Dest.MinorLinkerVersion = Src.MinorLinkerVersion;
- Dest.SizeOfCode = Src.SizeOfCode;
- Dest.SizeOfInitializedData = Src.SizeOfInitializedData;
- Dest.SizeOfUninitializedData = Src.SizeOfUninitializedData;
- Dest.AddressOfEntryPoint = Src.AddressOfEntryPoint;
- Dest.BaseOfCode = Src.BaseOfCode;
- Dest.ImageBase = Src.ImageBase;
- Dest.SectionAlignment = Src.SectionAlignment;
- Dest.FileAlignment = Src.FileAlignment;
- Dest.MajorOperatingSystemVersion = Src.MajorOperatingSystemVersion;
- Dest.MinorOperatingSystemVersion = Src.MinorOperatingSystemVersion;
- Dest.MajorImageVersion = Src.MajorImageVersion;
- Dest.MinorImageVersion = Src.MinorImageVersion;
- Dest.MajorSubsystemVersion = Src.MajorSubsystemVersion;
- Dest.MinorSubsystemVersion = Src.MinorSubsystemVersion;
- Dest.Win32VersionValue = Src.Win32VersionValue;
- Dest.SizeOfImage = Src.SizeOfImage;
- Dest.SizeOfHeaders = Src.SizeOfHeaders;
- Dest.CheckSum = Src.CheckSum;
- Dest.Subsystem = Src.Subsystem;
- Dest.DLLCharacteristics = Src.DLLCharacteristics;
- Dest.SizeOfStackReserve = Src.SizeOfStackReserve;
- Dest.SizeOfStackCommit = Src.SizeOfStackCommit;
- Dest.SizeOfHeapReserve = Src.SizeOfHeapReserve;
- Dest.SizeOfHeapCommit = Src.SizeOfHeapCommit;
- Dest.LoaderFlags = Src.LoaderFlags;
- Dest.NumberOfRvaAndSize = Src.NumberOfRvaAndSize;
-}
-
-} // end namespace coff
-} // end namespace objcopy
-} // end namespace llvm
-
-#endif // LLVM_TOOLS_OBJCOPY_COFF_OBJECT_H
+
+ // Set the Referenced field on all Symbols, based on relocations in
+ // all sections.
+ Error markSymbols();
+
+ ArrayRef<Section> getSections() const { return Sections; }
+ // This allows mutating individual Sections, but not mutating the list
+ // of sections itself.
+ iterator_range<std::vector<Section>::iterator> getMutableSections() {
+ return make_range(Sections.begin(), Sections.end());
+ }
+
+ const Section *findSection(ssize_t UniqueId) const;
+
+ void addSections(ArrayRef<Section> NewSections);
+ void removeSections(function_ref<bool(const Section &)> ToRemove);
+ void truncateSections(function_ref<bool(const Section &)> ToTruncate);
+
+private:
+ std::vector<Symbol> Symbols;
+ DenseMap<size_t, Symbol *> SymbolMap;
+
+ size_t NextSymbolUniqueId = 0;
+
+ std::vector<Section> Sections;
+ DenseMap<ssize_t, Section *> SectionMap;
+
+ ssize_t NextSectionUniqueId = 1; // Allow a UniqueId 0 to mean undefined.
+
+ // Update SymbolMap.
+ void updateSymbols();
+
+ // Update SectionMap and Index in each Section.
+ void updateSections();
+};
+
+// Copy between coff_symbol16 and coff_symbol32.
+// The source and destination files can use either coff_symbol16 or
+// coff_symbol32, while we always store them as coff_symbol32 in the
+// intermediate data structure.
+template <class Symbol1Ty, class Symbol2Ty>
+void copySymbol(Symbol1Ty &Dest, const Symbol2Ty &Src) {
+ static_assert(sizeof(Dest.Name.ShortName) == sizeof(Src.Name.ShortName),
+ "Mismatched name sizes");
+ memcpy(Dest.Name.ShortName, Src.Name.ShortName, sizeof(Dest.Name.ShortName));
+ Dest.Value = Src.Value;
+ Dest.SectionNumber = Src.SectionNumber;
+ Dest.Type = Src.Type;
+ Dest.StorageClass = Src.StorageClass;
+ Dest.NumberOfAuxSymbols = Src.NumberOfAuxSymbols;
+}
+
+// Copy between pe32_header and pe32plus_header.
+// We store the intermediate state in a pe32plus_header.
+template <class PeHeader1Ty, class PeHeader2Ty>
+void copyPeHeader(PeHeader1Ty &Dest, const PeHeader2Ty &Src) {
+ Dest.Magic = Src.Magic;
+ Dest.MajorLinkerVersion = Src.MajorLinkerVersion;
+ Dest.MinorLinkerVersion = Src.MinorLinkerVersion;
+ Dest.SizeOfCode = Src.SizeOfCode;
+ Dest.SizeOfInitializedData = Src.SizeOfInitializedData;
+ Dest.SizeOfUninitializedData = Src.SizeOfUninitializedData;
+ Dest.AddressOfEntryPoint = Src.AddressOfEntryPoint;
+ Dest.BaseOfCode = Src.BaseOfCode;
+ Dest.ImageBase = Src.ImageBase;
+ Dest.SectionAlignment = Src.SectionAlignment;
+ Dest.FileAlignment = Src.FileAlignment;
+ Dest.MajorOperatingSystemVersion = Src.MajorOperatingSystemVersion;
+ Dest.MinorOperatingSystemVersion = Src.MinorOperatingSystemVersion;
+ Dest.MajorImageVersion = Src.MajorImageVersion;
+ Dest.MinorImageVersion = Src.MinorImageVersion;
+ Dest.MajorSubsystemVersion = Src.MajorSubsystemVersion;
+ Dest.MinorSubsystemVersion = Src.MinorSubsystemVersion;
+ Dest.Win32VersionValue = Src.Win32VersionValue;
+ Dest.SizeOfImage = Src.SizeOfImage;
+ Dest.SizeOfHeaders = Src.SizeOfHeaders;
+ Dest.CheckSum = Src.CheckSum;
+ Dest.Subsystem = Src.Subsystem;
+ Dest.DLLCharacteristics = Src.DLLCharacteristics;
+ Dest.SizeOfStackReserve = Src.SizeOfStackReserve;
+ Dest.SizeOfStackCommit = Src.SizeOfStackCommit;
+ Dest.SizeOfHeapReserve = Src.SizeOfHeapReserve;
+ Dest.SizeOfHeapCommit = Src.SizeOfHeapCommit;
+ Dest.LoaderFlags = Src.LoaderFlags;
+ Dest.NumberOfRvaAndSize = Src.NumberOfRvaAndSize;
+}
+
+} // end namespace coff
+} // end namespace objcopy
+} // end namespace llvm
+
+#endif // LLVM_TOOLS_OBJCOPY_COFF_OBJECT_H