diff --git a/llvm/lib/Target/RISCV/MCTargetDesc/RISCVELFStreamer.cpp b/llvm/lib/Target/RISCV/MCTargetDesc/RISCVELFStreamer.cpp --- a/llvm/lib/Target/RISCV/MCTargetDesc/RISCVELFStreamer.cpp +++ b/llvm/lib/Target/RISCV/MCTargetDesc/RISCVELFStreamer.cpp @@ -47,7 +47,12 @@ void RISCVTargetELFStreamer::emitDirectiveOptionPop() {} void RISCVTargetELFStreamer::emitDirectiveOptionPIC() {} void RISCVTargetELFStreamer::emitDirectiveOptionNoPIC() {} -void RISCVTargetELFStreamer::emitDirectiveOptionRVC() {} +void RISCVTargetELFStreamer::emitDirectiveOptionRVC() { + MCAssembler &MCA = getStreamer().getAssembler(); + unsigned Eflags = MCA.getELFHeaderEFlags(); + Eflags |= ELF::EF_RISCV_RVC; + MCA.setELFHeaderEFlags(Eflags); +} void RISCVTargetELFStreamer::emitDirectiveOptionNoRVC() {} void RISCVTargetELFStreamer::emitDirectiveOptionRelax() {} void RISCVTargetELFStreamer::emitDirectiveOptionNoRelax() {} diff --git a/llvm/test/MC/RISCV/option-rvc-eflag.s b/llvm/test/MC/RISCV/option-rvc-eflag.s new file mode 100644 --- /dev/null +++ b/llvm/test/MC/RISCV/option-rvc-eflag.s @@ -0,0 +1,9 @@ +# RUN: llvm-mc -triple riscv32 -filetype=obj %s -o - \ +# RUN: | llvm-readobj -h - | FileCheck -check-prefix=CHECK %s +# RUN: llvm-mc -triple riscv64 -filetype=obj %s -o - \ +# RUN: | llvm-readobj -h - | FileCheck -check-prefix=CHECK %s + +# CHECK: Flags [ (0x1) +# CHECK-NEXT: EF_RISCV_RVC (0x1) +# CHECK-NEXT: ] +.option rvc