[PATCH] D71509: [ELF][PPC64] Implement IPLT code sequence for non-preemptible IFUNC

Fangrui Song via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Tue Dec 17 13:08:54 PST 2019


MaskRay updated this revision to Diff 234376.
MaskRay edited the summary of this revision.
MaskRay added a comment.

Delete std r2, 24(r1) from the IPLT code sequence. If my understanding of sfertile's example is correct,
we have to accept some loss of functionality, either we can't use ifunc tail call, or we can't support non-preemptable ifunc resolving to a function in a different module.

It seems that we can sacrifice the latter because https://sourceware.org/glibc/wiki/GNU_IFUNC says:

  Requirement (a): Resolver must be defined in the same translation unit as the implementations.

Making it work is an extension (I believe it works on EM_386, EM_X86_64, EM_ARM, and EM_AARCH64). Unforunately we have to add the restriction for EM_PPC64.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D71509/new/

https://reviews.llvm.org/D71509

Files:
  lld/ELF/Arch/PPC64.cpp
  lld/ELF/Thunks.cpp
  lld/ELF/Thunks.h
  lld/test/ELF/ppc64-ifunc.s
  lld/test/ELF/ppc64-toc-relax-ifunc.s

-------------- next part --------------
A non-text attachment was scrubbed...
Name: D71509.234376.patch
Type: text/x-patch
Size: 9128 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20191217/3522fed0/attachment.bin>


More information about the llvm-commits mailing list