Commit 0e27d08c authored by Luís Marques's avatar Luís Marques Committed by Tom Stellard
Browse files

[RISCV] Fix crash for section alignment with .option norvc

The existing code wasn't getting the subtarget info from the fragment,
so the current status of RVC would be ignored. This would cause a crash
for the new test case when the target then reported it couldn't write
the requested number of code alignment bytes.

Differential Revision: https://reviews.llvm.org/D122236

(cherry picked from commit d09d297c)
parent a3680175
......@@ -583,10 +583,11 @@ void RISCVAsmBackend::applyFixup(const MCAssembler &Asm, const MCFixup &Fixup,
bool RISCVAsmBackend::shouldInsertExtraNopBytesForCodeAlign(
const MCAlignFragment &AF, unsigned &Size) {
// Calculate Nops Size only when linker relaxation enabled.
if (!STI.getFeatureBits()[RISCV::FeatureRelax])
const MCSubtargetInfo *STI = AF.getSubtargetInfo();
if (!STI->getFeatureBits()[RISCV::FeatureRelax])
return false;
bool HasStdExtC = STI.getFeatureBits()[RISCV::FeatureStdExtC];
bool HasStdExtC = STI->getFeatureBits()[RISCV::FeatureStdExtC];
unsigned MinNopLen = HasStdExtC ? 2 : 4;
if (AF.getAlignment() <= MinNopLen) {
......@@ -606,7 +607,8 @@ bool RISCVAsmBackend::shouldInsertFixupForCodeAlign(MCAssembler &Asm,
const MCAsmLayout &Layout,
MCAlignFragment &AF) {
// Insert the fixup only when linker relaxation enabled.
if (!STI.getFeatureBits()[RISCV::FeatureRelax])
const MCSubtargetInfo *STI = AF.getSubtargetInfo();
if (!STI->getFeatureBits()[RISCV::FeatureRelax])
return false;
// Calculate total Nops we need to insert. If there are none to insert
......
# RUN: llvm-mc -filetype=obj -triple riscv32 -mattr=-relax < %s \
# RUN: | llvm-readobj -r - | FileCheck %s
# Check that .option relax overrides -mno-relax and enables R_RISCV_ALIGN
# relocations.
# CHECK: R_RISCV_ALIGN
.option relax
.align 4
......@@ -112,3 +112,11 @@ data1:
# C-EXT-RELAX-RELOC-NOT: R_RISCV_ALIGN
data2:
.word 9
# Check that the initial alignment is properly handled when using .option to
# disable the C extension. This used to crash.
# C-EXT-RELAX-INST: <.text2>:
# C-EXT-RELAX-INST-NEXT: add a0, a0, a1
.section .text2, "x"
.option norvc
.balign 4
add a0, a0, a1
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment