Skip to content

Commit 023c645

Browse files
committed
MCObjectWriter: Remove XCOFF specific virtual functions
Add forwarders for now. XCOFFObjectWriter should eventually be exported like Mach-O/COFF/ELF (commit 70c52b6).
1 parent 3d494bf commit 023c645

File tree

4 files changed

+35
-15
lines changed

4 files changed

+35
-15
lines changed

llvm/include/llvm/MC/MCObjectWriter.h

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -94,14 +94,6 @@ class MCObjectWriter {
9494

9595
std::vector<const MCSymbol *> &getAddrsigSyms() { return AddrsigSyms; }
9696

97-
virtual void addExceptionEntry(const MCSymbol *Symbol, const MCSymbol *Trap,
98-
unsigned LanguageCode, unsigned ReasonCode,
99-
unsigned FunctionSize, bool hasDebug) {
100-
report_fatal_error("addExceptionEntry is only supported on XCOFF targets");
101-
}
102-
virtual void addCInfoSymEntry(StringRef Name, StringRef Metadata) {
103-
report_fatal_error("addCInfoSymEntry is only supported on XCOFF targets");
104-
}
10597
/// Write the object file and returns the number of bytes written.
10698
///
10799
/// This routine is called by the assembler after layout and relaxation is

llvm/include/llvm/MC/MCXCOFFObjectWriter.h

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,15 @@ std::unique_ptr<MCObjectWriter>
4343
createXCOFFObjectWriter(std::unique_ptr<MCXCOFFObjectTargetWriter> MOTW,
4444
raw_pwrite_stream &OS);
4545

46+
namespace XCOFF {
47+
void addExceptionEntry(MCObjectWriter &Writer, const MCSymbol *Symbol,
48+
const MCSymbol *Trap, unsigned LanguageCode,
49+
unsigned ReasonCode, unsigned FunctionSize,
50+
bool hasDebug);
51+
void addCInfoSymEntry(MCObjectWriter &Writer, StringRef Name,
52+
StringRef Metadata);
53+
} // namespace XCOFF
54+
4655
} // end namespace llvm
4756

4857
#endif // LLVM_MC_MCXCOFFOBJECTWRITER_H

llvm/lib/MC/MCXCOFFStreamer.cpp

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
#include "llvm/MC/MCObjectWriter.h"
2020
#include "llvm/MC/MCSectionXCOFF.h"
2121
#include "llvm/MC/MCSymbolXCOFF.h"
22+
#include "llvm/MC/MCXCOFFObjectWriter.h"
2223
#include "llvm/MC/TargetRegistry.h"
2324
#include "llvm/Support/Casting.h"
2425

@@ -108,12 +109,14 @@ void MCXCOFFStreamer::emitXCOFFExceptDirective(const MCSymbol *Symbol,
108109
unsigned Lang, unsigned Reason,
109110
unsigned FunctionSize,
110111
bool hasDebug) {
111-
getAssembler().getWriter().addExceptionEntry(Symbol, Trap, Lang, Reason,
112-
FunctionSize, hasDebug);
112+
// TODO: Export XCOFFObjectWriter to llvm/MC/MCXCOFFObjectWriter.h and access
113+
// it from MCXCOFFStreamer.
114+
XCOFF::addExceptionEntry(getAssembler().getWriter(), Symbol, Trap, Lang,
115+
Reason, FunctionSize, hasDebug);
113116
}
114117

115118
void MCXCOFFStreamer::emitXCOFFCInfoSym(StringRef Name, StringRef Metadata) {
116-
getAssembler().getWriter().addCInfoSymEntry(Name, Metadata);
119+
XCOFF::addCInfoSymEntry(getAssembler().getWriter(), Name, Metadata);
117120
}
118121

119122
void MCXCOFFStreamer::emitCommonSymbol(MCSymbol *Symbol, uint64_t Size,

llvm/lib/MC/XCOFFObjectWriter.cpp

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -422,16 +422,12 @@ class XCOFFObjectWriter : public MCObjectWriter {
422422
void finalizeRelocationInfo(SectionEntry *Sec, uint64_t RelCount);
423423
void calcOffsetToRelocations(SectionEntry *Sec, uint64_t &RawPointer);
424424

425-
void addExceptionEntry(const MCSymbol *Symbol, const MCSymbol *Trap,
426-
unsigned LanguageCode, unsigned ReasonCode,
427-
unsigned FunctionSize, bool hasDebug) override;
428425
bool hasExceptionSection() {
429426
return !ExceptionSection.ExceptionTable.empty();
430427
}
431428
unsigned getExceptionSectionSize();
432429
unsigned getExceptionOffset(const MCSymbol *Symbol);
433430

434-
void addCInfoSymEntry(StringRef Name, StringRef Metadata) override;
435431
size_t auxiliaryHeaderSize() const {
436432
// 64-bit object files have no auxiliary header.
437433
return HasVisibility && !is64Bit() ? XCOFF::AuxFileHeaderSizeShort : 0;
@@ -444,6 +440,11 @@ class XCOFFObjectWriter : public MCObjectWriter {
444440
void writeWord(uint64_t Word) {
445441
is64Bit() ? W.write<uint64_t>(Word) : W.write<uint32_t>(Word);
446442
}
443+
444+
void addExceptionEntry(const MCSymbol *Symbol, const MCSymbol *Trap,
445+
unsigned LanguageCode, unsigned ReasonCode,
446+
unsigned FunctionSize, bool hasDebug);
447+
void addCInfoSymEntry(StringRef Name, StringRef Metadata);
447448
};
448449

449450
XCOFFObjectWriter::XCOFFObjectWriter(
@@ -1739,3 +1740,18 @@ llvm::createXCOFFObjectWriter(std::unique_ptr<MCXCOFFObjectTargetWriter> MOTW,
17391740
raw_pwrite_stream &OS) {
17401741
return std::make_unique<XCOFFObjectWriter>(std::move(MOTW), OS);
17411742
}
1743+
1744+
// TODO: Export XCOFFObjectWriter to llvm/MC/MCXCOFFObjectWriter.h and remove
1745+
// the forwarders.
1746+
void XCOFF::addExceptionEntry(MCObjectWriter &Writer, const MCSymbol *Symbol,
1747+
const MCSymbol *Trap, unsigned LanguageCode,
1748+
unsigned ReasonCode, unsigned FunctionSize,
1749+
bool hasDebug) {
1750+
static_cast<XCOFFObjectWriter &>(Writer).addExceptionEntry(
1751+
Symbol, Trap, LanguageCode, ReasonCode, FunctionSize, hasDebug);
1752+
}
1753+
1754+
void XCOFF::addCInfoSymEntry(MCObjectWriter &Writer, StringRef Name,
1755+
StringRef Metadata) {
1756+
static_cast<XCOFFObjectWriter &>(Writer).addCInfoSymEntry(Name, Metadata);
1757+
}

0 commit comments

Comments
 (0)