-
Notifications
You must be signed in to change notification settings - Fork 3
/
rusttest.k4sm
203 lines (196 loc) · 5.34 KB
/
rusttest.k4sm
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
%alloc7
@@alloc7_elem0 align1 "\x48\x65\x6c\x6c\x6f\x20\x66\x72\x6f\x6d\x20\x74\x68\x65\x20\x6b\x65\x72\x6e\x65\x6c\x21"
%rust_begin_unwind
push u64 bp
push u64 rb
mov u64 bp sp
sub u64 sp $16
; [-16+bp] <= rg
mov u64 [-16+bp] rg
mov u64 rb %rust_begin_unwind
%rust_begin_unwindstart
mov u64 rb %rust_begin_unwindstart
; br label %bb1
jmp u64 %rust_begin_unwindbb1
%rust_begin_unwindbb1
mov u64 rb %rust_begin_unwindbb1
; br label %bb1
jmp u64 %rust_begin_unwindbb1
mov u64 sp bp
pop u64 rb
pop u64 bp
ret
%_ZN8rusttest6printi17h6b087e961fc7f2c6E
push u64 bp
push u64 rb
mov u64 bp sp
sub u64 sp $16
; [-16+bp] <= rg
mov u64 [-16+bp] rg
mov u64 rb %_ZN8rusttest6printi17h6b087e961fc7f2c6E
%_ZN8rusttest6printi17h6b087e961fc7f2c6Estart
; tail call @printi_(i64 %val)
mov u64 rg [-16+bp]
call u64 %printi_
mov u64 rb %_ZN8rusttest6printi17h6b087e961fc7f2c6Estart
; ret void
jmp u64 %_ZN8rusttest6printi17h6b087e961fc7f2c6E_ret
%_ZN8rusttest6printi17h6b087e961fc7f2c6E_ret
mov u64 sp bp
pop u64 rb
pop u64 bp
ret
@null_data_2 align8 $0
%printptrln
push u64 bp
push u64 rb
push u64 rc
mov u64 bp sp
sub u64 sp $112
; [-16+bp] <= rg
mov u64 [-16+bp] rg
; [-32+bp] <= rh
mov u64 [-32+bp] rh
mov u64 rb %printptrln
%printptrlnstart
; %0 = getelementptr inbounds i8* %s, i64 %len
mov u64 [-48+bp] [-16+bp]
mov u64 rc [-32+bp]
mul u64 rc $1
add u64 [-48+bp] rc
; %1 = icmp ne i8* %s, i8* null
cmp u64 [-16+bp] @null_data_2
jne u64 %printptrln__3_cmp_true4
jmp u64 %printptrln__3_cmp_false4
%printptrln__3_cmp_true4
mov u8 [-56+bp] $1
jmp u64 %printptrln__3_cmp_end4
%printptrln__3_cmp_false4
mov u8 [-56+bp] rz
%printptrln__3_cmp_end4
; tail call @llvm.assume(i1 %1)
mov u8 rg [-56+bp]
call u64 %llvm.assume
; %_12.i7 = icmp eq i64 %len, i64 0
cmp u64 [-32+bp] rz
jeq u64 %printptrln__5_cmp_true6
jmp u64 %printptrln__5_cmp_false6
%printptrln__5_cmp_true6
mov u8 [-64+bp] $1
jmp u64 %printptrln__5_cmp_end6
%printptrln__5_cmp_false6
mov u8 [-64+bp] rz
%printptrln__5_cmp_end6
mov u64 rb %printptrlnstart
; br i1 %_12.i7, label %bb5, label %bb7
cmp u8 [-64+bp] rz
jeq u64 %printptrlnbb7
jmp u64 %printptrlnbb5
%printptrlnbb5
; tail call @printc_(i8 10)
mov u8 rg $0xa
call u64 %printc_
mov u64 rb %printptrlnbb5
; ret void
jmp u64 %printptrln_ret
%printptrlnbb7
; %iter.sroa.0.08 = phi i8* [ i8* %2, %bb7 ], [ i8* %s, %start ]
cmp u64 rb %printptrlnbb7
jeq u64 %printptrln__8_phi_%printptrlnbb7
cmp u64 rb %printptrlnstart
jeq u64 %printptrln__9_phi_%printptrlnstart
und
%printptrln__8_phi_%printptrlnbb7
mov u64 [-80+bp] [-96+bp]
jmp u64 %printptrln__7_phi_end
%printptrln__9_phi_%printptrlnstart
mov u64 [-80+bp] [-16+bp]
jmp u64 %printptrln__7_phi_end
%printptrln__7_phi_end
; %2 = getelementptr inbounds i8* %iter.sroa.0.08, i64 1
mov u64 [-96+bp] [-80+bp]
mov u64 rc $0x1
mul u64 rc $1
add u64 [-96+bp] rc
; %_18 = load i8* %iter.sroa.0.08, align 1
mov u64 rc [-80+bp]
mov u8 [-104+bp] [rc]
; tail call @printc_(i8 %_18)
mov u8 rg [-104+bp]
call u64 %printc_
; %_12.i = icmp eq i8* %2, i8* %0
cmp u64 [-96+bp] [-48+bp]
jeq u64 %printptrln__10_cmp_true11
jmp u64 %printptrln__10_cmp_false11
%printptrln__10_cmp_true11
mov u8 [-112+bp] $1
jmp u64 %printptrln__10_cmp_end11
%printptrln__10_cmp_false11
mov u8 [-112+bp] rz
%printptrln__10_cmp_end11
mov u64 rb %printptrlnbb7
; br i1 %_12.i, label %bb5, label %bb7
cmp u8 [-112+bp] rz
jeq u64 %printptrlnbb7
jmp u64 %printptrlnbb5
%printptrln_ret
mov u64 sp bp
pop u64 rc
pop u64 rb
pop u64 bp
ret
%_ZN8rusttest7println17hd072ae442f3002bbE
push u64 bp
push u64 rb
mov u64 bp sp
sub u64 sp $16
mov u64 rb %_ZN8rusttest7println17hd072ae442f3002bbE
%_ZN8rusttest7println17hd072ae442f3002bbEstart
; tail call @printptrln(getelementptr inbounds (<{ [22 x i8] }>* @alloc7, i64 0, i32 0, i64 0), i64 22)
mov u64 [-16+bp] %alloc7
mov u64 rg [-16+bp]
mov u64 rh $0x16
call u64 %printptrln
mov u64 rb %_ZN8rusttest7println17hd072ae442f3002bbEstart
; ret void
jmp u64 %_ZN8rusttest7println17hd072ae442f3002bbE_ret
%_ZN8rusttest7println17hd072ae442f3002bbE_ret
mov u64 sp bp
pop u64 rb
pop u64 bp
ret
%kernel_main
push u64 bp
push u64 rc
push u64 rb
mov u64 bp sp
sub u64 sp $64
; [-16+bp] <= rg
mov u64 [-16+bp] rg
mov u64 rb %kernel_main
%kernel_mainstart
; %_3 = ptrtoint %BootInfo* %boot_info_addr to i64
mov u64 [-32+bp] [-16+bp]
; tail call @_ZN8rusttest6printi17h6b087e961fc7f2c6E(i64 %_3)
mov u64 rg [-32+bp]
call u64 %_ZN8rusttest6printi17h6b087e961fc7f2c6E
; %0 = getelementptr %BootInfo* %boot_info_addr, i64 0, i32 0
mov u64 [-48+bp] [-16+bp]
; %_7 = load i64* %0, align 1
mov u64 rc [-48+bp]
mov u64 [-64+bp] [rc]
; tail call @_ZN8rusttest6printi17h6b087e961fc7f2c6E(i64 %_7)
mov u64 rg [-64+bp]
call u64 %_ZN8rusttest6printi17h6b087e961fc7f2c6E
; tail call @_ZN8rusttest7println17hd072ae442f3002bbE()
call u64 %_ZN8rusttest7println17hd072ae442f3002bbE
; tail call @hlt()
call u64 %hlt
mov u64 rb %kernel_mainstart
; unreachable
und
mov u64 sp bp
pop u64 rb
pop u64 rc
pop u64 bp
ret