[PATCH] D54029: [RISCV] Properly evaluate fixup_riscv_pcrel_lo12
Lewis Revill via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Fri Feb 22 05:28:37 PST 2019
lewis-revill added a comment.
In D54029#1404753 <https://reviews.llvm.org/D54029#1404753>, @apazos wrote:
> Hi James, I encountered another case not handled yet in this patch. It produces the error: could not find corresponding %pcrel_hi
>
> .option push
> .option norelax
> la gp, __global_pointer$
> .option pop
> la sp, _sp
This also occurs when you manually expand la.
Regardless I believe the problem is caused because `EmitLabel` doesn't have any checks for whether a new data fragment should be introduced, whereas `EmitInstToData` does. So when the `.Lpcrel_hiX` label is expanded/parsed it's parent fragment is the one before the directive changed the STI flags, but the `auipc` and its `%pcrel_hi` fixup is located in the fragment after.
When `getPCRelHiFixup()` searches for the `%pcrel_hi` it fails to find it since it uses the fragment & offset of the label to search, whereas the fixup is in another fragment.
This is just from some initial debugging, so I'm not sure whether this is the only issue and/or what the best solution would be.
Repository:
rL LLVM
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D54029/new/
https://reviews.llvm.org/D54029
More information about the llvm-commits
mailing list