1// This is reduced test case for BOLT containing an internal call based on
2// GetCoreDump (from google core dumper).
3
4 .text
5 .globl getCallback
6 .type getCallback, %function
7getCallback:
8 .cfi_startproc
9 pushq %rbp
10 movq %rsp, %rbp
11 pushq %r12
12 pushq %rbx
13 subq $288, %rsp
14 callq .Lnext_instr
15.Lnext_instr:
16 popq %rax
17 addq $17, %rax
18 addq $288, %rsp
19 popq %rbx
20 popq %r12
21 popq %rbp
22 retq
23.Lweird_callback:
24 mov $0xDEADBEEF, %rax
25 retq
26 .cfi_endproc
27
28
29// This one is inspired by:
30//
31// e8 11 00 00 00 callq 17 <ListerThread+0x569>
32// 0f 1f 84 00 00 00 00 00 nopl (%rax,%rax)
33// 48 c7 c0 0f 00 00 00 movq $15, %rax
34// 0f 05 syscall
35// 58 popq %rax
36//
37 .globl getCallback2
38 .type getCallback2, %function
39getCallback2:
40 .cfi_startproc
41 pushq %rbp
42 movq %rsp, %rbp
43 pushq %r12
44 pushq %rbx
45 subq $288, %rsp
46 movq $3, %rbx
47.Lheader:
48 cmpq $0, %rbx
49 jz .Lunwind
50 callq .Lbb
51 nopl (%rax, %rax)
52 mov $0xDEADBEEF, %rax
53 retq
54.Lunwind:
55 addq $288, %rsp
56 popq %rbx
57 popq %r12
58 jmp .Lend
59.Lbb:
60 popq %rax
61 add $4, %rax
62 decq %rbx
63 jmp .Lheader
64.Lend:
65 popq %rbp
66 retq
67 .cfi_endproc
68
69// This case emulates pseudo-inlined functions found in Intel MKL library.
70 .globl getCallback3
71 .type getCallback3, %function
72getCallback3:
73 .cfi_startproc
74 pushq %rbp
75 movq %rsp, %rbp
76 callq getCallback_inlined
77 jmp .L2end
78 nop
79getCallback_inlined:
80 pushq %rbp
81 movq %rsp, %rbp
82 pushq %r12
83 pushq %rbx
84 subq $288, %rsp
85 callq .L2next_instr
86.L2next_instr:
87 popq %rax
88 addq $17, %rax
89 addq $288, %rsp
90 popq %rbx
91 popq %r12
92 popq %rbp
93 retq
94.L2weird_callback:
95 mov $0xDEADBEEF, %rax
96 retq
97
98.L2end:
99 popq %rbp
100 retq
101 .cfi_endproc
102

source code of bolt/test/runtime/X86/Inputs/internalcall.S