aboutsummaryrefslogtreecommitdiff
path: root/ld/testsuite/ld-i386/ifunc.s
diff options
context:
space:
mode:
Diffstat (limited to 'ld/testsuite/ld-i386/ifunc.s')
-rw-r--r--ld/testsuite/ld-i386/ifunc.s128
1 files changed, 128 insertions, 0 deletions
diff --git a/ld/testsuite/ld-i386/ifunc.s b/ld/testsuite/ld-i386/ifunc.s
new file mode 100644
index 0000000..3f34cfb
--- /dev/null
+++ b/ld/testsuite/ld-i386/ifunc.s
@@ -0,0 +1,128 @@
+ .file "ifunc.c"
+#APP
+ .type func, %indirect_function
+ .type long_func_name, %indirect_function
+ .section .rodata.str1.1,"aMS",@progbits,1
+.LC0:
+ .string "arg is %d\n"
+#NO_APP
+ .text
+ .p2align 4,,15
+.globl bar
+ .type bar, @function
+bar:
+ pushl %ebp
+ movl %esp, %ebp
+ subl $8, %esp
+ movl 8(%ebp), %eax
+ movl $.LC0, (%esp)
+ movl %eax, 4(%esp)
+ call printf
+ leave
+ ret
+ .size bar, .-bar
+ .section .rodata.str1.1
+.LC1:
+ .string "main: calling func"
+ .section .rodata.str1.4,"aMS",@progbits,1
+ .align 4
+.LC2:
+ .string "main: func finished, calling long_func_name"
+ .section .rodata.str1.1
+.LC3:
+ .string "main: long_func_name finished"
+ .text
+ .p2align 4,,15
+.globl main
+ .type main, @function
+main:
+ leal 4(%esp), %ecx
+ andl $-16, %esp
+ pushl -4(%ecx)
+ pushl %ebp
+ movl %esp, %ebp
+ pushl %ecx
+ subl $4, %esp
+ movl $.LC1, (%esp)
+ call puts
+ call func
+ movl $.LC2, (%esp)
+ call puts
+ call long_func_name
+ movl $.LC3, (%esp)
+ call puts
+ addl $4, %esp
+ xorl %eax, %eax
+ popl %ecx
+ popl %ebp
+ leal -4(%ecx), %esp
+ ret
+ .size main, .-main
+ .p2align 4,,15
+.globl long_func_name
+ .type long_func_name, @function
+long_func_name:
+ pushl %ebp
+ movl %esp, %ebp
+ subl $8, %esp
+ call rand
+ movl $func0, %edx
+ testl %eax, %eax
+ jne .L7
+ movl $func1, %edx
+.L7:
+ movl %edx, %eax
+ leave
+ ret
+ .size long_func_name, .-long_func_name
+ .p2align 4,,15
+.globl func
+ .type func, @function
+func:
+ pushl %ebp
+ movl %esp, %ebp
+ subl $8, %esp
+ call rand
+ movl $func0, %edx
+ testl %eax, %eax
+ jne .L12
+ movl $func1, %edx
+.L12:
+ movl %edx, %eax
+ leave
+ ret
+ .size func, .-func
+ .section .rodata.str1.1
+.LC4:
+ .string "func1\n"
+ .text
+ .p2align 4,,15
+.globl func1
+ .type func1, @function
+func1:
+ pushl %ebp
+ movl %esp, %ebp
+ subl $8, %esp
+ movl $.LC4, (%esp)
+ call puts
+ leave
+ ret
+ .size func1, .-func1
+ .section .rodata.str1.1
+.LC5:
+ .string "func0\n"
+ .text
+ .p2align 4,,15
+.globl func0
+ .type func0, @function
+func0:
+ pushl %ebp
+ movl %esp, %ebp
+ subl $8, %esp
+ movl $.LC5, (%esp)
+ call puts
+ leave
+ ret
+ .size func0, .-func0
+ .ident "GCC: (GNU) 4.3.0 20080428 (Red Hat 4.3.0-8)"
+ .section .note.GNU-stack,"",@progbits