1# REQUIRES: system-linux 2 3# RUN: llvm-mc -dwarf-version=5 -filetype=obj -triple x86_64-unknown-linux %s -o %t.o 4# RUN: %clang %cflags -gdwarf-5 %t.o -o %t.exe 5# RUN: llvm-bolt %t.exe -o %t.bolt --update-debug-sections --debug-thread-count=4 --cu-processing-batch-size=4 6# RUN: llvm-dwarfdump --show-form --verbose --debug-info %t.bolt | FileCheck --check-prefix=POSTCHECK %s 7 8## This test checks that BOLT handles backward cross CU references for dwarf5 9## when -fdebug-types-sections is specified. 10 11# The assembly was manually modified to do cross CU reference. 12 13# POSTCHECK: Type Unit 14# POSTCHECK-SAME: version = 0x0005 15# POSTCHECK: Type Unit 16# POSTCHECK-SAME: version = 0x0005 17# POSTCHECK: Type Unit 18# POSTCHECK-SAME: version = 0x0005 19# POSTCHECK: Type Unit 20# POSTCHECK-SAME: version = 0x0005 21# POSTCHECK: Compile Unit 22# POSTCHECK-SAME: version = 0x0005 23# POSTCHECK: DW_TAG_structure_type [10] 24# POSTCHECK: DW_TAG_structure_type [10] 25# POSTCHECK: Compile Unit 26# POSTCHECK-SAME: version = 0x0005 27# POSTCHECK: DW_TAG_variable [9] 28# POSTCHECK: DW_TAG_variable [12] 29# POSTCHECK: DW_AT_type [DW_FORM_ref_addr] (0x{{[0-9a-f]+}} "Foo") 30 31 32# main.cpp 33# struct Foo { 34# char *c1; 35# char *c2; 36# char *c3; 37# }; 38# struct Foo2 { 39# char *c1; 40# char *c2; 41# }; 42# int main(int argc, char *argv[]) { 43# Foo f; 44# f.c1 = argv[argc]; 45# f.c2 = argv[argc + 1]; 46# f.c3 = argv[argc + 2]; 47# Foo2 f2; 48# f.c1 = argv[argc + 3]; 49# f.c2 = argv[argc + 4]; 50# return 0; 51# } 52 53# helper.cpp 54# struct Foo2a { 55# char *c1; 56# char *c2; 57# char *c3; 58# }; 59# struct Foo3 { 60# char *c1; 61# char *c2; 62# }; 63# 64# int foo() { 65# Foo2a f; 66# Foo3 f2; 67# return 0; 68# } 69 70 .text 71 .file "llvm-link" 72 .globl main # -- Begin function main 73 .p2align 4, 0x90 74 .type main,@function 75main: # @main 76.Lfunc_begin0: 77 .file 1 "/dwarf5-types-backward-cross-reference-test" "main.cpp" md5 0x13f000d932d7bb7e6986b96c183027b9 78 .loc 1 10 0 # main.cpp:10:0 79 .cfi_startproc 80# %bb.0: # %entry 81 pushq %rbp 82 .cfi_def_cfa_offset 16 83 .cfi_offset %rbp, -16 84 movq %rsp, %rbp 85 .cfi_def_cfa_register %rbp 86 movl $0, -4(%rbp) 87 movl %edi, -8(%rbp) 88 movq %rsi, -16(%rbp) 89.Ltmp0: 90 .loc 1 12 9 prologue_end # main.cpp:12:9 91 movq -16(%rbp), %rax 92 movslq -8(%rbp), %rcx 93 movq (%rax,%rcx,8), %rax 94 .loc 1 12 7 is_stmt 0 # main.cpp:12:7 95 movq %rax, -40(%rbp) 96 .loc 1 13 9 is_stmt 1 # main.cpp:13:9 97 movq -16(%rbp), %rax 98 .loc 1 13 14 is_stmt 0 # main.cpp:13:14 99 movl -8(%rbp), %ecx 100 .loc 1 13 19 # main.cpp:13:19 101 addl $1, %ecx 102 .loc 1 13 9 # main.cpp:13:9 103 movslq %ecx, %rcx 104 movq (%rax,%rcx,8), %rax 105 .loc 1 13 7 # main.cpp:13:7 106 movq %rax, -32(%rbp) 107 .loc 1 14 9 is_stmt 1 # main.cpp:14:9 108 movq -16(%rbp), %rax 109 .loc 1 14 14 is_stmt 0 # main.cpp:14:14 110 movl -8(%rbp), %ecx 111 .loc 1 14 19 # main.cpp:14:19 112 addl $2, %ecx 113 .loc 1 14 9 # main.cpp:14:9 114 movslq %ecx, %rcx 115 movq (%rax,%rcx,8), %rax 116 .loc 1 14 7 # main.cpp:14:7 117 movq %rax, -24(%rbp) 118 .loc 1 16 9 is_stmt 1 # main.cpp:16:9 119 movq -16(%rbp), %rax 120 .loc 1 16 14 is_stmt 0 # main.cpp:16:14 121 movl -8(%rbp), %ecx 122 .loc 1 16 19 # main.cpp:16:19 123 addl $3, %ecx 124 .loc 1 16 9 # main.cpp:16:9 125 movslq %ecx, %rcx 126 movq (%rax,%rcx,8), %rax 127 .loc 1 16 7 # main.cpp:16:7 128 movq %rax, -40(%rbp) 129 .loc 1 17 9 is_stmt 1 # main.cpp:17:9 130 movq -16(%rbp), %rax 131 .loc 1 17 14 is_stmt 0 # main.cpp:17:14 132 movl -8(%rbp), %ecx 133 .loc 1 17 19 # main.cpp:17:19 134 addl $4, %ecx 135 .loc 1 17 9 # main.cpp:17:9 136 movslq %ecx, %rcx 137 movq (%rax,%rcx,8), %rax 138 .loc 1 17 7 # main.cpp:17:7 139 movq %rax, -32(%rbp) 140 .loc 1 18 2 is_stmt 1 # main.cpp:18:2 141 xorl %eax, %eax 142 .loc 1 18 2 epilogue_begin is_stmt 0 # main.cpp:18:2 143 popq %rbp 144 .cfi_def_cfa %rsp, 8 145 retq 146.Ltmp1: 147.Lfunc_end0: 148 .size main, .Lfunc_end0-main 149 .cfi_endproc 150 # -- End function 151 .globl _Z3foov # -- Begin function _Z3foov 152 .p2align 4, 0x90 153 .type _Z3foov,@function 154_Z3foov: # @_Z3foov 155.Lfunc_begin1: 156 .file 2 "/dwarf5-types-backward-cross-reference-test" "helper.cpp" md5 0x650c984f17ca3a4e7785e30e6ca8f130 157 .loc 2 11 0 is_stmt 1 # helper.cpp:11:0 158 .cfi_startproc 159# %bb.0: # %entry 160 pushq %rbp 161 .cfi_def_cfa_offset 16 162 .cfi_offset %rbp, -16 163 movq %rsp, %rbp 164 .cfi_def_cfa_register %rbp 165.Ltmp2: 166 .loc 2 14 3 prologue_end # helper.cpp:14:3 167 xorl %eax, %eax 168 .loc 2 14 3 epilogue_begin is_stmt 0 # helper.cpp:14:3 169 popq %rbp 170 .cfi_def_cfa %rsp, 8 171 retq 172.Ltmp3: 173.Lfunc_end1: 174 .size _Z3foov, .Lfunc_end1-_Z3foov 175 .cfi_endproc 176 # -- End function 177 .section .debug_info,"G",@progbits,7448148824980338162,comdat 178 .long .Ldebug_info_end0-.Ldebug_info_start0 # Length of Unit 179.Ldebug_info_start0: 180 .short 5 # DWARF version number 181 .byte 2 # DWARF Unit Type 182 .byte 8 # Address Size (in bytes) 183 .long .debug_abbrev # Offset Into Abbrev. Section 184 .quad 7448148824980338162 # Type Signature 185 .long 35 # Type DIE Offset 186 .byte 1 # Abbrev [1] 0x18:0x37 DW_TAG_type_unit 187 .short 33 # DW_AT_language 188 .long .Lline_table_start0 # DW_AT_stmt_list 189 .long .Lstr_offsets_base0 # DW_AT_str_offsets_base 190 .byte 2 # Abbrev [2] 0x23:0x22 DW_TAG_structure_type 191 .byte 5 # DW_AT_calling_convention 192 .byte 15 # DW_AT_name 193 .byte 24 # DW_AT_byte_size 194 .byte 1 # DW_AT_decl_file 195 .byte 1 # DW_AT_decl_line 196 .byte 3 # Abbrev [3] 0x29:0x9 DW_TAG_member 197 .byte 12 # DW_AT_name 198 .long 69 # DW_AT_type 199 .byte 1 # DW_AT_decl_file 200 .byte 2 # DW_AT_decl_line 201 .byte 0 # DW_AT_data_member_location 202 .byte 3 # Abbrev [3] 0x32:0x9 DW_TAG_member 203 .byte 13 # DW_AT_name 204 .long 69 # DW_AT_type 205 .byte 1 # DW_AT_decl_file 206 .byte 3 # DW_AT_decl_line 207 .byte 8 # DW_AT_data_member_location 208 .byte 3 # Abbrev [3] 0x3b:0x9 DW_TAG_member 209 .byte 14 # DW_AT_name 210 .long 69 # DW_AT_type 211 .byte 1 # DW_AT_decl_file 212 .byte 4 # DW_AT_decl_line 213 .byte 16 # DW_AT_data_member_location 214 .byte 0 # End Of Children Mark 215 .byte 4 # Abbrev [4] 0x45:0x5 DW_TAG_pointer_type 216 .long 74 # DW_AT_type 217 .byte 5 # Abbrev [5] 0x4a:0x4 DW_TAG_base_type 218 .byte 10 # DW_AT_name 219 .byte 6 # DW_AT_encoding 220 .byte 1 # DW_AT_byte_size 221 .byte 0 # End Of Children Mark 222.Ldebug_info_end0: 223 .section .debug_info,"G",@progbits,5322170643381124694,comdat 224 .long .Ldebug_info_end1-.Ldebug_info_start1 # Length of Unit 225.Ldebug_info_start1: 226 .short 5 # DWARF version number 227 .byte 2 # DWARF Unit Type 228 .byte 8 # Address Size (in bytes) 229 .long .debug_abbrev # Offset Into Abbrev. Section 230 .quad 5322170643381124694 # Type Signature 231 .long 35 # Type DIE Offset 232 .byte 1 # Abbrev [1] 0x18:0x2e DW_TAG_type_unit 233 .short 33 # DW_AT_language 234 .long .Lline_table_start0 # DW_AT_stmt_list 235 .long .Lstr_offsets_base0 # DW_AT_str_offsets_base 236 .byte 2 # Abbrev [2] 0x23:0x19 DW_TAG_structure_type 237 .byte 5 # DW_AT_calling_convention 238 .byte 17 # DW_AT_name 239 .byte 16 # DW_AT_byte_size 240 .byte 1 # DW_AT_decl_file 241 .byte 6 # DW_AT_decl_line 242 .byte 3 # Abbrev [3] 0x29:0x9 DW_TAG_member 243 .byte 12 # DW_AT_name 244 .long 60 # DW_AT_type 245 .byte 1 # DW_AT_decl_file 246 .byte 7 # DW_AT_decl_line 247 .byte 0 # DW_AT_data_member_location 248 .byte 3 # Abbrev [3] 0x32:0x9 DW_TAG_member 249 .byte 13 # DW_AT_name 250 .long 60 # DW_AT_type 251 .byte 1 # DW_AT_decl_file 252 .byte 8 # DW_AT_decl_line 253 .byte 8 # DW_AT_data_member_location 254 .byte 0 # End Of Children Mark 255 .byte 4 # Abbrev [4] 0x3c:0x5 DW_TAG_pointer_type 256 .long 65 # DW_AT_type 257 .byte 5 # Abbrev [5] 0x41:0x4 DW_TAG_base_type 258 .byte 10 # DW_AT_name 259 .byte 6 # DW_AT_encoding 260 .byte 1 # DW_AT_byte_size 261 .byte 0 # End Of Children Mark 262.Ldebug_info_end1: 263 .section .debug_info,"G",@progbits,1175092228111723119,comdat 264 .long .Ldebug_info_end2-.Ldebug_info_start2 # Length of Unit 265.Ldebug_info_start2: 266 .short 5 # DWARF version number 267 .byte 2 # DWARF Unit Type 268 .byte 8 # Address Size (in bytes) 269 .long .debug_abbrev # Offset Into Abbrev. Section 270 .quad 1175092228111723119 # Type Signature 271 .long 35 # Type DIE Offset 272 .byte 1 # Abbrev [1] 0x18:0x37 DW_TAG_type_unit 273 .short 33 # DW_AT_language 274 .long .Lline_table_start0 # DW_AT_stmt_list 275 .long .Lstr_offsets_base0 # DW_AT_str_offsets_base 276 .byte 2 # Abbrev [2] 0x23:0x22 DW_TAG_structure_type 277 .byte 5 # DW_AT_calling_convention 278 .byte 18 # DW_AT_name 279 .byte 24 # DW_AT_byte_size 280 .byte 2 # DW_AT_decl_file 281 .byte 1 # DW_AT_decl_line 282 .byte 3 # Abbrev [3] 0x29:0x9 DW_TAG_member 283 .byte 12 # DW_AT_name 284 .long 69 # DW_AT_type 285 .byte 2 # DW_AT_decl_file 286 .byte 2 # DW_AT_decl_line 287 .byte 0 # DW_AT_data_member_location 288 .byte 3 # Abbrev [3] 0x32:0x9 DW_TAG_member 289 .byte 13 # DW_AT_name 290 .long 69 # DW_AT_type 291 .byte 2 # DW_AT_decl_file 292 .byte 3 # DW_AT_decl_line 293 .byte 8 # DW_AT_data_member_location 294 .byte 3 # Abbrev [3] 0x3b:0x9 DW_TAG_member 295 .byte 14 # DW_AT_name 296 .long 69 # DW_AT_type 297 .byte 2 # DW_AT_decl_file 298 .byte 4 # DW_AT_decl_line 299 .byte 16 # DW_AT_data_member_location 300 .byte 0 # End Of Children Mark 301 .byte 4 # Abbrev [4] 0x45:0x5 DW_TAG_pointer_type 302 .long 74 # DW_AT_type 303 .byte 5 # Abbrev [5] 0x4a:0x4 DW_TAG_base_type 304 .byte 10 # DW_AT_name 305 .byte 6 # DW_AT_encoding 306 .byte 1 # DW_AT_byte_size 307 .byte 0 # End Of Children Mark 308.Ldebug_info_end2: 309 .section .debug_info,"G",@progbits,12995149649732825572,comdat 310 .long .Ldebug_info_end3-.Ldebug_info_start3 # Length of Unit 311.Ldebug_info_start3: 312 .short 5 # DWARF version number 313 .byte 2 # DWARF Unit Type 314 .byte 8 # Address Size (in bytes) 315 .long .debug_abbrev # Offset Into Abbrev. Section 316 .quad -5451594423976726044 # Type Signature 317 .long 35 # Type DIE Offset 318 .byte 1 # Abbrev [1] 0x18:0x2e DW_TAG_type_unit 319 .short 33 # DW_AT_language 320 .long .Lline_table_start0 # DW_AT_stmt_list 321 .long .Lstr_offsets_base0 # DW_AT_str_offsets_base 322 .byte 2 # Abbrev [2] 0x23:0x19 DW_TAG_structure_type 323 .byte 5 # DW_AT_calling_convention 324 .byte 19 # DW_AT_name 325 .byte 16 # DW_AT_byte_size 326 .byte 2 # DW_AT_decl_file 327 .byte 6 # DW_AT_decl_line 328 .byte 3 # Abbrev [3] 0x29:0x9 DW_TAG_member 329 .byte 12 # DW_AT_name 330 .long 60 # DW_AT_type 331 .byte 2 # DW_AT_decl_file 332 .byte 7 # DW_AT_decl_line 333 .byte 0 # DW_AT_data_member_location 334 .byte 3 # Abbrev [3] 0x32:0x9 DW_TAG_member 335 .byte 13 # DW_AT_name 336 .long 60 # DW_AT_type 337 .byte 2 # DW_AT_decl_file 338 .byte 8 # DW_AT_decl_line 339 .byte 8 # DW_AT_data_member_location 340 .byte 0 # End Of Children Mark 341 .byte 4 # Abbrev [4] 0x3c:0x5 DW_TAG_pointer_type 342 .long 65 # DW_AT_type 343 .byte 5 # Abbrev [5] 0x41:0x4 DW_TAG_base_type 344 .byte 10 # DW_AT_name 345 .byte 6 # DW_AT_encoding 346 .byte 1 # DW_AT_byte_size 347 .byte 0 # End Of Children Mark 348.Ldebug_info_end3: 349 .section .debug_abbrev,"",@progbits 350 .byte 1 # Abbreviation Code 351 .byte 65 # DW_TAG_type_unit 352 .byte 1 # DW_CHILDREN_yes 353 .byte 19 # DW_AT_language 354 .byte 5 # DW_FORM_data2 355 .byte 16 # DW_AT_stmt_list 356 .byte 23 # DW_FORM_sec_offset 357 .byte 114 # DW_AT_str_offsets_base 358 .byte 23 # DW_FORM_sec_offset 359 .byte 0 # EOM(1) 360 .byte 0 # EOM(2) 361 .byte 2 # Abbreviation Code 362 .byte 19 # DW_TAG_structure_type 363 .byte 1 # DW_CHILDREN_yes 364 .byte 54 # DW_AT_calling_convention 365 .byte 11 # DW_FORM_data1 366 .byte 3 # DW_AT_name 367 .byte 37 # DW_FORM_strx1 368 .byte 11 # DW_AT_byte_size 369 .byte 11 # DW_FORM_data1 370 .byte 58 # DW_AT_decl_file 371 .byte 11 # DW_FORM_data1 372 .byte 59 # DW_AT_decl_line 373 .byte 11 # DW_FORM_data1 374 .byte 0 # EOM(1) 375 .byte 0 # EOM(2) 376 .byte 3 # Abbreviation Code 377 .byte 13 # DW_TAG_member 378 .byte 0 # DW_CHILDREN_no 379 .byte 3 # DW_AT_name 380 .byte 37 # DW_FORM_strx1 381 .byte 73 # DW_AT_type 382 .byte 19 # DW_FORM_ref4 383 .byte 58 # DW_AT_decl_file 384 .byte 11 # DW_FORM_data1 385 .byte 59 # DW_AT_decl_line 386 .byte 11 # DW_FORM_data1 387 .byte 56 # DW_AT_data_member_location 388 .byte 11 # DW_FORM_data1 389 .byte 0 # EOM(1) 390 .byte 0 # EOM(2) 391 .byte 4 # Abbreviation Code 392 .byte 15 # DW_TAG_pointer_type 393 .byte 0 # DW_CHILDREN_no 394 .byte 73 # DW_AT_type 395 .byte 19 # DW_FORM_ref4 396 .byte 0 # EOM(1) 397 .byte 0 # EOM(2) 398 .byte 5 # Abbreviation Code 399 .byte 36 # DW_TAG_base_type 400 .byte 0 # DW_CHILDREN_no 401 .byte 3 # DW_AT_name 402 .byte 37 # DW_FORM_strx1 403 .byte 62 # DW_AT_encoding 404 .byte 11 # DW_FORM_data1 405 .byte 11 # DW_AT_byte_size 406 .byte 11 # DW_FORM_data1 407 .byte 0 # EOM(1) 408 .byte 0 # EOM(2) 409 .byte 6 # Abbreviation Code 410 .byte 17 # DW_TAG_compile_unit 411 .byte 1 # DW_CHILDREN_yes 412 .byte 37 # DW_AT_producer 413 .byte 37 # DW_FORM_strx1 414 .byte 19 # DW_AT_language 415 .byte 5 # DW_FORM_data2 416 .byte 3 # DW_AT_name 417 .byte 37 # DW_FORM_strx1 418 .byte 114 # DW_AT_str_offsets_base 419 .byte 23 # DW_FORM_sec_offset 420 .byte 16 # DW_AT_stmt_list 421 .byte 23 # DW_FORM_sec_offset 422 .byte 27 # DW_AT_comp_dir 423 .byte 37 # DW_FORM_strx1 424 .byte 17 # DW_AT_low_pc 425 .byte 27 # DW_FORM_addrx 426 .byte 18 # DW_AT_high_pc 427 .byte 6 # DW_FORM_data4 428 .byte 115 # DW_AT_addr_base 429 .byte 23 # DW_FORM_sec_offset 430 .byte 0 # EOM(1) 431 .byte 0 # EOM(2) 432 .byte 7 # Abbreviation Code 433 .byte 46 # DW_TAG_subprogram 434 .byte 1 # DW_CHILDREN_yes 435 .byte 17 # DW_AT_low_pc 436 .byte 27 # DW_FORM_addrx 437 .byte 18 # DW_AT_high_pc 438 .byte 6 # DW_FORM_data4 439 .byte 64 # DW_AT_frame_base 440 .byte 24 # DW_FORM_exprloc 441 .byte 3 # DW_AT_name 442 .byte 37 # DW_FORM_strx1 443 .byte 58 # DW_AT_decl_file 444 .byte 11 # DW_FORM_data1 445 .byte 59 # DW_AT_decl_line 446 .byte 11 # DW_FORM_data1 447 .byte 73 # DW_AT_type 448 .byte 19 # DW_FORM_ref4 449 .byte 63 # DW_AT_external 450 .byte 25 # DW_FORM_flag_present 451 .byte 0 # EOM(1) 452 .byte 0 # EOM(2) 453 .byte 8 # Abbreviation Code 454 .byte 5 # DW_TAG_formal_parameter 455 .byte 0 # DW_CHILDREN_no 456 .byte 2 # DW_AT_location 457 .byte 24 # DW_FORM_exprloc 458 .byte 3 # DW_AT_name 459 .byte 37 # DW_FORM_strx1 460 .byte 58 # DW_AT_decl_file 461 .byte 11 # DW_FORM_data1 462 .byte 59 # DW_AT_decl_line 463 .byte 11 # DW_FORM_data1 464 .byte 73 # DW_AT_type 465 .byte 19 # DW_FORM_ref4 466 .byte 0 # EOM(1) 467 .byte 0 # EOM(2) 468 .byte 9 # Abbreviation Code 469 .byte 52 # DW_TAG_variable 470 .byte 0 # DW_CHILDREN_no 471 .byte 2 # DW_AT_location 472 .byte 24 # DW_FORM_exprloc 473 .byte 3 # DW_AT_name 474 .byte 37 # DW_FORM_strx1 475 .byte 58 # DW_AT_decl_file 476 .byte 11 # DW_FORM_data1 477 .byte 59 # DW_AT_decl_line 478 .byte 11 # DW_FORM_data1 479 .byte 73 # DW_AT_type 480 .byte 19 # DW_FORM_ref4 481 .byte 0 # EOM(1) 482 .byte 0 # EOM(2) 483 .byte 10 # Abbreviation Code 484 .byte 19 # DW_TAG_structure_type 485 .byte 0 # DW_CHILDREN_no 486 .byte 60 # DW_AT_declaration 487 .byte 25 # DW_FORM_flag_present 488 .byte 105 # DW_AT_signature 489 .byte 32 # DW_FORM_ref_sig8 490 .byte 0 # EOM(1) 491 .byte 0 # EOM(2) 492 .byte 11 # Abbreviation Code 493 .byte 46 # DW_TAG_subprogram 494 .byte 1 # DW_CHILDREN_yes 495 .byte 17 # DW_AT_low_pc 496 .byte 27 # DW_FORM_addrx 497 .byte 18 # DW_AT_high_pc 498 .byte 6 # DW_FORM_data4 499 .byte 64 # DW_AT_frame_base 500 .byte 24 # DW_FORM_exprloc 501 .byte 110 # DW_AT_linkage_name 502 .byte 37 # DW_FORM_strx1 503 .byte 3 # DW_AT_name 504 .byte 37 # DW_FORM_strx1 505 .byte 58 # DW_AT_decl_file 506 .byte 11 # DW_FORM_data1 507 .byte 59 # DW_AT_decl_line 508 .byte 11 # DW_FORM_data1 509 .byte 73 # DW_AT_type 510 .byte 19 # DW_FORM_ref4 511 .byte 63 # DW_AT_external 512 .byte 25 # DW_FORM_flag_present 513 .byte 0 # EOM(1) 514 .byte 0 # EOM(2) 515 .byte 12 # Abbreviation Code <-- Manually added abbrev decl 516 .byte 52 # DW_TAG_variable 517 .byte 0 # DW_CHILDREN_no 518 .byte 2 # DW_AT_location 519 .byte 24 # DW_FORM_exprloc 520 .byte 3 # DW_AT_name 521 .byte 37 # DW_FORM_strx1 522 .byte 58 # DW_AT_decl_file 523 .byte 11 # DW_FORM_data1 524 .byte 59 # DW_AT_decl_line 525 .byte 11 # DW_FORM_data1 526 .byte 73 # DW_AT_type 527 .byte 16 # DW_FORM_ref_addr 528 .byte 0 # EOM(1) 529 .byte 0 # EOM(2) 530 .byte 0 # EOM(3) 531 .section .debug_info,"",@progbits 532.Lcu_begin0: 533 .long .Ldebug_info_end4-.Ldebug_info_start4 # Length of Unit 534.Ldebug_info_start4: 535 .short 5 # DWARF version number 536 .byte 1 # DWARF Unit Type 537 .byte 8 # Address Size (in bytes) 538 .long .debug_abbrev # Offset Into Abbrev. Section 539 .byte 6 # Abbrev [6] 0xc:0x78 DW_TAG_compile_unit 540 .byte 0 # DW_AT_producer 541 .short 33 # DW_AT_language 542 .byte 1 # DW_AT_name 543 .long .Lstr_offsets_base0 # DW_AT_str_offsets_base 544 .long .Lline_table_start0 # DW_AT_stmt_list 545 .byte 2 # DW_AT_comp_dir 546 .byte 0 # DW_AT_low_pc 547 .long .Lfunc_end0-.Lfunc_begin0 # DW_AT_high_pc 548 .long .Laddr_table_base0 # DW_AT_addr_base 549 .byte 7 # Abbrev [7] 0x23:0x3c DW_TAG_subprogram 550 .byte 0 # DW_AT_low_pc 551 .long .Lfunc_end0-.Lfunc_begin0 # DW_AT_high_pc 552 .byte 1 # DW_AT_frame_base 553 .byte 86 554 .byte 4 # DW_AT_name 555 .byte 1 # DW_AT_decl_file 556 .byte 10 # DW_AT_decl_line 557 .long 95 # DW_AT_type 558 # DW_AT_external 559 .byte 8 # Abbrev [8] 0x32:0xb DW_TAG_formal_parameter 560 .byte 2 # DW_AT_location 561 .byte 145 562 .byte 120 563 .byte 8 # DW_AT_name 564 .byte 1 # DW_AT_decl_file 565 .byte 10 # DW_AT_decl_line 566 .long 95 # DW_AT_type 567 .byte 8 # Abbrev [8] 0x3d:0xb DW_TAG_formal_parameter 568 .byte 2 # DW_AT_location 569 .byte 145 570 .byte 112 571 .byte 9 # DW_AT_name 572 .byte 1 # DW_AT_decl_file 573 .byte 10 # DW_AT_decl_line 574 .long 99 # DW_AT_type 575 .byte 9 # Abbrev [9] 0x48:0xb DW_TAG_variable 576 .byte 2 # DW_AT_location 577 .byte 145 578 .byte 88 579 .byte 11 # DW_AT_name 580 .byte 1 # DW_AT_decl_file 581 .byte 11 # DW_AT_decl_line 582 .long 113 # DW_AT_type 583 .byte 9 # Abbrev [9] 0x53:0xb DW_TAG_variable 584 .byte 2 # DW_AT_location 585 .byte 145 586 .byte 72 587 .byte 16 # DW_AT_name 588 .byte 1 # DW_AT_decl_file 589 .byte 15 # DW_AT_decl_line 590 .long 122 # DW_AT_type 591 .byte 0 # End Of Children Mark 592 .byte 5 # Abbrev [5] 0x5f:0x4 DW_TAG_base_type 593 .byte 5 # DW_AT_name 594 .byte 5 # DW_AT_encoding 595 .byte 4 # DW_AT_byte_size 596 .byte 4 # Abbrev [4] 0x63:0x5 DW_TAG_pointer_type 597 .long 104 # DW_AT_type 598 .byte 4 # Abbrev [4] 0x68:0x5 DW_TAG_pointer_type 599 .long 109 # DW_AT_type 600 .byte 5 # Abbrev [5] 0x6d:0x4 DW_TAG_base_type 601 .byte 10 # DW_AT_name 602 .byte 6 # DW_AT_encoding 603 .byte 1 # DW_AT_byte_size 604 .Lmanual_label: 605 .byte 10 # Abbrev [10] 0x71:0x9 DW_TAG_structure_type 606 # DW_AT_declaration 607 .quad 7448148824980338162 # DW_AT_signature 608 .byte 10 # Abbrev [10] 0x7a:0x9 DW_TAG_structure_type 609 # DW_AT_declaration 610 .quad 5322170643381124694 # DW_AT_signature 611 .byte 0 # End Of Children Mark 612.Ldebug_info_end4: 613.Lcu_begin1: 614 .long .Ldebug_info_end5-.Ldebug_info_start5 # Length of Unit 615.Ldebug_info_start5: 616 .short 5 # DWARF version number 617 .byte 1 # DWARF Unit Type 618 .byte 8 # Address Size (in bytes) 619 .long .debug_abbrev # Offset Into Abbrev. Section 620 .byte 6 # Abbrev [6] 0xc:0x55 DW_TAG_compile_unit 621 .byte 0 # DW_AT_producer 622 .short 33 # DW_AT_language 623 .byte 3 # DW_AT_name 624 .long .Lstr_offsets_base0 # DW_AT_str_offsets_base 625 .long .Lline_table_start0 # DW_AT_stmt_list 626 .byte 2 # DW_AT_comp_dir 627 .byte 1 # DW_AT_low_pc 628 .long .Lfunc_end1-.Lfunc_begin1 # DW_AT_high_pc 629 .long .Laddr_table_base0 # DW_AT_addr_base 630 .byte 11 # Abbrev [11] 0x23:0x27 DW_TAG_subprogram 631 .byte 1 # DW_AT_low_pc 632 .long .Lfunc_end1-.Lfunc_begin1 # DW_AT_high_pc 633 .byte 1 # DW_AT_frame_base 634 .byte 86 635 .byte 6 # DW_AT_linkage_name 636 .byte 7 # DW_AT_name 637 .byte 2 # DW_AT_decl_file 638 .byte 11 # DW_AT_decl_line 639 .long 74 # DW_AT_type 640 # DW_AT_external 641 .byte 9 # Abbrev [9] 0x33:0xb DW_TAG_variable 642 .byte 2 # DW_AT_location 643 .byte 145 644 .byte 104 645 .byte 11 # DW_AT_name 646 .byte 2 # DW_AT_decl_file 647 .byte 12 # DW_AT_decl_line 648 .long 78 # DW_AT_type 649 .byte 12 # Abbrev [12] 0x3e:0xb DW_TAG_variable <-- Manually modified s/9/12 650 .byte 2 # DW_AT_location 651 .byte 145 652 .byte 88 653 .byte 16 # DW_AT_name 654 .byte 2 # DW_AT_decl_file 655 .byte 13 # DW_AT_decl_line 656 .long .Lmanual_label # DW_AT_type <-- Manually modified 657 .byte 0 # End Of Children Mark 658 .byte 5 # Abbrev [5] 0x4a:0x4 DW_TAG_base_type 659 .byte 5 # DW_AT_name 660 .byte 5 # DW_AT_encoding 661 .byte 4 # DW_AT_byte_size 662 .byte 10 # Abbrev [10] 0x4e:0x9 DW_TAG_structure_type 663 # DW_AT_declaration 664 .quad 1175092228111723119 # DW_AT_signature 665 .byte 10 # Abbrev [10] 0x57:0x9 DW_TAG_structure_type 666 # DW_AT_declaration 667 .quad -5451594423976726044 # DW_AT_signature 668 .byte 0 # End Of Children Mark 669.Ldebug_info_end5: 670 .section .debug_str_offsets,"",@progbits 671 .long 84 # Length of String Offsets Set 672 .short 5 673 .short 0 674.Lstr_offsets_base0: 675 .section .debug_str,"MS",@progbits,1 676.Linfo_string0: 677 .asciz "clang version 17.0.0 (https://github.com/llvm/llvm-project.git 73027ae39b1492e5b6033358a13b86d7d1e781ae)" # string offset=0 678.Linfo_string1: 679 .asciz "main.cpp" # string offset=105 680.Linfo_string2: 681 .asciz "/dwarf5-types-backward-reference-test" # string offset=114 682.Linfo_string3: 683 .asciz "helper.cpp" # string offset=189 684.Linfo_string4: 685 .asciz "main" # string offset=200 686.Linfo_string5: 687 .asciz "int" # string offset=205 688.Linfo_string6: 689 .asciz "_Z3foov" # string offset=209 690.Linfo_string7: 691 .asciz "foo" # string offset=217 692.Linfo_string8: 693 .asciz "argc" # string offset=221 694.Linfo_string9: 695 .asciz "argv" # string offset=226 696.Linfo_string10: 697 .asciz "char" # string offset=231 698.Linfo_string11: 699 .asciz "f" # string offset=236 700.Linfo_string12: 701 .asciz "c1" # string offset=238 702.Linfo_string13: 703 .asciz "c2" # string offset=241 704.Linfo_string14: 705 .asciz "c3" # string offset=244 706.Linfo_string15: 707 .asciz "Foo" # string offset=247 708.Linfo_string16: 709 .asciz "f2" # string offset=251 710.Linfo_string17: 711 .asciz "Foo2" # string offset=254 712.Linfo_string18: 713 .asciz "Foo2a" # string offset=259 714.Linfo_string19: 715 .asciz "Foo3" # string offset=265 716 .section .debug_str_offsets,"",@progbits 717 .long .Linfo_string0 718 .long .Linfo_string1 719 .long .Linfo_string2 720 .long .Linfo_string3 721 .long .Linfo_string4 722 .long .Linfo_string5 723 .long .Linfo_string6 724 .long .Linfo_string7 725 .long .Linfo_string8 726 .long .Linfo_string9 727 .long .Linfo_string10 728 .long .Linfo_string11 729 .long .Linfo_string12 730 .long .Linfo_string13 731 .long .Linfo_string14 732 .long .Linfo_string15 733 .long .Linfo_string16 734 .long .Linfo_string17 735 .long .Linfo_string18 736 .long .Linfo_string19 737 .section .debug_addr,"",@progbits 738 .long .Ldebug_addr_end0-.Ldebug_addr_start0 # Length of contribution 739.Ldebug_addr_start0: 740 .short 5 # DWARF version number 741 .byte 8 # Address size 742 .byte 0 # Segment selector size 743.Laddr_table_base0: 744 .quad .Lfunc_begin0 745 .quad .Lfunc_begin1 746.Ldebug_addr_end0: 747 .ident "clang version 17.0.0 (https://github.com/llvm/llvm-project.git 73027ae39b1492e5b6033358a13b86d7d1e781ae)" 748 .ident "clang version 17.0.0 (https://github.com/llvm/llvm-project.git 73027ae39b1492e5b6033358a13b86d7d1e781ae)" 749 .section ".note.GNU-stack","",@progbits 750 .addrsig 751 .section .debug_line,"",@progbits 752.Lline_table_start0: 753