quebex

A software analysis framework built around the QBE intermediate language

git clone https://git.8pit.net/quebex.git

  1dbgfile "<unknown>"
  2section ".data.strdata.1"
  3data $strdata.1 = { b "test.ha" }
  4
  5dbgfile "<unknown>"
  6section ".data.strliteral.0"
  7data $strliteral.0 = { l $strdata.1, l 7, l 7 }
  8
  9dbgfile "<unknown>"
 10# str [id: 168584446; size: 24]
 11type :type.8 = align 8 { l 3 }
 12
 13dbgfile "<unknown>"
 14# [5]str [id: 3814273521; size: 120]
 15type :type.7 = align 8 { :type.8 5 }
 16
 17dbgfile "<unknown>"
 18section ".data.strdata.11"
 19data $strdata.11 = { b "Hello, world!" }
 20
 21dbgfile "/tmp/hare/test.ha"
 22section ".data.strliteral.10"
 23data $strliteral.10 = { l $strdata.11, l 13, l 13 }
 24
 25dbgfile "<unknown>"
 26section ".data.strdata.13"
 27data $strdata.13 = { b -62, b -95, b "Hola Mundo!" }
 28
 29dbgfile "/tmp/hare/test.ha"
 30section ".data.strliteral.12"
 31data $strliteral.12 = { l $strdata.13, l 13, l 13 }
 32
 33dbgfile "<unknown>"
 34section ".data.strdata.15"
 35data $strdata.15 = { b -50, b -109, b -50, b -75, b -50, b -71, b -50, b -84, b " ", b -49, b -125, b -50, b -65, b -49, b -123, b " ", b -50, b -102, b -49, b -116, b -49, b -125, b -50, b -68, b -50, b -75, b "!" }
 36
 37dbgfile "/tmp/hare/test.ha"
 38section ".data.strliteral.14"
 39data $strliteral.14 = { l $strdata.15, l 27, l 27 }
 40
 41dbgfile "<unknown>"
 42section ".data.strdata.17"
 43data $strdata.17 = { b -48, b -97, b -47, b -128, b -48, b -72, b -48, b -78, b -47, b -106, b -47, b -126, b ", ", b -47, b -127, b -48, b -78, b -47, b -106, b -47, b -126, b -48, b -75, b "!" }
 44
 45dbgfile "/tmp/hare/test.ha"
 46section ".data.strliteral.16"
 47data $strliteral.16 = { l $strdata.17, l 25, l 25 }
 48
 49dbgfile "<unknown>"
 50section ".data.strdata.19"
 51data $strdata.19 = { b -29, b -127, b -109, b -29, b -126, b -109, b -29, b -127, b -85, b -29, b -127, b -95, b -29, b -127, b -81, b -28, b -72, b -106, b -25, b -107, b -116, b -17, b -68, b -127 }
 52
 53dbgfile "/tmp/hare/test.ha"
 54section ".data.strliteral.18"
 55data $strliteral.18 = { l $strdata.19, l 24, l 24 }
 56
 57dbgfile "<unknown>"
 58# [3]u64 [id: 3897114480; size: 24]
 59type :type.39 = align 8 { l 3 }
 60
 61dbgfile "<unknown>"
 62# struct { strerror: *fn(_: *errors::opaque_data) str, data: errors::opaque_data, } [id: 1739311748; size: 32]
 63type :type.38 = align 8 { l 1, :type.39 1 }
 64
 65dbgfile "<unknown>"
 66type :values.align8.37 = { { :type.38 1 } { l 1 } }
 67
 68dbgfile "<unknown>"
 69type :tagged.align8.40 = { w 1, :values.align8.37 1 }
 70
 71dbgfile "<unknown>"
 72# (errors::again | errors::cancelled | nomem | errors::refused | errors::unsupported | errors::opaque_ | io::underread | errors::invalid | errors::interrupted | errors::noentry | errors::netunreachable | errors::overflow | errors::timeout | errors::noaccess | errors::busy | errors::exists) [id: 3466724163; size: 40]
 73type :type.36 = align 8 { { :tagged.align8.40 1 } { w 1 } }
 74
 75dbgfile "<unknown>"
 76type :values.align8.35 = { { l 1 } { :type.36 1 } }
 77
 78dbgfile "<unknown>"
 79type :tagged.align8.41 = { w 1, :values.align8.35 1 }
 80
 81dbgfile "<unknown>"
 82# (size | io::error) [id: 1592311418; size: 48]
 83type :type.34 = align 8 { { :tagged.align8.41 1 } }
 84
 85dbgfile "<unknown>"
 86# []fmt::formattable [id: 1634457743; size: 24]
 87type :type.43 = align 8 { l 3 }
 88
 89dbgfile "<unknown>"
 90type :values.align1.47 = { { b 1 } { b 1 } { b 1 } }
 91
 92dbgfile "<unknown>"
 93type :tagged.align1.48 = { w 1, :values.align1.47 1 }
 94
 95dbgfile "<unknown>"
 96type :values.align2.49 = { { h 1 } { h 1 } }
 97
 98dbgfile "<unknown>"
 99type :tagged.align2.50 = { w 1, :values.align2.49 1 }
100
101dbgfile "<unknown>"
102type :values.align4.51 = { { w 1 } { s 1 } { w 1 } { w 1 } { w 1 } { w 1 } }
103
104dbgfile "<unknown>"
105type :tagged.align4.52 = { w 1, :values.align4.51 1 }
106
107dbgfile "<unknown>"
108type :values.align8.53 = { { l 1 } { l 1 } { d 1 } { :type.8 1 } { l 1 } { l 1 } { l 1 } }
109
110dbgfile "<unknown>"
111type :tagged.align8.54 = { w 1, :values.align8.53 1 }
112
113dbgfile "<unknown>"
114# (i32 | i16 | i8 | i64 | nullable *opaque | bool | f64 | f32 | rune | str | size | int | uintptr | uint | void | u32 | u16 | u8 | u64) [id: 2974858336; size: 32]
115type :type.46 = align 8 { { :tagged.align1.48 1 } { :tagged.align2.50 1 } { :tagged.align4.52 1 } { :tagged.align8.54 1 } { w 1 } }
116
117dbgfile "<unknown>"
118# [1]fmt::formattable [id: 1234624002; size: 32]
119type :type.45 = align 8 { :type.46 1 }
120
121dbgfile "/tmp/hare/test.ha"
122section ".text.main" "ax" export
123function $main() {
124@start.2
125	%binding.6 =l alloc8 120
126	%cur_object.26 =l alloc8 24
127	%object.42 =l alloc8 24
128	%object.44 =l alloc8 32
129	%binding.69 =l alloc8 8
130@body.3
131	dbgloc 3, 25
132	dbgloc 4, 14
133	%item.9 =l add %binding.6, 0
134	dbgloc 5, 31
135	blit $strliteral.10, %item.9, 24
136	%item.9 =l add %binding.6, 24
137	dbgloc 6, 30
138	blit $strliteral.12, %item.9, 24
139	%item.9 =l add %binding.6, 48
140	dbgloc 7, 33
141	blit $strliteral.14, %item.9, 24
142	%item.9 =l add %binding.6, 72
143	dbgloc 8, 32
144	blit $strliteral.16, %item.9, 24
145	%item.9 =l add %binding.6, 96
146	dbgloc 9, 26
147	blit $strliteral.18, %item.9, 24
148	dbgloc 11, 12
149	dbgloc 11, 39
150	%.27 =l copy %binding.6
151	%cur_idx.28 =l copy 0
152@loop.20
153	%valid.30 =w cultl %cur_idx.28, 5
154	jnz %valid.30, @valid.22, @else.25
155@valid.22
156	blit %.27, %cur_object.26, 24
157	%cur_idx.28 =l add %cur_idx.28, 1
158@body.21
159	dbgloc 11, 41
160	dbgloc 12, 40
161	dbgloc 12, 29
162	dbgloc 12, 29
163	dbgloc 12, 38
164	# gen lowered cast
165	dbgloc 12, 38
166	%item.55 =l add %object.44, 0
167	# gen lowered cast
168	storew 168584446, %item.55
169	%.56 =l add %item.55, 8
170	dbgloc 12, 38
171	blit %cur_object.26, %.56, 24
172	%.57 =l add %object.42, 8
173	%.58 =l add %object.42, 16
174	storel %object.44, %object.42
175	storel 1, %.57
176	storel 1, %.58
177	%.33 =:type.34 call $fmt.println(:type.43 %object.42)
178	%tag.62 =w loaduw %.33
179	%subval.65 =l copy %.33
180	%.66 =w ceqw %tag.62, 185362065
181	jnz %.66, @subtype.68, @next.64
182@subtype.68
183	jmp @matches.63
184@matches.63
185	%.70 =l add %.33, 8
186	%.71 =l loadl %.70
187	storel %.71, %binding.69
188	dbgloc 12, 40
189	%.72 =l loadl %binding.69
190	%.59 =l copy %.72
191	jmp @.60
192@next.64
193@default.61
194	dbgloc 12, 40
195	call $rt.abort_fixed(l $strliteral.0, l 12, l 40, l 5)
196	hlt
197@.73
198@.60
199	jmp @.31
200@.74
201@.31
202@after.24
203	%.27 =l add %.27, 24
204	jmp @loop.20
205@else.25
206@.23
207	jmp @.4
208@.75
209@.4
210	ret
211}
212