diff options
Diffstat (limited to 'llvm/lib')
| -rw-r--r-- | llvm/lib/Target/RISCV/MCTargetDesc/RISCVMCExpr.cpp | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/llvm/lib/Target/RISCV/MCTargetDesc/RISCVMCExpr.cpp b/llvm/lib/Target/RISCV/MCTargetDesc/RISCVMCExpr.cpp index ae25ec81817..7aa9b5e7d68 100644 --- a/llvm/lib/Target/RISCV/MCTargetDesc/RISCVMCExpr.cpp +++ b/llvm/lib/Target/RISCV/MCTargetDesc/RISCVMCExpr.cpp @@ -139,7 +139,11 @@ bool RISCVMCExpr::evaluatePCRelLo(MCValue &Res, const MCAsmLayout *Layout, findAssociatedFragment()->getParent()) return false; - uint64_t AUIPCOffset = AUIPCSymbol->getOffset(); + // We must use TargetFixup rather than AUIPCSymbol here. They will almost + // always have the same offset, except for the case when AUIPCSymbol is at + // the end of a fragment and the fixup comes from offset 0 in the next + // fragment. + uint64_t AUIPCOffset = TargetFixup->getOffset(); Res = MCValue::get(Target.getSymA(), nullptr, Target.getConstant() + (Fixup->getOffset() - AUIPCOffset)); |

