diff options
Diffstat (limited to 'llvm/tools/llvm-objcopy/Object.h')
-rw-r--r-- | llvm/tools/llvm-objcopy/Object.h | 65 |
1 files changed, 20 insertions, 45 deletions
diff --git a/llvm/tools/llvm-objcopy/Object.h b/llvm/tools/llvm-objcopy/Object.h index 36bd65b8cf2..27beafc0ce6 100644 --- a/llvm/tools/llvm-objcopy/Object.h +++ b/llvm/tools/llvm-objcopy/Object.h @@ -35,17 +35,17 @@ class SymbolTableSection; class RelocationSection; class DynamicRelocationSection; class GnuDebugLinkSection; -class GroupSection; class Segment; class Object; class SectionTableRef { +private: MutableArrayRef<std::unique_ptr<SectionBase>> Sections; public: using iterator = pointee_iterator<std::unique_ptr<SectionBase> *>; - explicit SectionTableRef(MutableArrayRef<std::unique_ptr<SectionBase>> Secs) + SectionTableRef(MutableArrayRef<std::unique_ptr<SectionBase>> Secs) : Sections(Secs) {} SectionTableRef(const SectionTableRef &) = default; @@ -71,7 +71,6 @@ public: virtual void visit(const RelocationSection &Sec) = 0; virtual void visit(const DynamicRelocationSection &Sec) = 0; virtual void visit(const GnuDebugLinkSection &Sec) = 0; - virtual void visit(const GroupSection &Sec) = 0; }; class SectionWriter : public SectionVisitor { @@ -88,7 +87,6 @@ public: virtual void visit(const SymbolTableSection &Sec) override = 0; virtual void visit(const RelocationSection &Sec) override = 0; virtual void visit(const GnuDebugLinkSection &Sec) override = 0; - virtual void visit(const GroupSection &Sec) override = 0; SectionWriter(FileOutputBuffer &Buf) : Out(Buf) {} }; @@ -104,7 +102,6 @@ public: void visit(const SymbolTableSection &Sec) override; void visit(const RelocationSection &Sec) override; void visit(const GnuDebugLinkSection &Sec) override; - void visit(const GroupSection &Sec) override; ELFSectionWriter(FileOutputBuffer &Buf) : SectionWriter(Buf) {} }; @@ -120,8 +117,6 @@ public: void visit(const SymbolTableSection &Sec) override; void visit(const RelocationSection &Sec) override; void visit(const GnuDebugLinkSection &Sec) override; - void visit(const GroupSection &Sec) override; - BinarySectionWriter(FileOutputBuffer &Buf) : SectionWriter(Buf) {} }; @@ -242,7 +237,7 @@ public: uint64_t OriginalOffset; Segment *ParentSegment = nullptr; - explicit Segment(ArrayRef<uint8_t> Data) : Contents(Data) {} + Segment(ArrayRef<uint8_t> Data) : Contents(Data) {} Segment() {} const SectionBase *firstSection() const { @@ -258,10 +253,11 @@ public: class Section : public SectionBase { MAKE_SEC_WRITER_FRIEND +private: ArrayRef<uint8_t> Contents; public: - explicit Section(ArrayRef<uint8_t> Data) : Contents(Data) {} + Section(ArrayRef<uint8_t> Data) : Contents(Data) {} void accept(SectionVisitor &Visitor) const override; }; @@ -269,6 +265,7 @@ public: class OwnedDataSection : public SectionBase { MAKE_SEC_WRITER_FRIEND +private: std::vector<uint8_t> Data; public: @@ -294,6 +291,7 @@ public: class StringTableSection : public SectionBase { MAKE_SEC_WRITER_FRIEND +private: StringTableBuilder StrTabBuilder; public: @@ -346,7 +344,6 @@ class SymbolTableSection : public SectionBase { MAKE_SEC_WRITER_FRIEND void setStrTab(StringTableSection *StrTab) { SymbolNames = StrTab; } - void assignIndices(); protected: std::vector<std::unique_ptr<Symbol>> Symbols; @@ -405,6 +402,7 @@ public: // that code between the two symbol table types. template <class SymTabType> class RelocSectionWithSymtabBase : public RelocationSectionBase { +private: SymTabType *Symbols = nullptr; void setSymTab(SymTabType *SymTab) { Symbols = SymTab; } @@ -421,6 +419,7 @@ class RelocationSection : public RelocSectionWithSymtabBase<SymbolTableSection> { MAKE_SEC_WRITER_FRIEND +private: std::vector<Relocation> Relocations; public: @@ -434,37 +433,14 @@ public: } }; -// TODO: The way stripping and groups interact is complicated -// and still needs to be worked on. - -class GroupSection : public SectionBase { - MAKE_SEC_WRITER_FRIEND - // TODO: Contents is present in several classes of the hierarchy. - // This needs to be refactored to avoid duplication. - ArrayRef<uint8_t> Contents; - ELF::Elf32_Word FlagWord; - SmallVector<SectionBase *, 3> GroupMembers; - const SymbolTableSection *SymTab = nullptr; - const Symbol *Sym = nullptr; - -public: - explicit GroupSection(ArrayRef<uint8_t> Data) : Contents(Data) {} - - void initialize(SectionTableRef SecTable) override; - void accept(SectionVisitor &) const override; - void finalize() override; - - static bool classof(const SectionBase *S) { - return S->Type == ELF::SHT_GROUP; - } -}; - class SectionWithStrTab : public Section { +private: const SectionBase *StrTab = nullptr; - void setStrTab(const SectionBase *StringTable) { StrTab = StringTable; } public: - explicit SectionWithStrTab(ArrayRef<uint8_t> Data) : Section(Data) {} + SectionWithStrTab(ArrayRef<uint8_t> Data) : Section(Data) {} + + void setStrTab(const SectionBase *StringTable) { StrTab = StringTable; } void removeSectionReferences(const SectionBase *Sec) override; void initialize(SectionTableRef SecTable) override; void finalize() override; @@ -473,8 +449,7 @@ public: class DynamicSymbolTableSection : public SectionWithStrTab { public: - explicit DynamicSymbolTableSection(ArrayRef<uint8_t> Data) - : SectionWithStrTab(Data) {} + DynamicSymbolTableSection(ArrayRef<uint8_t> Data) : SectionWithStrTab(Data) {} static bool classof(const SectionBase *S) { return S->Type == ELF::SHT_DYNSYM; @@ -483,7 +458,7 @@ public: class DynamicSection : public SectionWithStrTab { public: - explicit DynamicSection(ArrayRef<uint8_t> Data) : SectionWithStrTab(Data) {} + DynamicSection(ArrayRef<uint8_t> Data) : SectionWithStrTab(Data) {} static bool classof(const SectionBase *S) { return S->Type == ELF::SHT_DYNAMIC; @@ -498,7 +473,7 @@ private: ArrayRef<uint8_t> Contents; public: - explicit DynamicRelocationSection(ArrayRef<uint8_t> Data) : Contents(Data) {} + DynamicRelocationSection(ArrayRef<uint8_t> Data) : Contents(Data) {} void accept(SectionVisitor &) const override; @@ -513,6 +488,7 @@ class GnuDebugLinkSection : public SectionBase { MAKE_SEC_WRITER_FRIEND private: + StringRef FileName; uint32_t CRC32; @@ -520,7 +496,7 @@ private: public: // If we add this section from an external source we can use this ctor. - explicit GnuDebugLinkSection(StringRef File); + GnuDebugLinkSection(StringRef File); void accept(SectionVisitor &Visitor) const override; }; @@ -530,10 +506,10 @@ public: virtual std::unique_ptr<Object> create() const = 0; }; +using object::OwningBinary; using object::Binary; using object::ELFFile; using object::ELFObjectFile; -using object::OwningBinary; template <class ELFT> class ELFBuilder { private: @@ -606,8 +582,7 @@ public: StringTableSection *SectionNames = nullptr; SymbolTableSection *SymbolTable = nullptr; - explicit Object(std::shared_ptr<MemoryBuffer> Data) - : OwnedData(std::move(Data)) {} + Object(std::shared_ptr<MemoryBuffer> Data) : OwnedData(Data) {} virtual ~Object() = default; void sortSections(); |