[PATCH] D58759: [RISCV][MC] Fixed error: could not find corresponding %pcrel_hi
Eli Friedman via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Mon Mar 4 17:14:15 PST 2019
efriedma added a comment.
> I guess the difficulty there is that you wouldn't know which fragment the symbol offset (AUIPCSymbol->getOffset()) relates to.
Either the label is in the same fragment as the fixup, so the current code works, or the label points to the end of a fragment and the fixup is at offset zero in the next fragment. Otherwise, they can't match because there's data in between the label and the fixup. (I guess it's a little more complicated if you consider the possibility of zero-size fragments, but that doesn't make it a lot more complicated.)
I'm concerned the approach in current patch can't be generalized to handle all cases, for example:
.option push
.option norelax
nop
2:
.option pop
auipc a1, %pcrel_hi(another_symbol)
addi a1, a1, %pcrel_lo(2b)
================
Comment at: include/llvm/MC/MCStreamer.h:443
+ /// can be emitted in the current fragment.
+ virtual void EmitLabelEx(MCSymbol *Symbol, SMLoc Loc = SMLoc(),
+ const MCSubtargetInfo *STI = nullptr);
----------------
If we're going to do this, we should give this a better name... maybe something like "EmitLabelInNextFragment" or something like that, to indicate that it's actually doing something unusual.
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D58759/new/
https://reviews.llvm.org/D58759
More information about the llvm-commits
mailing list