[PATCH] D52564: [PPC64] Add test for toc-restore on recursive call.

Sean Fertile via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Wed Oct 3 15:02:12 PDT 2018


This revision was automatically updated to reflect the committed changes.
Closed by commit rLLD343729: [PPC64] Test documenting toc-restore after interposable recursive call. [NFC] (authored by sfertile, committed by ).

Repository:
  rLLD LLVM Linker

https://reviews.llvm.org/D52564

Files:
  test/ELF/ppc64-toc-restore-recursive-call.s


Index: test/ELF/ppc64-toc-restore-recursive-call.s
===================================================================
--- test/ELF/ppc64-toc-restore-recursive-call.s
+++ test/ELF/ppc64-toc-restore-recursive-call.s
@@ -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


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D52564.168185.patch
Type: text/x-patch
Size: 1711 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20181003/780291a2/attachment.bin>


More information about the llvm-commits mailing list