Skip to content

Commit a15f1bf

Browse files
committed
[RISCV] Avoid calling isSymbolRefDifferenceFullyResolvedImpl. NFC
This member function is supposed to be private to MC. Also add an ifunc test.
1 parent 8a30246 commit a15f1bf

File tree

2 files changed

+16
-3
lines changed

2 files changed

+16
-3
lines changed

llvm/lib/Target/RISCV/MCTargetDesc/RISCVAsmBackend.cpp

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -556,12 +556,13 @@ bool RISCVAsmBackend::evaluateTargetFixup(const MCAssembler &Asm,
556556
return false;
557557

558558
const MCSymbolRefExpr *A = AUIPCTarget.getSymA();
559-
const MCSymbol &SA = A->getSymbol();
559+
const MCSymbolELF &SA = cast<MCSymbolELF>(A->getSymbol());
560560
if (A->getKind() != MCSymbolRefExpr::VK_None || SA.isUndefined())
561561
return false;
562562

563-
bool IsResolved = Asm.getWriter().isSymbolRefDifferenceFullyResolvedImpl(
564-
Asm, SA, *AUIPCDF, false, true);
563+
bool IsResolved = &SA.getSection() == AUIPCDF->getParent() &&
564+
SA.getBinding() == ELF::STB_LOCAL &&
565+
SA.getType() != ELF::STT_GNU_IFUNC;
565566
if (!IsResolved)
566567
return false;
567568

llvm/test/MC/RISCV/pcrel-fixups.s

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,15 @@ local_function:
9999
# RELAX: R_RISCV_RELAX *ABS*
100100
# RELAX: addi a1, a0, 0
101101
# RELAX: R_RISCV_PCREL_LO12_I .Lpcrel_label5
102+
# RELAX: R_RISCV_RELAX *ABS*
103+
104+
.Lpcrel_label6:
105+
auipc a0, %pcrel_hi(ifunc)
106+
# NORELAX: auipc a0, 0
107+
# NORELAX: R_RISCV_PCREL_HI20 ifunc
108+
109+
# RELAX: auipc a0, 0
110+
# RELAX: R_RISCV_PCREL_HI20 ifunc
102111
# RELAX: R_RISCV_RELAX *ABS*
103112

104113
.global global_function
@@ -110,3 +119,6 @@ global_function:
110119
.type weak_function,@function
111120
weak_function:
112121
ret
122+
123+
.type ifunc, %gnu_indirect_function
124+
.set ifunc, global_function

0 commit comments

Comments
 (0)