@@ -223,34 +223,23 @@ void GOFFOstream::finalizeRecord() {
223223}
224224
225225namespace {
226-
227- class GOFFObjectWriter : public MCObjectWriter {
228- // The target specific GOFF writer instance.
229- std::unique_ptr<MCGOFFObjectTargetWriter> TargetObjectWriter;
230-
231- // The stream used to write the GOFF records.
226+ class GOFFWriter {
232227 GOFFOstream OS;
228+ [[maybe_unused]] MCAssembler &Asm;
233229
234- public:
235- GOFFObjectWriter (std::unique_ptr<MCGOFFObjectTargetWriter> MOTW,
236- raw_pwrite_stream &OS)
237- : TargetObjectWriter(std::move(MOTW)), OS(OS) {}
238-
239- ~GOFFObjectWriter () override {}
240-
241- // Write GOFF records.
242230 void writeHeader ();
243231 void writeEnd ();
244232
245- // Implementation of the MCObjectWriter interface.
246- void recordRelocation (MCAssembler &Asm, const MCFragment *Fragment,
247- const MCFixup &Fixup, MCValue Target,
248- uint64_t &FixedValue) override {}
249- uint64_t writeObject (MCAssembler &Asm) override ;
233+ public:
234+ GOFFWriter (raw_pwrite_stream &OS, MCAssembler &Asm);
235+ uint64_t writeObject ();
250236};
251- } // end anonymous namespace
237+ } // namespace
238+
239+ GOFFWriter::GOFFWriter (raw_pwrite_stream &OS, MCAssembler &Asm)
240+ : OS(OS), Asm(Asm) {}
252241
253- void GOFFObjectWriter ::writeHeader () {
242+ void GOFFWriter ::writeHeader () {
254243 OS.newRecord (GOFF::RT_HDR);
255244 OS.write_zeros (1 ); // Reserved
256245 OS.writebe <uint32_t >(0 ); // Target Hardware Environment
@@ -264,7 +253,7 @@ void GOFFObjectWriter::writeHeader() {
264253 OS.write_zeros (6 ); // Reserved
265254}
266255
267- void GOFFObjectWriter ::writeEnd () {
256+ void GOFFWriter ::writeEnd () {
268257 uint8_t F = GOFF::END_EPR_None;
269258 uint8_t AMODE = 0 ;
270259 uint32_t ESDID = 0 ;
@@ -282,7 +271,7 @@ void GOFFObjectWriter::writeEnd() {
282271 OS.writebe <uint32_t >(ESDID); // ESDID (of entry point)
283272}
284273
285- uint64_t GOFFObjectWriter ::writeObject (MCAssembler &Asm ) {
274+ uint64_t GOFFWriter ::writeObject () {
286275 writeHeader ();
287276 writeEnd ();
288277
@@ -295,6 +284,35 @@ uint64_t GOFFObjectWriter::writeObject(MCAssembler &Asm) {
295284 return OS.getWrittenSize ();
296285}
297286
287+ namespace {
288+
289+ class GOFFObjectWriter : public MCObjectWriter {
290+ // The target specific GOFF writer instance.
291+ std::unique_ptr<MCGOFFObjectTargetWriter> TargetObjectWriter;
292+
293+ // The stream used to write the GOFF records.
294+ raw_pwrite_stream &OS;
295+
296+ public:
297+ GOFFObjectWriter (std::unique_ptr<MCGOFFObjectTargetWriter> MOTW,
298+ raw_pwrite_stream &OS)
299+ : TargetObjectWriter(std::move(MOTW)), OS(OS) {}
300+
301+ ~GOFFObjectWriter () override {}
302+
303+ // Implementation of the MCObjectWriter interface.
304+ void recordRelocation (MCAssembler &Asm, const MCFragment *Fragment,
305+ const MCFixup &Fixup, MCValue Target,
306+ uint64_t &FixedValue) override {}
307+ uint64_t writeObject (MCAssembler &Asm) override ;
308+ };
309+ } // end anonymous namespace
310+
311+ uint64_t GOFFObjectWriter::writeObject (MCAssembler &Asm) {
312+ uint64_t Size = GOFFWriter (OS, Asm).writeObject ();
313+ return Size;
314+ }
315+
298316std::unique_ptr<MCObjectWriter>
299317llvm::createGOFFObjectWriter (std::unique_ptr<MCGOFFObjectTargetWriter> MOTW,
300318 raw_pwrite_stream &OS) {
0 commit comments