[lld] r343729 - [PPC64] Test documenting toc-restore after interposable recursive call. [NFC]

Sean Fertile via llvm-commits llvm-commits at lists.llvm.org
Wed Oct 3 14:58:44 PDT 2018


Author: sfertile
Date: Wed Oct  3 14:58:44 2018
New Revision: 343729

URL: http://llvm.org/viewvc/llvm-project?rev=343729&view=rev
Log:
[PPC64] Test documenting toc-restore after interposable recursive call. [NFC]

A test verifying that toc restores are properly inserted following recursive
calls, as well as briefly describing why they are needed.

Differential Revision: https://reviews.llvm.org/D52564

Added:
    lld/trunk/test/ELF/ppc64-toc-restore-recursive-call.s

Added: lld/trunk/test/ELF/ppc64-toc-restore-recursive-call.s
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/ELF/ppc64-toc-restore-recursive-call.s?rev=343729&view=auto
==============================================================================
--- lld/trunk/test/ELF/ppc64-toc-restore-recursive-call.s (added)
+++ lld/trunk/test/ELF/ppc64-toc-restore-recursive-call.s Wed Oct  3 14:58:44 2018
@@ -0,0 +1,52 @@
+# REQUIRES: ppc
+
+# RUN: llvm-mc -filetype=obj -triple=powerpc64le-unknown-linux %s -o %t1.o
+# RUN: ld.lld -shared %t1.o -o %t
+# RUN: llvm-objdump -d -r %t | FileCheck %s
+
+# For a recursive call that is interposable the linker calls the plt-stub rather
+# then calling the function directly. Since the call is through a plt stub and
+# might be interposed with a different definition at runtime, a toc-restore is
+# required to follow the call.
+
+# The decision to use a plt-stub for the recursive call is not one I feel
+# strongly about either way. It was done because it matches what bfd and gold do
+# for recursive calls as well as keeps the logic for recursive calls consistent
+# with non-recursive calls.
+
+# CHECK-LABEL: __plt_recursive_func:
+# CHECK-NEXT: 10000:
+# CHECK-LABEL: recursive_func
+# CHECK-NEXT:  10014:
+# CHECK:       1003c: {{[0-9a-fA-F ]+}} bl .+67108804
+# CHECK-NEXT:  ld 2, 24(1)
+
+        .abiversion 2
+        .section ".text"
+        .p2align 2
+        .global recursive_func
+        .type recursive_func, @function
+recursive_func:
+.Lrf_gep:
+    addis 2, 12, .TOC.-.Lrf_gep at ha
+    addi  2, 2, .TOC.-.Lrf_gep at l
+    .localentry recursive_func, .-recursive_func
+    cmpldi 3, 2
+    blt   0, .Lend
+
+    mflr 0
+    std 0, 16(1)
+    stdu 1, -32(1)
+    addi 5, 3, -1
+    mulld 4, 4, 3
+    mr 3, 5
+    bl recursive_func
+    nop
+    mr 4, 3
+    addi 1, 1, 32
+    ld 0, 16(1)
+    mtlr 0
+
+.Lend:
+    extsw 3, 4
+    blr




More information about the llvm-commits mailing list