[lld] [lld] Add infrastructure for handling RISCV vendor-specific relocations. (PR #159987)
Sam Elliott via llvm-commits
llvm-commits at lists.llvm.org
Tue Oct 14 11:19:04 PDT 2025
================
@@ -1476,3 +1482,80 @@ void elf::mergeRISCVAttributesSections(Ctx &ctx) {
}
void elf::setRISCVTargetInfo(Ctx &ctx) { ctx.target.reset(new RISCV(ctx)); }
+
+class RISCVRelocScan : public RelocScan {
+public:
+ StringRef rvVendor;
+
+ RISCVRelocScan(Ctx &ctx, InputSectionBase *sec = nullptr)
+ : RelocScan(ctx, sec) {}
+ template <class ELFT, class RelTy>
+ void scan(typename Relocs<RelTy>::const_iterator &it, RelType type,
+ int64_t addend);
+};
+
+template <class ELFT, class RelTy>
+void RISCVRelocScan::scan(typename Relocs<RelTy>::const_iterator &it,
+ RelType type, int64_t addend) {
+ const RelTy &rel = *it;
+ uint32_t symIndex = rel.getSymbol(false);
+ Symbol &sym = sec->getFile<ELFT>()->getSymbol(symIndex);
+
+ if (type == R_RISCV_VENDOR) {
+ if (!rvVendor.empty())
+ Err(ctx) << "found consecutive R_RISCV_VENDOR relocations";
----------------
lenary wrote:
We should probably test this case.
https://github.com/llvm/llvm-project/pull/159987
More information about the llvm-commits
mailing list