From 8c650f161a95873e3dc08365fc9a74583df9de62 Mon Sep 17 00:00:00 2001 From: "H.J. Lu" Date: Thu, 3 Sep 2015 04:03:13 -0700 Subject: [PATCH] Add ifunc tests for call, jmp, add, test * 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 | 13 ++++++++++++- ld/testsuite/ld-ifunc/ifunc-21-i386.d | 24 +++++------------------- ld/testsuite/ld-ifunc/ifunc-21-i386.s | 8 ++++---- ld/testsuite/ld-ifunc/ifunc-21-x86-64.d | 23 ++++++----------------- ld/testsuite/ld-ifunc/ifunc-21-x86-64.s | 4 ++++ ld/testsuite/ld-ifunc/ifunc-22-i386.d | 24 +++++------------------- ld/testsuite/ld-ifunc/ifunc-22-i386.s | 8 ++++---- ld/testsuite/ld-ifunc/ifunc-22-x86-64.d | 23 ++++++----------------- ld/testsuite/ld-ifunc/ifunc-22-x86-64.s | 4 ++++ 9 files changed, 50 insertions(+), 81 deletions(-) diff --git a/ld/testsuite/ChangeLog b/ld/testsuite/ChangeLog index ca1b6654536..34ed02d1abf 100644 --- a/ld/testsuite/ChangeLog +++ b/ld/testsuite/ChangeLog @@ -1,6 +1,17 @@ +2015-09-03 H.J. Lu + + * 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 - * 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. diff --git a/ld/testsuite/ld-ifunc/ifunc-21-i386.d b/ld/testsuite/ld-ifunc/ifunc-21-i386.d index 4c3a6a3a715..c7ca8113f83 100644 --- a/ld/testsuite/ld-ifunc/ifunc-21-i386.d +++ b/ld/testsuite/ld-ifunc/ifunc-21-i386.d @@ -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 : -[ ]*[a-f0-9]+: c3 ret - -0+80480a9 : -[ ]*[a-f0-9]+: c3 ret #pass diff --git a/ld/testsuite/ld-ifunc/ifunc-21-i386.s b/ld/testsuite/ld-ifunc/ifunc-21-i386.s index e1af10615a9..92eb55e59aa 100644 --- a/ld/testsuite/ld-ifunc/ifunc-21-i386.s +++ b/ld/testsuite/ld-ifunc/ifunc-21-i386.s @@ -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: diff --git a/ld/testsuite/ld-ifunc/ifunc-21-x86-64.d b/ld/testsuite/ld-ifunc/ifunc-21-x86-64.d index ea4663121b5..53ccd5a4064 100644 --- a/ld/testsuite/ld-ifunc/ifunc-21-x86-64.d +++ b/ld/testsuite/ld-ifunc/ifunc-21-x86-64.d @@ -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 : -[ ]*[a-f0-9]+: c3 retq - -0+4000ef : -[ ]*[a-f0-9]+: c3 retq #pass diff --git a/ld/testsuite/ld-ifunc/ifunc-21-x86-64.s b/ld/testsuite/ld-ifunc/ifunc-21-x86-64.s index 0cf92ace4ba..9d5d028a0e3 100644 --- a/ld/testsuite/ld-ifunc/ifunc-21-x86-64.s +++ b/ld/testsuite/ld-ifunc/ifunc-21-x86-64.s @@ -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: diff --git a/ld/testsuite/ld-ifunc/ifunc-22-i386.d b/ld/testsuite/ld-ifunc/ifunc-22-i386.d index 4c3a6a3a715..c7ca8113f83 100644 --- a/ld/testsuite/ld-ifunc/ifunc-22-i386.d +++ b/ld/testsuite/ld-ifunc/ifunc-22-i386.d @@ -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 : -[ ]*[a-f0-9]+: c3 ret - -0+80480a9 : -[ ]*[a-f0-9]+: c3 ret #pass diff --git a/ld/testsuite/ld-ifunc/ifunc-22-i386.s b/ld/testsuite/ld-ifunc/ifunc-22-i386.s index f6fc7849450..2e3202d4a81 100644 --- a/ld/testsuite/ld-ifunc/ifunc-22-i386.s +++ b/ld/testsuite/ld-ifunc/ifunc-22-i386.s @@ -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 diff --git a/ld/testsuite/ld-ifunc/ifunc-22-x86-64.d b/ld/testsuite/ld-ifunc/ifunc-22-x86-64.d index ea4663121b5..53ccd5a4064 100644 --- a/ld/testsuite/ld-ifunc/ifunc-22-x86-64.d +++ b/ld/testsuite/ld-ifunc/ifunc-22-x86-64.d @@ -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 : -[ ]*[a-f0-9]+: c3 retq - -0+4000ef : -[ ]*[a-f0-9]+: c3 retq #pass diff --git a/ld/testsuite/ld-ifunc/ifunc-22-x86-64.s b/ld/testsuite/ld-ifunc/ifunc-22-x86-64.s index f402c62fb08..d4194a0fba6 100644 --- a/ld/testsuite/ld-ifunc/ifunc-22-x86-64.s +++ b/ld/testsuite/ld-ifunc/ifunc-22-x86-64.s @@ -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 -- 2.30.2