[PATCH]: force IFUNC symbols emit relocation

Roman Divacky rdivacky at freebsd.org
Tue Jan 7 12:41:28 PST 2014


IFUNC symbols currently are resolved and thus the IFUNC functionality
doesnt work. This simple patch forces emission of a relocation to
IFUNC symbols, and that makes it work.

Index: lib/MC/ELFObjectWriter.cpp
===================================================================
--- lib/MC/ELFObjectWriter.cpp  (revision 198706)
+++ lib/MC/ELFObjectWriter.cpp  (working copy)
@@ -1645,7 +1645,7 @@
                                                       const MCFragment &FB,
                                                       bool InSet,
                                                       bool IsPCRel) const {
-  if (DataA.getFlags() & ELF_STB_Weak)
+  if (DataA.getFlags() & ELF_STB_Weak || MCELF::GetType(DataA) == ELF::STT_GNU_IFUNC)
     return false;
   return MCObjectWriter::IsSymbolRefDifferenceFullyResolvedImpl(
                                                  Asm, DataA, FB,InSet, IsPCRel);


Ie. this example http://rys.vlakno.cz/~rdivacky/agner-ifunc.cpp now works.

Do you think it's the right approach?

Thanks, Roman



More information about the llvm-commits mailing list