Skip to content

Commit d78d030

Browse files
committed
[MC] Export llvm::XCOFFObjectwriter and access it from MCXCOFFStreamer
Similar to commit 9539a77 for WinCOFFObjectWriter. Close #100412
1 parent 98ca9a6 commit d78d030

File tree

4 files changed

+83
-98
lines changed

4 files changed

+83
-98
lines changed

llvm/include/llvm/MC/MCXCOFFObjectWriter.h

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -39,19 +39,18 @@ class MCXCOFFObjectTargetWriter : public MCObjectTargetWriter {
3939
bool Is64Bit;
4040
};
4141

42+
class XCOFFObjectWriter : public MCObjectWriter {
43+
public:
44+
virtual void addExceptionEntry(const MCSymbol *Symbol, const MCSymbol *Trap,
45+
unsigned LanguageCode, unsigned ReasonCode,
46+
unsigned FunctionSize, bool hasDebug) = 0;
47+
virtual void addCInfoSymEntry(StringRef Name, StringRef Metadata) = 0;
48+
};
49+
4250
std::unique_ptr<MCObjectWriter>
4351
createXCOFFObjectWriter(std::unique_ptr<MCXCOFFObjectTargetWriter> MOTW,
4452
raw_pwrite_stream &OS);
4553

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-
5554
} // end namespace llvm
5655

5756
#endif // LLVM_MC_MCXCOFFOBJECTWRITER_H

llvm/include/llvm/MC/MCXCOFFStreamer.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,16 @@
1212
#include "llvm/MC/MCObjectStreamer.h"
1313

1414
namespace llvm {
15+
class XCOFFObjectWriter;
1516

1617
class MCXCOFFStreamer : public MCObjectStreamer {
1718
public:
1819
MCXCOFFStreamer(MCContext &Context, std::unique_ptr<MCAsmBackend> MAB,
1920
std::unique_ptr<MCObjectWriter> OW,
2021
std::unique_ptr<MCCodeEmitter> Emitter);
2122

23+
XCOFFObjectWriter &getWriter();
24+
2225
bool emitSymbolAttribute(MCSymbol *Symbol, MCSymbolAttr Attribute) override;
2326
void emitCommonSymbol(MCSymbol *Symbol, uint64_t Size,
2427
Align ByteAlignment) override;

llvm/lib/MC/MCXCOFFStreamer.cpp

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,10 @@ MCXCOFFStreamer::MCXCOFFStreamer(MCContext &Context,
3232
: MCObjectStreamer(Context, std::move(MAB), std::move(OW),
3333
std::move(Emitter)) {}
3434

35+
XCOFFObjectWriter &MCXCOFFStreamer::getWriter() {
36+
return static_cast<XCOFFObjectWriter &>(getAssembler().getWriter());
37+
}
38+
3539
bool MCXCOFFStreamer::emitSymbolAttribute(MCSymbol *Sym,
3640
MCSymbolAttr Attribute) {
3741
auto *Symbol = cast<MCSymbolXCOFF>(Sym);
@@ -109,14 +113,12 @@ void MCXCOFFStreamer::emitXCOFFExceptDirective(const MCSymbol *Symbol,
109113
unsigned Lang, unsigned Reason,
110114
unsigned FunctionSize,
111115
bool 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);
116+
getWriter().addExceptionEntry(Symbol, Trap, Lang, Reason, FunctionSize,
117+
hasDebug);
116118
}
117119

118120
void MCXCOFFStreamer::emitXCOFFCInfoSym(StringRef Name, StringRef Metadata) {
119-
XCOFF::addCInfoSymEntry(getAssembler().getWriter(), Name, Metadata);
121+
getWriter().addCInfoSymEntry(Name, Metadata);
120122
}
121123

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

0 commit comments

Comments
 (0)