summaryrefslogtreecommitdiffstats
path: root/llvm/lib/MC/ELFObjectWriter.cpp
diff options
context:
space:
mode:
authorPeter Collingbourne <peter@pcc.me.uk>2018-05-21 19:30:59 +0000
committerPeter Collingbourne <peter@pcc.me.uk>2018-05-21 19:30:59 +0000
commitf0226e62a888fd35a9a5c5fedf3951b33cd56cfa (patch)
treec7e95ab3e05897b7aaf38347269f67f39e8fad09 /llvm/lib/MC/ELFObjectWriter.cpp
parentef313905f0afe680deb7a4d0a5fdc678d4d0a0e2 (diff)
downloadbcm5719-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.cpp32
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);
}
OpenPOWER on IntegriCloud