Skip to content

Commit

Permalink
[MC] Don't resolve relocations referencing STB_LOCAL STT_GNU_IFUNC
Browse files Browse the repository at this point in the history
  • Loading branch information
MaskRay committed Jan 14, 2020
1 parent 671544c commit 0136f22
Show file tree
Hide file tree
Showing 2 changed files with 9 additions and 2 deletions.
3 changes: 2 additions & 1 deletion llvm/lib/MC/ELFObjectWriter.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1514,7 +1514,8 @@ bool ELFObjectWriter::isSymbolRefDifferenceFullyResolvedImpl(
const auto &SymA = cast<MCSymbolELF>(SA);
if (IsPCRel) {
assert(!InSet);
if (SymA.getBinding() != ELF::STB_LOCAL)
if (SymA.getBinding() != ELF::STB_LOCAL ||
SymA.getType() == ELF::STT_GNU_IFUNC)
return false;
}
return MCObjectWriter::isSymbolRefDifferenceFullyResolvedImpl(Asm, SymA, FB,
Expand Down
8 changes: 7 additions & 1 deletion llvm/test/MC/ELF/target-in-same-section.s
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
# RELOC-NEXT: 0xA R_X86_64_PLT32 weak 0xFFFFFFFFFFFFFFFC
# RELOC-NEXT: 0x19 R_X86_64_PLT32 global 0xFFFFFFFFFFFFFFFC
# RELOC-NEXT: 0x1E R_X86_64_PLT32 weak 0xFFFFFFFFFFFFFFFC
# RELOC-NEXT: 0x23 R_X86_64_PLT32 ifunc 0xFFFFFFFFFFFFFFFC
# RELOC-NEXT: }

# CHECK: 0: jmp
Expand All @@ -19,14 +20,17 @@
# CHECK-NEXT: 13: callq
# CHECK-NEXT: 18: callq
# CHECK-NEXT: 1d: callq
# CHECK-NEXT: 22: retq
# CHECK-NEXT: 22: callq
# CHECK-NEXT: 27: retq

.globl global
.weak weak
.type ifunc,@gnu_indirect_function
global:
weak:
local:
.set var,global
ifunc:
jmp var
jmp local
jmp global
Expand All @@ -36,4 +40,6 @@ local:
call local
call global
call weak

call ifunc
ret

0 comments on commit 0136f22

Please sign in to comment.