diff options
author | Peter Collingbourne <peter@pcc.me.uk> | 2018-05-21 19:30:59 +0000 |
---|---|---|
committer | Peter Collingbourne <peter@pcc.me.uk> | 2018-05-21 19:30:59 +0000 |
commit | f0226e62a888fd35a9a5c5fedf3951b33cd56cfa (patch) | |
tree | c7e95ab3e05897b7aaf38347269f67f39e8fad09 /llvm/lib/MC/ELFObjectWriter.cpp | |
parent | ef313905f0afe680deb7a4d0a5fdc678d4d0a0e2 (diff) | |
download | bcm5719-llvm-f0226e62a888fd35a9a5c5fedf3951b33cd56cfa.tar.gz bcm5719-llvm-f0226e62a888fd35a9a5c5fedf3951b33cd56cfa.zip |
MC: Extract a derived class from ELFObjectWriter. NFCI.
This class will be used to create regular, non-split ELF files.
Part of PR37466.
Differential Revision: https://reviews.llvm.org/D47049
llvm-svn: 332870
Diffstat (limited to 'llvm/lib/MC/ELFObjectWriter.cpp')
-rw-r--r-- | llvm/lib/MC/ELFObjectWriter.cpp | 32 |
1 files changed, 19 insertions, 13 deletions
diff --git a/llvm/lib/MC/ELFObjectWriter.cpp b/llvm/lib/MC/ELFObjectWriter.cpp index e7d5a96ccf1..a8f88ce49e2 100644 --- a/llvm/lib/MC/ELFObjectWriter.cpp +++ b/llvm/lib/MC/ELFObjectWriter.cpp @@ -215,9 +215,6 @@ public: }; class ELFObjectWriter : public MCObjectWriter { - raw_pwrite_stream &OS; - bool IsLittleEndian; - /// The target specific ELF writer instance. std::unique_ptr<MCELFObjectTargetWriter> TargetObjectWriter; @@ -233,10 +230,8 @@ class ELFObjectWriter : public MCObjectWriter { unsigned Type) const; public: - ELFObjectWriter(std::unique_ptr<MCELFObjectTargetWriter> MOTW, - raw_pwrite_stream &OS, bool IsLittleEndian) - : OS(OS), IsLittleEndian(IsLittleEndian), - TargetObjectWriter(std::move(MOTW)) {} + ELFObjectWriter(std::unique_ptr<MCELFObjectTargetWriter> MOTW) + : TargetObjectWriter(std::move(MOTW)) {} void reset() override { Relocations.clear(); @@ -253,16 +248,27 @@ public: const MCFragment *Fragment, const MCFixup &Fixup, MCValue Target, uint64_t &FixedValue) override; - uint64_t writeObject(MCAssembler &Asm, const MCAsmLayout &Layout) override { - return ELFWriter(*this, OS, IsLittleEndian).writeObject(Asm, Layout); - } - void executePostLayoutBinding(MCAssembler &Asm, const MCAsmLayout &Layout) override; friend struct ELFWriter; }; +class ELFSingleObjectWriter : public ELFObjectWriter { + raw_pwrite_stream &OS; + bool IsLittleEndian; + +public: + ELFSingleObjectWriter(std::unique_ptr<MCELFObjectTargetWriter> MOTW, + raw_pwrite_stream &OS, bool IsLittleEndian) + : ELFObjectWriter(std::move(MOTW)), OS(OS), + IsLittleEndian(IsLittleEndian) {} + + uint64_t writeObject(MCAssembler &Asm, const MCAsmLayout &Layout) override { + return ELFWriter(*this, OS, IsLittleEndian).writeObject(Asm, Layout); + } +}; + } // end anonymous namespace void ELFWriter::align(unsigned Alignment) { @@ -1374,6 +1380,6 @@ bool ELFObjectWriter::isSymbolRefDifferenceFullyResolvedImpl( std::unique_ptr<MCObjectWriter> llvm::createELFObjectWriter(std::unique_ptr<MCELFObjectTargetWriter> MOTW, raw_pwrite_stream &OS, bool IsLittleEndian) { - return llvm::make_unique<ELFObjectWriter>(std::move(MOTW), OS, - IsLittleEndian); + return llvm::make_unique<ELFSingleObjectWriter>(std::move(MOTW), OS, + IsLittleEndian); } |