Skip to content

Commit f0226e6

Browse files
committed
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
1 parent ef31390 commit f0226e6

File tree

1 file changed

+19
-13
lines changed

1 file changed

+19
-13
lines changed

llvm/lib/MC/ELFObjectWriter.cpp

+19-13
Original file line numberDiff line numberDiff line change
@@ -215,9 +215,6 @@ struct ELFWriter {
215215
};
216216

217217
class ELFObjectWriter : public MCObjectWriter {
218-
raw_pwrite_stream &OS;
219-
bool IsLittleEndian;
220-
221218
/// The target specific ELF writer instance.
222219
std::unique_ptr<MCELFObjectTargetWriter> TargetObjectWriter;
223220

@@ -233,10 +230,8 @@ class ELFObjectWriter : public MCObjectWriter {
233230
unsigned Type) const;
234231

235232
public:
236-
ELFObjectWriter(std::unique_ptr<MCELFObjectTargetWriter> MOTW,
237-
raw_pwrite_stream &OS, bool IsLittleEndian)
238-
: OS(OS), IsLittleEndian(IsLittleEndian),
239-
TargetObjectWriter(std::move(MOTW)) {}
233+
ELFObjectWriter(std::unique_ptr<MCELFObjectTargetWriter> MOTW)
234+
: TargetObjectWriter(std::move(MOTW)) {}
240235

241236
void reset() override {
242237
Relocations.clear();
@@ -253,16 +248,27 @@ class ELFObjectWriter : public MCObjectWriter {
253248
const MCFragment *Fragment, const MCFixup &Fixup,
254249
MCValue Target, uint64_t &FixedValue) override;
255250

256-
uint64_t writeObject(MCAssembler &Asm, const MCAsmLayout &Layout) override {
257-
return ELFWriter(*this, OS, IsLittleEndian).writeObject(Asm, Layout);
258-
}
259-
260251
void executePostLayoutBinding(MCAssembler &Asm,
261252
const MCAsmLayout &Layout) override;
262253

263254
friend struct ELFWriter;
264255
};
265256

257+
class ELFSingleObjectWriter : public ELFObjectWriter {
258+
raw_pwrite_stream &OS;
259+
bool IsLittleEndian;
260+
261+
public:
262+
ELFSingleObjectWriter(std::unique_ptr<MCELFObjectTargetWriter> MOTW,
263+
raw_pwrite_stream &OS, bool IsLittleEndian)
264+
: ELFObjectWriter(std::move(MOTW)), OS(OS),
265+
IsLittleEndian(IsLittleEndian) {}
266+
267+
uint64_t writeObject(MCAssembler &Asm, const MCAsmLayout &Layout) override {
268+
return ELFWriter(*this, OS, IsLittleEndian).writeObject(Asm, Layout);
269+
}
270+
};
271+
266272
} // end anonymous namespace
267273

268274
void ELFWriter::align(unsigned Alignment) {
@@ -1374,6 +1380,6 @@ bool ELFObjectWriter::isSymbolRefDifferenceFullyResolvedImpl(
13741380
std::unique_ptr<MCObjectWriter>
13751381
llvm::createELFObjectWriter(std::unique_ptr<MCELFObjectTargetWriter> MOTW,
13761382
raw_pwrite_stream &OS, bool IsLittleEndian) {
1377-
return llvm::make_unique<ELFObjectWriter>(std::move(MOTW), OS,
1378-
IsLittleEndian);
1383+
return llvm::make_unique<ELFSingleObjectWriter>(std::move(MOTW), OS,
1384+
IsLittleEndian);
13791385
}

0 commit comments

Comments
 (0)