Add ifunc tests for call, jmp, add, test
authorH.J. Lu <hjl.tools@gmail.com>
Thu, 3 Sep 2015 11:03:13 +0000 (04:03 -0700)
committerH.J. Lu <hjl.tools@gmail.com>
Thu, 3 Sep 2015 11:03:13 +0000 (04:03 -0700)
* ld-ifunc/ifunc-21-i386.s: Add tests for call, jmp, add, test.
* ld-ifunc/ifunc-21-x86-64.s: Likewise.
* ld-ifunc/ifunc-22-i386.s: Likewise.
* ld-ifunc/ifunc-22-x86-64.s: Likewise.
* ld-ifunc/ifunc-21-i386.d: Updated.
* ld-ifunc/ifunc-21-x86-64.d: Likewise.
* ld-ifunc/ifunc-22-i386.d: Likewise.
* ld-ifunc/ifunc-22-x86-64.d: Likewise.

ld/testsuite/ChangeLog
ld/testsuite/ld-ifunc/ifunc-21-i386.d
ld/testsuite/ld-ifunc/ifunc-21-i386.s
ld/testsuite/ld-ifunc/ifunc-21-x86-64.d
ld/testsuite/ld-ifunc/ifunc-21-x86-64.s
ld/testsuite/ld-ifunc/ifunc-22-i386.d
ld/testsuite/ld-ifunc/ifunc-22-i386.s
ld/testsuite/ld-ifunc/ifunc-22-x86-64.d
ld/testsuite/ld-ifunc/ifunc-22-x86-64.s

index ca1b6654536fc8bf88feeaa70940723bca2a2e4c..34ed02d1abf53c9a38715998c7ddee7c5c0379b5 100644 (file)
@@ -1,6 +1,17 @@
+2015-09-03  H.J. Lu  <hongjiu.lu@intel.com>
+
+       * ld-ifunc/ifunc-21-i386.s: Add tests for call, jmp, add, test.
+       * ld-ifunc/ifunc-21-x86-64.s: Likewise.
+       * ld-ifunc/ifunc-22-i386.s: Likewise.
+       * ld-ifunc/ifunc-22-x86-64.s: Likewise.
+       * ld-ifunc/ifunc-21-i386.d: Updated.
+       * ld-ifunc/ifunc-21-x86-64.d: Likewise.
+       * ld-ifunc/ifunc-22-i386.d: Likewise.
+       * ld-ifunc/ifunc-22-x86-64.d: Likewise.
+
 2015-09-02  H.J. Lu  <hongjiu.lu@intel.com>
 
-       * ld-ifunc/ifunc-21-i386.d: Likewise.
+       * ld-ifunc/ifunc-21-i386.d: New file.
        * ld-ifunc/ifunc-21-i386.s: Likewise.
        * ld-ifunc/ifunc-21-x86-64.d: Likewise.
        * ld-ifunc/ifunc-21-x86-64.s: Likewise.
index 4c3a6a3a7154ea608914500ed0515dbf6c18c59e..c7ca8113f8300fc633c3e59216185df592335a22 100644 (file)
@@ -5,26 +5,12 @@
 
 .*: +file format .*
 
-
-Disassembly of section .plt:
-
-0+8048080 <.plt>:
-[      ]*[a-f0-9]+:    ff 25 b8 90 04 08       jmp    \*0x80490b8
-[      ]*[a-f0-9]+:    68 00 00 00 00          push   \$0x0
-[      ]*[a-f0-9]+:    e9 00 00 00 00          jmp    8048090 <__start>
-
-Disassembly of section .text:
-
+#...
 0+8048090 <__start>:
-[      ]*[a-f0-9]+:    e8 00 00 00 00          call   8048095 <__start\+0x5>
-[      ]*[a-f0-9]+:    5b                      pop    %ebx
-[      ]*[a-f0-9]+:    81 c3 17 10 00 00       add    \$0x1017,%ebx
+[      ]*[a-f0-9]+:    ff 93 0c 00 00 00       call   \*0xc\(%ebx\)
+[      ]*[a-f0-9]+:    ff a3 0c 00 00 00       jmp    \*0xc\(%ebx\)
+[      ]*[a-f0-9]+:    03 83 0c 00 00 00       add    0xc\(%ebx\),%eax
 [      ]*[a-f0-9]+:    8b 83 0c 00 00 00       mov    0xc\(%ebx\),%eax
+[      ]*[a-f0-9]+:    85 83 0c 00 00 00       test   %eax,0xc\(%ebx\)
 [      ]*[a-f0-9]+:    8d ([0-9a-f]{2} ){5}[   ]+lea[  ]+.*
-
-0+80480a8 <foo>:
-[      ]*[a-f0-9]+:    c3                      ret    
-
-0+80480a9 <bar>:
-[      ]*[a-f0-9]+:    c3                      ret    
 #pass
index e1af10615a9df63107f7cafef8c5d07f4ad8b436..92eb55e59aae3fc0535f46b4816aae95058f1205 100644 (file)
@@ -9,11 +9,11 @@ _start:
        .global __start
 __start:
        .type __start,"function"
-       call    .L6
-.L6:
-       popl    %ebx
-       addl    $_GLOBAL_OFFSET_TABLE_+[.-.L6], %ebx
+       call    *foo@GOT(%ebx)
+       jmp     *foo@GOT(%ebx)
+       add     foo@GOT(%ebx), %eax
        mov     foo@GOT(%ebx), %eax
+       test    %eax, foo@GOT(%ebx)
        mov     bar@GOT(%ebx), %eax
        .type   foo, %gnu_indirect_function
 foo:
index ea4663121b54c22e181dea679cc5f7192f3b3371..53ccd5a406474c5f51d870c514ba1ca0e7eabef4 100644 (file)
@@ -5,23 +5,12 @@
 
 .*: +file format .*
 
-
-Disassembly of section .plt:
-
-0+4000d0 <.plt>:
-[      ]*[a-f0-9]+:    ff 25 32 00 20 00       jmpq   \*0x200032\(%rip\)        # 600108 <_GLOBAL_OFFSET_TABLE_\+0x18>
-[      ]*[a-f0-9]+:    68 00 00 00 00          pushq  \$0x0
-[      ]*[a-f0-9]+:    e9 00 00 00 00          jmpq   4000e0 <__start>
-
-Disassembly of section .text:
-
+#...
 0+4000e0 <__start>:
-[      ]*[a-f0-9]+:    48 8b 05 21 00 20 00    mov    0x200021\(%rip\),%rax        # 600108 <_GLOBAL_OFFSET_TABLE_\+0x18>
+[      ]*[a-f0-9]+:    ff 15 42 00 20 00       callq  \*0x200042\(%rip\)        # 600128 <_GLOBAL_OFFSET_TABLE_\+0x18>
+[      ]*[a-f0-9]+:    ff 25 3c 00 20 00       jmpq   \*0x20003c\(%rip\)        # 600128 <_GLOBAL_OFFSET_TABLE_\+0x18>
+[      ]*[a-f0-9]+:    48 03 05 35 00 20 00    add    0x200035\(%rip\),%rax        # 600128 <_GLOBAL_OFFSET_TABLE_\+0x18>
+[      ]*[a-f0-9]+:    48 8b 05 2e 00 20 00    mov    0x20002e\(%rip\),%rax        # 600128 <_GLOBAL_OFFSET_TABLE_\+0x18>
+[      ]*[a-f0-9]+:    48 85 05 27 00 20 00    test   %rax,0x200027\(%rip\)        # 600128 <_GLOBAL_OFFSET_TABLE_\+0x18>
 [      ]*[a-f0-9]+:    48 8d ([0-9a-f]{2} ){5}[        ]+lea[  ]+.*
-
-0+4000ee <foo>:
-[      ]*[a-f0-9]+:    c3                      retq   
-
-0+4000ef <bar>:
-[      ]*[a-f0-9]+:    c3                      retq   
 #pass
index 0cf92ace4ba769f60997113688c4998c1d5c44f5..9d5d028a0e3dee46de23e14cfc7db9a640c3471e 100644 (file)
@@ -9,7 +9,11 @@ _start:
        .global __start
 __start:
        .type __start,"function"
+       call    *foo@GOTPCREL(%rip)
+       jmp     *foo@GOTPCREL(%rip)
+       add     foo@GOTPCREL(%rip), %rax
        movq    foo@GOTPCREL(%rip), %rax
+       test    %rax, foo@GOTPCREL(%rip)
        movq    bar@GOTPCREL(%rip), %rax
        .type foo, %gnu_indirect_function
 foo:
index 4c3a6a3a7154ea608914500ed0515dbf6c18c59e..c7ca8113f8300fc633c3e59216185df592335a22 100644 (file)
@@ -5,26 +5,12 @@
 
 .*: +file format .*
 
-
-Disassembly of section .plt:
-
-0+8048080 <.plt>:
-[      ]*[a-f0-9]+:    ff 25 b8 90 04 08       jmp    \*0x80490b8
-[      ]*[a-f0-9]+:    68 00 00 00 00          push   \$0x0
-[      ]*[a-f0-9]+:    e9 00 00 00 00          jmp    8048090 <__start>
-
-Disassembly of section .text:
-
+#...
 0+8048090 <__start>:
-[      ]*[a-f0-9]+:    e8 00 00 00 00          call   8048095 <__start\+0x5>
-[      ]*[a-f0-9]+:    5b                      pop    %ebx
-[      ]*[a-f0-9]+:    81 c3 17 10 00 00       add    \$0x1017,%ebx
+[      ]*[a-f0-9]+:    ff 93 0c 00 00 00       call   \*0xc\(%ebx\)
+[      ]*[a-f0-9]+:    ff a3 0c 00 00 00       jmp    \*0xc\(%ebx\)
+[      ]*[a-f0-9]+:    03 83 0c 00 00 00       add    0xc\(%ebx\),%eax
 [      ]*[a-f0-9]+:    8b 83 0c 00 00 00       mov    0xc\(%ebx\),%eax
+[      ]*[a-f0-9]+:    85 83 0c 00 00 00       test   %eax,0xc\(%ebx\)
 [      ]*[a-f0-9]+:    8d ([0-9a-f]{2} ){5}[   ]+lea[  ]+.*
-
-0+80480a8 <foo>:
-[      ]*[a-f0-9]+:    c3                      ret    
-
-0+80480a9 <bar>:
-[      ]*[a-f0-9]+:    c3                      ret    
 #pass
index f6fc7849450cd650c745267364860a04958dfd3a..2e3202d4a81749824ab8a0d36997acc1be81e113 100644 (file)
@@ -9,11 +9,11 @@ _start:
        .global __start
 __start:
        .type __start,"function"
-       call    .L6
-.L6:
-       popl    %ebx
-       addl    $_GLOBAL_OFFSET_TABLE_+[.-.L6], %ebx
+       call    *foo@GOT(%ebx)
+       jmp     *foo@GOT(%ebx)
+       add     foo@GOT(%ebx), %eax
        mov     foo@GOT(%ebx), %eax
+       test    %eax, foo@GOT(%ebx)
        mov     bar@GOT(%ebx), %eax
        .global foo
        .type   foo, %gnu_indirect_function
index ea4663121b54c22e181dea679cc5f7192f3b3371..53ccd5a406474c5f51d870c514ba1ca0e7eabef4 100644 (file)
@@ -5,23 +5,12 @@
 
 .*: +file format .*
 
-
-Disassembly of section .plt:
-
-0+4000d0 <.plt>:
-[      ]*[a-f0-9]+:    ff 25 32 00 20 00       jmpq   \*0x200032\(%rip\)        # 600108 <_GLOBAL_OFFSET_TABLE_\+0x18>
-[      ]*[a-f0-9]+:    68 00 00 00 00          pushq  \$0x0
-[      ]*[a-f0-9]+:    e9 00 00 00 00          jmpq   4000e0 <__start>
-
-Disassembly of section .text:
-
+#...
 0+4000e0 <__start>:
-[      ]*[a-f0-9]+:    48 8b 05 21 00 20 00    mov    0x200021\(%rip\),%rax        # 600108 <_GLOBAL_OFFSET_TABLE_\+0x18>
+[      ]*[a-f0-9]+:    ff 15 42 00 20 00       callq  \*0x200042\(%rip\)        # 600128 <_GLOBAL_OFFSET_TABLE_\+0x18>
+[      ]*[a-f0-9]+:    ff 25 3c 00 20 00       jmpq   \*0x20003c\(%rip\)        # 600128 <_GLOBAL_OFFSET_TABLE_\+0x18>
+[      ]*[a-f0-9]+:    48 03 05 35 00 20 00    add    0x200035\(%rip\),%rax        # 600128 <_GLOBAL_OFFSET_TABLE_\+0x18>
+[      ]*[a-f0-9]+:    48 8b 05 2e 00 20 00    mov    0x20002e\(%rip\),%rax        # 600128 <_GLOBAL_OFFSET_TABLE_\+0x18>
+[      ]*[a-f0-9]+:    48 85 05 27 00 20 00    test   %rax,0x200027\(%rip\)        # 600128 <_GLOBAL_OFFSET_TABLE_\+0x18>
 [      ]*[a-f0-9]+:    48 8d ([0-9a-f]{2} ){5}[        ]+lea[  ]+.*
-
-0+4000ee <foo>:
-[      ]*[a-f0-9]+:    c3                      retq   
-
-0+4000ef <bar>:
-[      ]*[a-f0-9]+:    c3                      retq   
 #pass
index f402c62fb0839bae2495ad6b6149d1bbb8c37d2d..d4194a0fba6b594a2057182a38c18bd041ece177 100644 (file)
@@ -9,7 +9,11 @@ _start:
        .global __start
 __start:
        .type __start,"function"
+       call    *foo@GOTPCREL(%rip)
+       jmp     *foo@GOTPCREL(%rip)
+       add     foo@GOTPCREL(%rip), %rax
        movq    foo@GOTPCREL(%rip), %rax
+       test    %rax, foo@GOTPCREL(%rip)
        movq    bar@GOTPCREL(%rip), %rax
        .type foo, %gnu_indirect_function
        .globl foo