xref: /llvm-project/bolt/test/runtime/X86/Inputs/internalcall.S (revision 4c106cfdf7cf7eec861ad3983a3dd9a9e8f3a8ae)
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