summaryrefslogtreecommitdiffstats
path: root/llvm/tools/llvm-objcopy/Object.h
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/tools/llvm-objcopy/Object.h')
-rw-r--r--llvm/tools/llvm-objcopy/Object.h65
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();
OpenPOWER on IntegriCloud