diff --git a/llvm/lib/Target/RISCV/MCTargetDesc/RISCVMCTargetDesc.cpp b/llvm/lib/Target/RISCV/MCTargetDesc/RISCVMCTargetDesc.cpp --- a/llvm/lib/Target/RISCV/MCTargetDesc/RISCVMCTargetDesc.cpp +++ b/llvm/lib/Target/RISCV/MCTargetDesc/RISCVMCTargetDesc.cpp @@ -94,6 +94,10 @@ return new RISCVTargetAsmStreamer(S, OS); } +static MCTargetStreamer *createRISCVNullTargetStreamer(MCStreamer &S) { + return new RISCVTargetStreamer(S); +} + namespace { class RISCVMCInstrAnalysis : public MCInstrAnalysis { @@ -148,5 +152,8 @@ // Register the asm target streamer. TargetRegistry::RegisterAsmTargetStreamer(*T, createRISCVAsmTargetStreamer); + // Register the null target streamer. + TargetRegistry::RegisterNullTargetStreamer(*T, + createRISCVNullTargetStreamer); } } diff --git a/llvm/lib/Target/RISCV/MCTargetDesc/RISCVTargetStreamer.h b/llvm/lib/Target/RISCV/MCTargetDesc/RISCVTargetStreamer.h --- a/llvm/lib/Target/RISCV/MCTargetDesc/RISCVTargetStreamer.h +++ b/llvm/lib/Target/RISCV/MCTargetDesc/RISCVTargetStreamer.h @@ -19,19 +19,19 @@ RISCVTargetStreamer(MCStreamer &S); void finish() override; - virtual void emitDirectiveOptionPush() = 0; - virtual void emitDirectiveOptionPop() = 0; - virtual void emitDirectiveOptionPIC() = 0; - virtual void emitDirectiveOptionNoPIC() = 0; - virtual void emitDirectiveOptionRVC() = 0; - virtual void emitDirectiveOptionNoRVC() = 0; - virtual void emitDirectiveOptionRelax() = 0; - virtual void emitDirectiveOptionNoRelax() = 0; - virtual void emitAttribute(unsigned Attribute, unsigned Value) = 0; - virtual void finishAttributeSection() = 0; - virtual void emitTextAttribute(unsigned Attribute, StringRef String) = 0; + virtual void emitDirectiveOptionPush(); + virtual void emitDirectiveOptionPop(); + virtual void emitDirectiveOptionPIC(); + virtual void emitDirectiveOptionNoPIC(); + virtual void emitDirectiveOptionRVC(); + virtual void emitDirectiveOptionNoRVC(); + virtual void emitDirectiveOptionRelax(); + virtual void emitDirectiveOptionNoRelax(); + virtual void emitAttribute(unsigned Attribute, unsigned Value); + virtual void finishAttributeSection(); + virtual void emitTextAttribute(unsigned Attribute, StringRef String); virtual void emitIntTextAttribute(unsigned Attribute, unsigned IntValue, - StringRef StringValue) = 0; + StringRef StringValue); void emitTargetAttributes(const MCSubtargetInfo &STI); }; diff --git a/llvm/lib/Target/RISCV/MCTargetDesc/RISCVTargetStreamer.cpp b/llvm/lib/Target/RISCV/MCTargetDesc/RISCVTargetStreamer.cpp --- a/llvm/lib/Target/RISCV/MCTargetDesc/RISCVTargetStreamer.cpp +++ b/llvm/lib/Target/RISCV/MCTargetDesc/RISCVTargetStreamer.cpp @@ -21,6 +21,22 @@ void RISCVTargetStreamer::finish() { finishAttributeSection(); } +void RISCVTargetStreamer::emitDirectiveOptionPush() {} +void RISCVTargetStreamer::emitDirectiveOptionPop() {} +void RISCVTargetStreamer::emitDirectiveOptionPIC() {} +void RISCVTargetStreamer::emitDirectiveOptionNoPIC() {} +void RISCVTargetStreamer::emitDirectiveOptionRVC() {} +void RISCVTargetStreamer::emitDirectiveOptionNoRVC() {} +void RISCVTargetStreamer::emitDirectiveOptionRelax() {} +void RISCVTargetStreamer::emitDirectiveOptionNoRelax() {} +void RISCVTargetStreamer::emitAttribute(unsigned Attribute, unsigned Value) {} +void RISCVTargetStreamer::finishAttributeSection() {} +void RISCVTargetStreamer::emitTextAttribute(unsigned Attribute, + StringRef String) {} +void RISCVTargetStreamer::emitIntTextAttribute(unsigned Attribute, + unsigned IntValue, + StringRef StringValue) {} + void RISCVTargetStreamer::emitTargetAttributes(const MCSubtargetInfo &STI) { if (STI.hasFeature(RISCV::FeatureRV32E)) emitAttribute(RISCVAttrs::STACK_ALIGN, RISCVAttrs::ALIGN_4);