V3 [PATCH 4/4] i386: Add tests for -malign-branch-boundary and -malign-branch
Egeyar Bagcioglu
egeyar.bagcioglu@oracle.com
Mon Dec 9 15:29:00 GMT 2019
Hi HJ,
The call instructions in the 2 test cases below are on 32 byte
boundaries while -malign-branch-boundary=32 and
-malign-branch=indirect+call are set. It seems to me that this is
exactly when those test cases should fail. Am I missing something here
or is there a mistake? If the former, can you please explain me why
these are correct?
Thanks
Egeyar
On 12/6/19 8:11 PM, H.J. Lu wrote:
> Add tests for -malign-branch-boundary, -malign-branch and
> -mbranches-within-32B-boundaries.
>
>
> diff --git a/gas/testsuite/gas/i386/align-branch-3.d b/gas/testsuite/gas/i386/align-branch-3.d
> new file mode 100644
> index 0000000000..da31b6f503
> --- /dev/null
> +++ b/gas/testsuite/gas/i386/align-branch-3.d
> @@ -0,0 +1,33 @@
> +#as: -malign-branch-boundary=32 -malign-branch=indirect+call
> +#objdump: -dw
> +
> +.*: +file format .*
> +
> +Disassembly of section .text:
> +
> +0+ <foo>:
> + 0: 64 a3 01 00 00 00 mov %eax,%fs:0x1
> + 6: 55 push %ebp
> + 7: 55 push %ebp
> + 8: 55 push %ebp
> + 9: 55 push %ebp
> + a: 89 e5 mov %esp,%ebp
> + c: 89 75 f4 mov %esi,-0xc\(%ebp\)
> + f: 89 75 f4 mov %esi,-0xc\(%ebp\)
> + 12: 89 75 f4 mov %esi,-0xc\(%ebp\)
> + 15: 89 75 f4 mov %esi,-0xc\(%ebp\)
> + 18: 89 75 f4 mov %esi,-0xc\(%ebp\)
> + 1b: 89 75 f4 mov %esi,-0xc\(%ebp\)
> + 1e: e8 fc ff ff ff call 1f <foo\+0x1f>
> + 23: 55 push %ebp
> + 24: 55 push %ebp
> + 25: 64 a3 01 00 00 00 mov %eax,%fs:0x1
> + 2b: 89 e5 mov %esp,%ebp
> + 2d: 89 75 f4 mov %esi,-0xc\(%ebp\)
> + 30: 89 75 f4 mov %esi,-0xc\(%ebp\)
> + 33: 89 75 f4 mov %esi,-0xc\(%ebp\)
> + 36: 89 75 f4 mov %esi,-0xc\(%ebp\)
> + 39: 89 75 f4 mov %esi,-0xc\(%ebp\)
> + 3c: ff 91 00 00 00 00 call \*0x0\(%ecx\)
> + 42: 89 75 f4 mov %esi,-0xc\(%ebp\)
> +#pass
> diff --git a/gas/testsuite/gas/i386/align-branch-3.s b/gas/testsuite/gas/i386/align-branch-3.s
> new file mode 100644
> index 0000000000..e3e6c447c4
> --- /dev/null
> +++ b/gas/testsuite/gas/i386/align-branch-3.s
> @@ -0,0 +1,28 @@
> + .text
> + .globl foo
> + .p2align 4
> +foo:
> + movl %eax, %fs:0x1
> + pushl %ebp
> + pushl %ebp
> + pushl %ebp
> + pushl %ebp
> + movl %esp, %ebp
> + movl %esi, -12(%ebp)
> + movl %esi, -12(%ebp)
> + movl %esi, -12(%ebp)
> + movl %esi, -12(%ebp)
> + movl %esi, -12(%ebp)
> + movl %esi, -12(%ebp)
> + call ___tls_get_addr
> + pushl %ebp
> + pushl %ebp
> + movl %eax, %fs:0x1
> + movl %esp, %ebp
> + movl %esi, -12(%ebp)
> + movl %esi, -12(%ebp)
> + movl %esi, -12(%ebp)
> + movl %esi, -12(%ebp)
> + movl %esi, -12(%ebp)
> + call *___tls_get_addr@GOT(%ecx)
> + movl %esi, -12(%ebp)
>
> diff --git a/gas/testsuite/gas/i386/x86-64-align-branch-3.d b/gas/testsuite/gas/i386/x86-64-align-branch-3.d
> new file mode 100644
> index 0000000000..18767a7045
> --- /dev/null
> +++ b/gas/testsuite/gas/i386/x86-64-align-branch-3.d
> @@ -0,0 +1,32 @@
> +#as: -malign-branch-boundary=32 -malign-branch=indirect+call
> +#objdump: -dw
> +
> +.*: +file format .*
> +
> +Disassembly of section .text:
> +
> +0+ <foo>:
> + 0: 64 89 04 25 01 00 00 00 mov %eax,%fs:0x1
> + 8: 55 push %rbp
> + 9: 55 push %rbp
> + a: 55 push %rbp
> + b: 55 push %rbp
> + c: 48 89 e5 mov %rsp,%rbp
> + f: 89 75 f4 mov %esi,-0xc\(%rbp\)
> + 12: 89 75 f4 mov %esi,-0xc\(%rbp\)
> + 15: 89 75 f4 mov %esi,-0xc\(%rbp\)
> + 18: 89 75 f4 mov %esi,-0xc\(%rbp\)
> + 1b: 89 75 f4 mov %esi,-0xc\(%rbp\)
> + 1e: e8 00 00 00 00 callq 23 <foo\+0x23>
> + 23: 55 push %rbp
> + 24: 55 push %rbp
> + 25: 64 89 04 25 01 00 00 00 mov %eax,%fs:0x1
> + 2d: 48 89 e5 mov %rsp,%rbp
> + 30: 89 75 f4 mov %esi,-0xc\(%rbp\)
> + 33: 89 75 f4 mov %esi,-0xc\(%rbp\)
> + 36: 89 75 f4 mov %esi,-0xc\(%rbp\)
> + 39: 89 75 f4 mov %esi,-0xc\(%rbp\)
> + 3c: 89 75 f4 mov %esi,-0xc\(%rbp\)
> + 3f: ff 15 00 00 00 00 callq \*0x0\(%rip\) # 45 <foo\+0x45>
> + 45: 89 75 f4 mov %esi,-0xc\(%rbp\)
> +#pass
> diff --git a/gas/testsuite/gas/i386/x86-64-align-branch-3.s b/gas/testsuite/gas/i386/x86-64-align-branch-3.s
> new file mode 100644
> index 0000000000..6787cdc36f
> --- /dev/null
> +++ b/gas/testsuite/gas/i386/x86-64-align-branch-3.s
> @@ -0,0 +1,27 @@
> + .text
> + .globl foo
> + .p2align 4
> +foo:
> + movl %eax, %fs:0x1
> + pushq %rbp
> + pushq %rbp
> + pushq %rbp
> + pushq %rbp
> + movq %rsp, %rbp
> + movl %esi, -12(%rbp)
> + movl %esi, -12(%rbp)
> + movl %esi, -12(%rbp)
> + movl %esi, -12(%rbp)
> + movl %esi, -12(%rbp)
> + call __tls_get_addr
> + pushq %rbp
> + pushq %rbp
> + movl %eax, %fs:0x1
> + movq %rsp, %rbp
> + movl %esi, -12(%rbp)
> + movl %esi, -12(%rbp)
> + movl %esi, -12(%rbp)
> + movl %esi, -12(%rbp)
> + movl %esi, -12(%rbp)
> + call *__tls_get_addr@GOTPCREL(%rip)
> + movl %esi, -12(%rbp)
>
More information about the Binutils
mailing list