]>
Commit | Line | Data |
---|---|---|
2603f7ee AB |
1 | /* This testcase is part of GDB, the GNU debugger. |
2 | ||
e2882c85 | 3 | Copyright 2012-2018 Free Software Foundation, Inc. |
2603f7ee AB |
4 | |
5 | This program is free software; you can redistribute it and/or modify | |
6 | it under the terms of the GNU General Public License as published by | |
7 | the Free Software Foundation; either version 3 of the License, or | |
8 | (at your option) any later version. | |
9 | ||
10 | This program is distributed in the hope that it will be useful, | |
11 | but WITHOUT ANY WARRANTY; without even the implied warranty of | |
12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
13 | GNU General Public License for more details. | |
14 | ||
15 | You should have received a copy of the GNU General Public License | |
16 | along with this program. If not, see <http://www.gnu.org/licenses/>. */ | |
17 | ||
18 | ||
19 | /* Test the behaviour of gdb in the following situation, the dwarf debug | |
20 | information describes a parameter as being in a register but a more | |
21 | recent (inner) frame marks the register as being undefined. | |
22 | ||
23 | This can arrise if the dwarf producer has the location of a parameter in | |
24 | a callee clobbered register at the time of a call. Older versions of | |
25 | gcc used to do this, newer versions seem to avoid this issue. | |
26 | ||
27 | Though it could be argued that such dwarf is incorrect, we would still | |
28 | like gdb to behave in a user friendly, and helpful way when presented | |
29 | with such dwarf. */ | |
30 | ||
31 | /* There are 4 test cases in this assembler file. In each case funcion | |
32 | main calls each test function in turn, each test case then calls the | |
33 | breakpt function. | |
34 | ||
35 | We don't actually pass any parameters around, we don't need to, instead | |
36 | the dwarf for each test function declares that the function has some | |
37 | parameters, and tells us which registers these parameters are in. The | |
38 | breakpt function marks some of these registers as undefined. The main | |
39 | function helpfully places some marker values into all the registers that | |
40 | are used as parameters so we can see if they ever get printed. | |
41 | ||
42 | We use gdb to break in the breakpt function for each of the 4 test | |
43 | cases, and then backtrace through the test function back to main. In | |
44 | each case some or all of the parameters to the test function should be | |
45 | marked as optimized out, due to the breakpt function effectively | |
46 | clobbering them. | |
47 | ||
48 | The dwarf register numbering is different to the gdb register number. | |
49 | In some of the tests we rely on gdb behaviour of being able to specify a | |
50 | struct using a single register location, the structure will then "flow" | |
51 | into the next gdb register. The initial register is specified using a | |
52 | dwarf register number, but the "next" register will depend on gdb | |
53 | register ordering. | |
54 | ||
55 | Exposing this internal gdb register numbering is really a gdb bug, the | |
56 | functionality for selecting the "next" register should be moved into | |
57 | target dependent code (such as AVR). Right now we work around this | |
58 | bug in this test; if the bug is ever fixed this test is going to need | |
59 | some tweaking. | |
60 | ||
61 | The breakpt function always marks rcx, rsi, and rdi as undefined. | |
62 | ||
63 | register | dwarf | gdb | | | |
64 | name | reg # | reg # | breakpt | | |
65 | ----------|-------|-------|---------| | |
66 | rdx | 1 | 3 | | | |
67 | rcx | 2 | 2 | undef | | |
68 | rbx | 3 | 1 | | | |
69 | rsi | 4 | 4 | undef | | |
70 | rdi | 5 | 5 | undef | | |
71 | ||
72 | We declare the test parameters to be in the register rdx, rcx, rbx, rsi, | |
73 | and rdi. Of these, rdx and rbx are not traditionally used for parameter | |
74 | passing, but that really doesn't matter for this test. | |
75 | ||
76 | int_param_single_reg_loc: Passes 8-byte integer parameters in 8-byte | |
77 | registers using DW_OP_regn style location | |
78 | information. The parameters are placed as | |
79 | follows, operand0 (rcx), operand1 (rbx), | |
80 | operand2 (rsi). We expect operand0 and | |
81 | operand2 to be marked as optimised out, but | |
82 | operand1 to be valid. | |
83 | ||
84 | struct_param_single_reg_loc: Passes 16-byte structures in two 8-byte | |
85 | registers using dwarf DW_OP_regn location | |
86 | information to describe a single register, | |
87 | gdb will assume that the structure flows | |
88 | into the next sequential register. The | |
89 | parameters are placed as follows, operand0 | |
90 | (rbx/rcx), operand1 (rcx/rdx), and operand2 | |
91 | (rsi/rdi). The reuse of rcx between | |
92 | operand0 and operand1 is intentional. | |
93 | ||
94 | struct_param_two_reg_pieces: Passes 16-byte structure in two 8-byte | |
95 | registers using dwarf DW_OP_piece based | |
96 | location information to describe both | |
97 | registers. The parameters are placed as | |
98 | follows, operand0 (rdx/rcx), operand1 | |
99 | (rcx/rbx), and operand2 (rsi/rdi). The | |
100 | reuse of rcx between operand0 and operand1 | |
101 | is intentional. | |
102 | ||
103 | int_param_two_reg_pieces: Passes 8-byte integer values in two 8-byte | |
104 | registers with 4-bytes being placed in each | |
105 | register, using dwarf DW_OP_piece based | |
106 | location information to describe how the | |
107 | parameters are split up.The parameters are | |
108 | placed as follows, operand0 (rdx/rcx), | |
109 | operand1 (rcx/rbx), and operand2 (rsi/rdi). | |
110 | The reuse of rcx between operand0 and operand1 | |
111 | is intentional. | |
112 | */ | |
113 | ||
114 | .text | |
115 | ||
116 | .Ltext0: | |
117 | ||
118 | /* main */ | |
119 | .globl main | |
120 | .type main, @function | |
121 | main: | |
122 | .Ltext1: | |
123 | sub $0x8,%rsp | |
124 | .Ltext2: | |
125 | movq $0xdeadbe00deadbe01, %rbx | |
126 | movq $0xdeadbe02deadbe03, %rcx | |
127 | movq $0xdeadbe04deadbe05, %rdx | |
128 | movq $0xdeadbe06deadbe07, %rsi | |
129 | movq $0xdeadbe08deadbe09, %rdi | |
130 | ||
131 | callq int_param_single_reg_loc | |
132 | nop | |
133 | ||
134 | callq struct_param_single_reg_loc | |
135 | nop | |
136 | ||
137 | callq struct_param_two_reg_pieces | |
138 | nop | |
139 | ||
140 | callq int_param_two_reg_pieces | |
141 | nop | |
142 | ||
143 | add $0x8,%rsp | |
144 | retq | |
145 | .Ltext3: | |
146 | .size main, .-main | |
147 | ||
148 | /* breakpt */ | |
149 | .globl breakpt | |
150 | .type breakpt, @function | |
151 | breakpt: | |
152 | .Ltext4: | |
153 | sub $0x8,%rsp | |
154 | add $0x8, %rsp | |
155 | retq | |
156 | .Ltext5: | |
157 | .size breakpt, .-breakpt | |
158 | ||
159 | /* int_param_single_reg_loc */ | |
160 | .globl int_param_single_reg_loc | |
161 | .type int_param_single_reg_loc, @function | |
162 | int_param_single_reg_loc: | |
163 | .Ltext5: | |
164 | sub $0x8,%rsp | |
165 | .Ltext6: | |
166 | nop | |
167 | callq breakpt | |
168 | nop | |
169 | add $0x8,%rsp | |
170 | retq | |
171 | .Ltext7: | |
172 | .size int_param_single_reg_loc, .-int_param_single_reg_loc | |
173 | ||
174 | /* struct_param_single_reg_loc */ | |
175 | .globl struct_param_single_reg_loc | |
176 | .type struct_param_single_reg_loc, @function | |
177 | struct_param_single_reg_loc: | |
178 | .Ltext8: | |
179 | sub $0x8,%rsp | |
180 | .Ltext9: | |
181 | nop | |
182 | callq breakpt | |
183 | nop | |
184 | add $0x8,%rsp | |
185 | retq | |
186 | .Ltext10: | |
187 | .size struct_param_single_reg_loc, .-struct_param_single_reg_loc | |
188 | ||
189 | /* struct_param_two_reg_pieces */ | |
190 | .globl struct_param_two_reg_pieces | |
191 | .type struct_param_two_reg_pieces, @function | |
192 | struct_param_two_reg_pieces: | |
193 | .Ltext11: | |
194 | sub $0x8,%rsp | |
195 | .Ltext12: | |
196 | nop | |
197 | callq breakpt | |
198 | nop | |
199 | add $0x8,%rsp | |
200 | retq | |
201 | .Ltext13: | |
202 | .size struct_param_two_reg_pieces, .-struct_param_two_reg_pieces | |
203 | ||
204 | /* int_param_two_reg_pieces */ | |
205 | .globl int_param_two_reg_pieces | |
206 | .type int_param_two_reg_pieces, @function | |
207 | int_param_two_reg_pieces: | |
208 | .Ltext14: | |
209 | sub $0x8,%rsp | |
210 | .Ltext15: | |
211 | nop | |
212 | callq breakpt | |
213 | nop | |
214 | add $0x8,%rsp | |
215 | retq | |
216 | .Ltext16: | |
217 | .size int_param_two_reg_pieces, .-int_param_two_reg_pieces | |
218 | ||
219 | ||
220 | .Letext0: | |
221 | ||
222 | /*******************************************************/ | |
223 | ||
224 | .section .debug_frame,"",@progbits | |
225 | ||
226 | /* CIE */ | |
227 | .Lframe0: | |
228 | .long .LECIE0-.LSCIE0 /* length */ | |
229 | .LSCIE0: | |
230 | .long 0xffffffff /* CIE_id */ | |
231 | .byte 0x1 /* version */ | |
232 | .string "" /* augmentation */ | |
233 | .uleb128 0x1 /* code alignment */ | |
234 | .sleb128 -8 /* data alignment */ | |
235 | .byte 0x10 /* R/A column */ | |
236 | /* Initial instructions */ | |
237 | .byte 0xc /* DW_CFA_def_cfa */ | |
238 | .uleb128 0x7 /* reg# */ | |
239 | .uleb128 0x8 /* offset */ | |
240 | .byte 0x90 /* DW_CFA_offset (r16) */ | |
241 | .uleb128 0x1 /* offset */ | |
242 | .align 8 | |
243 | .LECIE0: | |
244 | ||
245 | /* FDE : breakpt */ | |
246 | .LSFDE0: | |
247 | .long .LEFDE0-.LASFDE0 /* length */ | |
248 | .LASFDE0: | |
249 | .long .Lframe0 /* CIE reference */ | |
250 | .quad .Ltext4 /* start */ | |
251 | .quad .Ltext5-.Ltext4 /* length */ | |
252 | /* Instructions */ | |
253 | .byte 0x7 /* DW_CFA_undefined */ | |
254 | .uleb128 0x2 /* reg# */ | |
255 | .byte 0x7 /* DW_CFA_undefined */ | |
256 | .uleb128 0x4 /* reg# */ | |
257 | .byte 0x7 /* DW_CFA_undefined */ | |
258 | .uleb128 0x5 /* reg# */ | |
259 | .align 8 | |
260 | .LEFDE0: | |
261 | ||
262 | /* FDE : int_param_single_reg_loc */ | |
263 | .LSFDE2: | |
264 | .long .LEFDE2-.LASFDE2 /* length */ | |
265 | .LASFDE2: | |
266 | .long .Lframe0 /* CIE reference */ | |
267 | .quad .Ltext5 /* start */ | |
268 | .quad .Ltext7-.Ltext5 /* length */ | |
269 | /* Instructions */ | |
270 | .byte 0x4 | |
271 | .long .Ltext6-.Ltext5 | |
272 | .byte 0xe | |
273 | .uleb128 0x10 | |
274 | .align 8 | |
275 | .LEFDE2: | |
276 | ||
277 | /* FDE : struct_param_single_reg_loc */ | |
278 | .LSFDE3: | |
279 | .long .LEFDE3-.LASFDE3 /* length */ | |
280 | .LASFDE3: | |
281 | .long .Lframe0 /* CIE reference */ | |
282 | .quad .Ltext8 /* start */ | |
283 | .quad .Ltext10-.Ltext8 /* length */ | |
284 | /* Instructions */ | |
285 | .byte 0x4 | |
286 | .long .Ltext9-.Ltext8 | |
287 | .byte 0xe | |
288 | .uleb128 0x10 | |
289 | .align 8 | |
290 | .LEFDE3: | |
291 | ||
292 | /* FDE : struct_param_two_reg_pieces */ | |
293 | .LSFDE4: | |
294 | .long .LEFDE4-.LASFDE4 /* length */ | |
295 | .LASFDE4: | |
296 | .long .Lframe0 /* CIE reference */ | |
297 | .quad .Ltext11 /* start */ | |
298 | .quad .Ltext13-.Ltext11 /* length */ | |
299 | /* Instructions */ | |
300 | .byte 0x4 | |
301 | .long .Ltext12-.Ltext11 | |
302 | .byte 0xe | |
303 | .uleb128 0x10 | |
304 | .align 8 | |
305 | .LEFDE4: | |
306 | ||
307 | /* FDE : int_param_two_reg_pieces */ | |
308 | .LSFDE5: | |
309 | .long .LEFDE5-.LASFDE5 /* length */ | |
310 | .LASFDE5: | |
311 | .long .Lframe0 /* CIE reference */ | |
312 | .quad .Ltext14 /* start */ | |
313 | .quad .Ltext16-.Ltext14 /* length */ | |
314 | /* Instructions */ | |
315 | .byte 0x4 | |
316 | .long .Ltext15-.Ltext14 | |
317 | .byte 0xe | |
318 | .uleb128 0x10 | |
319 | .align 8 | |
320 | .LEFDE5: | |
321 | ||
322 | /* FDE : main */ | |
323 | .LSFDE9: | |
324 | .long .LEFDE9-.LASFDE9 /* length */ | |
325 | .LASFDE9: | |
326 | .long .Lframe0 /* CIE reference */ | |
327 | .quad .Ltext1 /* start */ | |
328 | .quad .Ltext3-.Ltext1 /* length */ | |
329 | /* Instructions */ | |
330 | .byte 0x4 | |
331 | .long .Ltext2-.Ltext1 | |
332 | .byte 0xe | |
333 | .uleb128 0x10 | |
334 | .align 8 | |
335 | .LEFDE9: | |
336 | ||
337 | /*******************************************************/ | |
338 | ||
339 | .section .debug_info,"",@progbits | |
340 | .Ldebug_info0: | |
341 | .long .Ldebug_info_end - .Ldebug_info_start /* Length */ | |
342 | .Ldebug_info_start: | |
343 | .value 0x2 /* DWARF version number. */ | |
344 | .long .Ldebug_abbrev0 /* Offset into .debug_abbrev */ | |
345 | .byte 0x8 /* Pointer size */ | |
346 | ||
347 | .LDI0: | |
348 | .uleb128 0x1 /* DW_TAG_compile_unit */ | |
349 | .string "GNU C 4.2.1" /* DW_AT_producer */ | |
350 | .byte 0x1 /* DW_AT_language */ | |
351 | .quad .Ltext0 /* DW_AT_low_pc */ | |
352 | .quad .Letext0 /* DW_AT_high_pc */ | |
353 | ||
354 | .LDI1: | |
355 | .uleb128 0x2 /* DW_TAG_subprogram */ | |
356 | .byte 0x1 /* DW_AT_external */ | |
357 | .string "breakpt" /* DW_AT_name */ | |
358 | .byte 0x1 /* DW_AT_prototyped */ | |
359 | .quad .Ltext4 /* DW_AT_low_pc */ | |
360 | .quad .Ltext5 /* DW_AT_high_pc */ | |
361 | ||
362 | .LDI2: | |
363 | .uleb128 0x5 /* DW_TAG_base_type */ | |
364 | .byte 0x8 /* DW_AT_byte_size */ | |
365 | .byte 0x5 /* DW_AT_encoding (DW_ATE_signed) */ | |
366 | .string "long int" /* DW_AT_name */ | |
367 | ||
368 | .LDI3: | |
369 | .uleb128 0x7 /* DW_TAG_structure_type */ | |
370 | .string "big" /* DW_AT_name */ | |
371 | .byte 0x10 /* DW_AT_byte_size */ | |
e5c6e92b | 372 | .long .LDI6 - .Ldebug_info0 /* DW_AT_sibling */ |
2603f7ee AB |
373 | |
374 | .LDI4: | |
375 | .uleb128 0x8 /* DW_TAG_member */ | |
376 | .string "a" /* DW_AT_name */ | |
e5c6e92b | 377 | .long .LDI2 - .Ldebug_info0 /* DW_AT_type */ |
2603f7ee AB |
378 | .byte 0x2 /* DW_AT_data_member_location : length */ |
379 | .byte 0x23 /* DW_OP_plus_uconst */ | |
380 | .uleb128 0x0 /* + 0 */ | |
381 | ||
382 | .LDI5: | |
3fe1ce1d | 383 | .uleb128 0x8 /* DW_TAG_member */ |
2603f7ee | 384 | .string "b" /* DW_AT_name */ |
e5c6e92b | 385 | .long .LDI2 - .Ldebug_info0 /* DW_AT_type */ |
2603f7ee AB |
386 | .byte 0x2 /* DW_AT_data_member_location : length */ |
387 | .byte 0x23 /* DW_OP_plus_uconst */ | |
388 | .uleb128 0x8 /* + 8 */ | |
389 | .byte 0x0 | |
390 | ||
391 | .LDI6: | |
392 | .uleb128 0x6 /* DW_TAG_subprogram */ | |
393 | .byte 0x1 /* DW_AT_external */ | |
394 | .string "main" /* DW_AT_name */ | |
e5c6e92b | 395 | .long .LDI2 - .Ldebug_info0 /* DW_AT_type */ |
2603f7ee AB |
396 | .quad .Ltext1 /* DW_AT_low_pc */ |
397 | .quad .Ltext3 /* DW_AT_high_pc */ | |
398 | ||
399 | .LDI7: | |
400 | .uleb128 0x3 /* DW_TAG_subprogram */ | |
401 | .byte 0x1 /* DW_AT_external */ | |
402 | .string "int_param_single_reg_loc" /* DW_AT_name */ | |
403 | .byte 0x1 /* DW_AT_prototyped */ | |
404 | .quad .Ltext5 /* DW_AT_low_pc */ | |
405 | .quad .Ltext7 /* DW_AT_high_pc */ | |
e5c6e92b | 406 | .long .LDI11 - .Ldebug_info0 /* DW_AT_sibling */ |
2603f7ee AB |
407 | |
408 | .LDI8: | |
409 | .uleb128 0x4 /* DW_TAG_formal_parameter */ | |
410 | .string "operand0" /* DW_AT_name */ | |
e5c6e92b | 411 | .long .LDI2 - .Ldebug_info0 /* DW_AT_type */ |
2603f7ee AB |
412 | .byte 1 /* DW_AT_location : length */ |
413 | .byte 0x52 /* DW_OP_reg2 */ | |
414 | ||
415 | .LDI9: | |
416 | .uleb128 0x4 /* DW_TAG_formal_parameter */ | |
417 | .string "operand1" /* DW_AT_name */ | |
e5c6e92b | 418 | .long .LDI2 - .Ldebug_info0 /* DW_AT_type */ |
2603f7ee AB |
419 | .byte 1 /* DW_AT_location : length */ |
420 | .byte 0x53 /* DW_OP_reg3 */ | |
421 | ||
422 | .LDI10: | |
423 | .uleb128 0x4 /* DW_TAG_formal_parameter */ | |
424 | .string "operand2" /* DW_AT_name */ | |
e5c6e92b | 425 | .long .LDI2 - .Ldebug_info0 /* DW_AT_type */ |
2603f7ee AB |
426 | .byte 1 /* DW_AT_location : length */ |
427 | .byte 0x54 /* DW_OP_reg4 */ | |
428 | ||
429 | .byte 0x0 | |
430 | ||
431 | .LDI11: | |
432 | .uleb128 0x3 /* DW_TAG_subprogram */ | |
433 | .byte 0x1 /* DW_AT_external */ | |
434 | .string "struct_param_single_reg_loc" /* DW_AT_name */ | |
435 | .byte 0x1 /* DW_AT_prototyped */ | |
436 | .quad .Ltext8 /* DW_AT_low_pc */ | |
437 | .quad .Ltext10 /* DW_AT_high_pc */ | |
e5c6e92b | 438 | .long .LDI15 - .Ldebug_info0 /* DW_AT_sibling */ |
2603f7ee AB |
439 | |
440 | .LDI12: | |
441 | .uleb128 0x4 /* DW_TAG_formal_parameter */ | |
442 | .string "operand0" /* DW_AT_name */ | |
e5c6e92b | 443 | .long .LDI3 - .Ldebug_info0 /* DW_AT_type */ |
2603f7ee AB |
444 | .byte 1 /* DW_AT_location : length */ |
445 | .byte 0x53 /* DW_OP_reg3 */ | |
446 | ||
447 | .LDI13: | |
448 | .uleb128 0x4 /* DW_TAG_formal_parameter */ | |
449 | .string "operand1" /* DW_AT_name */ | |
e5c6e92b | 450 | .long .LDI3 - .Ldebug_info0 /* DW_AT_type */ |
2603f7ee AB |
451 | .byte 1 /* DW_AT_location : length */ |
452 | .byte 0x52 /* DW_OP_reg2 */ | |
453 | ||
454 | .LDI14: | |
455 | .uleb128 0x4 /* DW_TAG_formal_parameter */ | |
456 | .string "operand2" /* DW_AT_name */ | |
e5c6e92b | 457 | .long .LDI3 - .Ldebug_info0 /* DW_AT_type */ |
2603f7ee AB |
458 | .byte 1 /* DW_AT_location : length */ |
459 | .byte 0x54 /* DW_OP_reg4 */ | |
460 | ||
461 | .byte 0x0 | |
462 | ||
463 | .LDI15: | |
464 | .uleb128 0x3 /* DW_TAG_subprogram */ | |
465 | .byte 0x1 /* DW_AT_external */ | |
466 | .string "struct_param_two_reg_pieces" /* DW_AT_name */ | |
467 | .byte 0x1 /* DW_AT_prototyped */ | |
468 | .quad .Ltext11 /* DW_AT_low_pc */ | |
469 | .quad .Ltext13 /* DW_AT_high_pc */ | |
e5c6e92b | 470 | .long .LDI19 - .Ldebug_info0 /* DW_AT_sibling */ |
2603f7ee AB |
471 | |
472 | .LDI16: | |
473 | .uleb128 0x4 /* DW_TAG_formal_parameter */ | |
474 | .string "operand0" /* DW_AT_name */ | |
e5c6e92b | 475 | .long .LDI3 - .Ldebug_info0 /* DW_AT_type */ |
2603f7ee AB |
476 | .byte 6 /* DW_AT_location : length */ |
477 | .byte 0x51 /* DW_OP_reg1 */ | |
478 | .byte 0x93 /* DW_OP_piece */ | |
479 | .uleb128 0x8 /* 8 bytes */ | |
480 | .byte 0x52 /* DW_OP_reg2 */ | |
481 | .byte 0x93 /* DW_OP_piece */ | |
482 | .uleb128 0x8 /* 8 bytes */ | |
483 | ||
484 | .LDI17: | |
485 | .uleb128 0x4 /* DW_TAG_formal_parameter */ | |
486 | .string "operand1" /* DW_AT_name */ | |
e5c6e92b | 487 | .long .LDI3 - .Ldebug_info0 /* DW_AT_type */ |
2603f7ee AB |
488 | .byte 6 /* DW_AT_location : length */ |
489 | .byte 0x52 /* DW_OP_reg2 */ | |
490 | .byte 0x93 /* DW_OP_piece */ | |
491 | .uleb128 0x8 /* 8 bytes */ | |
492 | .byte 0x53 /* DW_OP_reg3 */ | |
493 | .byte 0x93 /* DW_OP_piece */ | |
494 | .uleb128 0x8 /* 8 bytes */ | |
495 | ||
496 | .LDI18: | |
497 | .uleb128 0x4 /* DW_TAG_formal_parameter */ | |
498 | .string "operand2" /* DW_AT_name */ | |
e5c6e92b | 499 | .long .LDI3 - .Ldebug_info0 /* DW_AT_type */ |
2603f7ee AB |
500 | .byte 6 /* DW_AT_location : length */ |
501 | .byte 0x54 /* DW_OP_reg4 */ | |
502 | .byte 0x93 /* DW_OP_piece */ | |
503 | .uleb128 0x8 /* 8 bytes */ | |
504 | .byte 0x55 /* DW_OP_reg5 */ | |
505 | .byte 0x93 /* DW_OP_piece */ | |
506 | .uleb128 0x8 /* 8 bytes */ | |
507 | ||
508 | .byte 0x0 | |
509 | ||
510 | .LDI19: | |
511 | .uleb128 0x3 /* DW_TAG_subprogram */ | |
512 | .byte 0x1 /* DW_AT_external */ | |
513 | .string "int_param_two_reg_pieces" /* DW_AT_name */ | |
514 | .byte 0x1 /* DW_AT_prototyped */ | |
515 | .quad .Ltext14 /* DW_AT_low_pc */ | |
516 | .quad .Ltext16 /* DW_AT_high_pc */ | |
e5c6e92b | 517 | .long .LDIE0 - .Ldebug_info0 /* DW_AT_sibling */ |
2603f7ee AB |
518 | |
519 | .LDI20: | |
520 | .uleb128 0x4 /* DW_TAG_formal_parameter */ | |
521 | .string "operand0" /* DW_AT_name */ | |
e5c6e92b | 522 | .long .LDI2 - .Ldebug_info0 /* DW_AT_type */ |
2603f7ee AB |
523 | .byte 6 /* DW_AT_location : length */ |
524 | .byte 0x51 /* DW_OP_reg1 */ | |
525 | .byte 0x93 /* DW_OP_piece */ | |
526 | .uleb128 0x4 /* 4 bytes */ | |
527 | .byte 0x52 /* DW_OP_reg2 */ | |
528 | .byte 0x93 /* DW_OP_piece */ | |
529 | .uleb128 0x4 /* 4 bytes */ | |
530 | ||
531 | .LDI21: | |
532 | .uleb128 0x4 /* DW_TAG_formal_parameter */ | |
533 | .string "operand1" /* DW_AT_name */ | |
e5c6e92b | 534 | .long .LDI2 - .Ldebug_info0 /* DW_AT_type */ |
2603f7ee AB |
535 | .byte 6 /* DW_AT_location : length */ |
536 | .byte 0x52 /* DW_OP_reg2 */ | |
537 | .byte 0x93 /* DW_OP_piece */ | |
538 | .uleb128 0x4 /* 4 bytes */ | |
539 | .byte 0x53 /* DW_OP_reg3 */ | |
540 | .byte 0x93 /* DW_OP_piece */ | |
541 | .uleb128 0x4 /* 4 bytes */ | |
542 | ||
543 | .LDI22: | |
544 | .uleb128 0x4 /* DW_TAG_formal_parameter */ | |
545 | .string "operand2" /* DW_AT_name */ | |
e5c6e92b | 546 | .long .LDI2 - .Ldebug_info0 /* DW_AT_type */ |
2603f7ee AB |
547 | .byte 6 /* DW_AT_location : length */ |
548 | .byte 0x54 /* DW_OP_reg4 */ | |
549 | .byte 0x93 /* DW_OP_piece */ | |
550 | .uleb128 0x4 /* 4 bytes */ | |
551 | .byte 0x55 /* DW_OP_reg5 */ | |
552 | .byte 0x93 /* DW_OP_piece */ | |
553 | .uleb128 0x4 /* 4 bytes */ | |
554 | ||
555 | .byte 0x0 | |
556 | ||
557 | .LDIE0: | |
558 | .byte 0x0 | |
559 | .Ldebug_info_end: | |
560 | ||
561 | /*******************************************************/ | |
562 | ||
563 | .section .debug_abbrev,"",@progbits | |
564 | .Ldebug_abbrev0: | |
565 | .uleb128 0x1 /* abbrev code */ | |
566 | .uleb128 0x11 /* TAG: DW_TAG_compile_unit */ | |
567 | .byte 0x1 /* DW_CHILDREN_yes */ | |
568 | .uleb128 0x25 /* DW_AT_producer */ | |
569 | .uleb128 0x8 /* DW_FORM_string */ | |
570 | .uleb128 0x13 /* DW_AT_language */ | |
571 | .uleb128 0xb /* DW_FORM_data1 */ | |
572 | .uleb128 0x11 /* DW_AT_low_pc */ | |
573 | .uleb128 0x1 /* DW_FORM_addr */ | |
574 | .uleb128 0x12 /* DW_AT_high_pc */ | |
575 | .uleb128 0x1 /* DW_FORM_addr */ | |
576 | .byte 0x0 | |
577 | .byte 0x0 | |
578 | ||
579 | .uleb128 0x2 /* abbrev code */ | |
580 | .uleb128 0x2e /* TAG: DW_TAG_subprogram */ | |
581 | .byte 0x0 /* DW_CHILDREN_no */ | |
582 | .uleb128 0x3f /* DW_AT_external */ | |
583 | .uleb128 0xc /* DW_FORM_flag */ | |
584 | .uleb128 0x3 /* DW_AT_name */ | |
585 | .uleb128 0x8 /* DW_FORM_string */ | |
586 | .uleb128 0x27 /* DW_AT_prototyped */ | |
587 | .uleb128 0xc /* DW_FORM_flag*/ | |
588 | .uleb128 0x11 /* DW_AT_low_pc */ | |
589 | .uleb128 0x1 /* DW_FORM_addr */ | |
590 | .uleb128 0x12 /* DW_AT_high_pc */ | |
591 | .uleb128 0x1 /* DW_FORM_addr */ | |
592 | .byte 0x0 | |
593 | .byte 0x0 | |
594 | ||
595 | .uleb128 0x3 /* abbrev code */ | |
596 | .uleb128 0x2e /* TAG: DW_TAG_subprogram */ | |
597 | .byte 0x1 /* DW_CHILDREN_yes */ | |
598 | .uleb128 0x3f /* DW_AT_external */ | |
599 | .uleb128 0xc /* DW_FORM_flag */ | |
600 | .uleb128 0x3 /* DW_AT_name */ | |
601 | .uleb128 0x8 /* DW_FORM_string */ | |
602 | .uleb128 0x27 /* DW_AT_prototyped */ | |
603 | .uleb128 0xc /* DW_FORM_flag*/ | |
604 | .uleb128 0x11 /* DW_AT_low_pc */ | |
605 | .uleb128 0x1 /* DW_FORM_addr */ | |
606 | .uleb128 0x12 /* DW_AT_high_pc */ | |
607 | .uleb128 0x1 /* DW_FORM_addr */ | |
608 | .uleb128 0x1 /* DW_AT_sibling */ | |
609 | .uleb128 0x13 /* DW_FORM_ref4 */ | |
610 | .byte 0x0 | |
611 | .byte 0x0 | |
612 | ||
613 | .uleb128 0x4 /* abbrev code */ | |
614 | .uleb128 0x5 /* TAG: DW_TAG_formal_parameter */ | |
615 | .byte 0x0 /* DW_CHILDREN_no */ | |
616 | .uleb128 0x3 /* DW_AT_name */ | |
617 | .uleb128 0x8 /* DW_FORM_string */ | |
618 | .uleb128 0x49 /* DW_AT_type */ | |
619 | .uleb128 0x13 /* DW_FORM_ref4 */ | |
620 | .uleb128 0x2 /* DW_AT_location */ | |
621 | .uleb128 0xa /* DW_FORM_block1 */ | |
622 | .byte 0x0 | |
623 | .byte 0x0 | |
624 | ||
625 | .uleb128 0x5 /* abbrev code */ | |
626 | .uleb128 0x24 /* TAG: DW_TAG_base_type */ | |
627 | .byte 0x0 /* DW_CHILDREN_no */ | |
628 | .uleb128 0xb /* DW_AT_byte_size */ | |
629 | .uleb128 0xb /* DW_FORM_data1 */ | |
630 | .uleb128 0x3e /* DW_AT_encoding */ | |
631 | .uleb128 0xb /* DW_FORM_data1 */ | |
632 | .uleb128 0x3 /* DW_AT_name */ | |
633 | .uleb128 0x8 /* DW_FORM_string */ | |
634 | .byte 0x0 | |
635 | .byte 0x0 | |
636 | ||
637 | .uleb128 0x6 /* abbrev code */ | |
638 | .uleb128 0x2e /* TAG: DW_TAG_subprogram */ | |
639 | .byte 0x0 /* DW_CHILDREN_no */ | |
640 | .uleb128 0x3f /* DW_AT_external */ | |
641 | .uleb128 0xc /* DW_FORM_flag */ | |
642 | .uleb128 0x3 /* DW_AT_name */ | |
643 | .uleb128 0x8 /* DW_FORM_string */ | |
644 | .uleb128 0x49 /* DW_AT_type */ | |
645 | .uleb128 0x13 /* DW_FORM_ref4 */ | |
646 | .uleb128 0x11 /* DW_AT_low_pc */ | |
647 | .uleb128 0x1 /* DW_FORM_addr */ | |
648 | .uleb128 0x12 /* DW_AT_high_pc */ | |
649 | .uleb128 0x1 /* DW_FORM_addr */ | |
650 | .byte 0x0 | |
651 | .byte 0x0 | |
652 | ||
653 | .uleb128 0x7 /* abbrev code */ | |
654 | .uleb128 0x13 /* DW_TAG_structure_type */ | |
655 | .byte 0x1 /* DW_CHILDREN_yes */ | |
656 | .uleb128 0x3 /* DW_AT_name */ | |
657 | .uleb128 0x8 /* DW_FORM_string */ | |
658 | .uleb128 0xb /* DW_AT_byte_size */ | |
659 | .uleb128 0xb /* DW_FORM_data1 */ | |
660 | .uleb128 0x1 /* DW_AT_sibling */ | |
661 | .uleb128 0x13 /* DW_FORM_ref4 */ | |
662 | .byte 0x0 | |
663 | .byte 0x0 | |
664 | ||
665 | .uleb128 0x8 /* abbrev code */ | |
666 | .uleb128 0xd /* DW_TAG_member */ | |
667 | .byte 0x0 /* DW_children_no */ | |
668 | .uleb128 0x3 /* DW_AT_name */ | |
669 | .uleb128 0x8 /* DW_FORM_string */ | |
670 | .uleb128 0x49 /* DW_AT_type */ | |
671 | .uleb128 0x13 /* DW_FORM_ref4 */ | |
672 | .uleb128 0x38 /* DW_AT_data_member_location */ | |
673 | .uleb128 0xa /* DW_FORM_block1 */ | |
674 | .byte 0x0 | |
675 | .byte 0x0 | |
676 | ||
677 | .byte 0x0 |