1 2# REQUIRES: system-linux 3 4# RUN: llvm-mc -dwarf-version=5 -filetype=obj -triple x86_64-unknown-linux %s -o %tmain.o 5# RUN: %clang %cflags -dwarf-5 %tmain.o -o %t.exe -Wl,-q 6# RUN: llvm-bolt %t.exe -o %t.bolt --update-debug-sections 7# RUN: llvm-dwarfdump --debug-info -r 0 --debug-names %t.bolt > %t.txt 8# RUN: cat %t.txt | FileCheck --check-prefix=CHECK %s 9 10## This test checks that BOLT generates Entries for DW_AT_abstract_origin when it has cross cu reference. 11 12# CHECK: [[OFFSET1:0x[0-9a-f]*]]: Compile Unit 13# CHECK: [[OFFSET2:0x[0-9a-f]*]]: Compile Unit 14# CHECK: Name Index @ 0x0 { 15# CHECK-NEXT: Header { 16# CHECK-NEXT: Length: 0xD2 17# CHECK-NEXT: Format: DWARF32 18# CHECK-NEXT: Version: 5 19# CHECK-NEXT: CU count: 2 20# CHECK-NEXT: Local TU count: 0 21# CHECK-NEXT: Foreign TU count: 0 22# CHECK-NEXT: Bucket count: 5 23# CHECK-NEXT: Name count: 5 24# CHECK-NEXT: Abbreviations table size: 0x1F 25# CHECK-NEXT: Augmentation: 'BOLT' 26# CHECK-NEXT: } 27# CHECK-NEXT: Compilation Unit offsets [ 28# CHECK-NEXT: CU[0]: [[OFFSET1]] 29# CHECK-NEXT: CU[1]: [[OFFSET2]] 30# CHECK-NEXT: ] 31# CHECK-NEXT: Abbreviations [ 32# CHECK-NEXT: Abbreviation [[ABBREV1:0x[0-9a-f]*]] { 33# CHECK-NEXT: Tag: DW_TAG_subprogram 34# CHECK-NEXT: DW_IDX_compile_unit: DW_FORM_data1 35# CHECK-NEXT: DW_IDX_die_offset: DW_FORM_ref4 36# CHECK-NEXT: DW_IDX_parent: DW_FORM_flag_present 37# CHECK-NEXT: } 38# CHECK-NEXT: Abbreviation [[ABBREV2:0x[0-9a-f]*]] { 39# CHECK-NEXT: Tag: DW_TAG_inlined_subroutine 40# CHECK-NEXT: DW_IDX_compile_unit: DW_FORM_data1 41# CHECK-NEXT: DW_IDX_die_offset: DW_FORM_ref4 42# CHECK-NEXT: DW_IDX_parent: DW_FORM_ref4 43# CHECK-NEXT: } 44# CHECK-NEXT: Abbreviation [[ABBREV3:0x[0-9a-f]*]] { 45# CHECK-NEXT: Tag: DW_TAG_base_type 46# CHECK-NEXT: DW_IDX_compile_unit: DW_FORM_data1 47# CHECK-NEXT: DW_IDX_die_offset: DW_FORM_ref4 48# CHECK-NEXT: DW_IDX_parent: DW_FORM_flag_present 49# CHECK-NEXT: } 50# CHECK-NEXT: ] 51# CHECK-NEXT: Bucket 0 [ 52# CHECK-NEXT: EMPTY 53# CHECK-NEXT: ] 54# CHECK-NEXT: Bucket 1 [ 55# CHECK-NEXT: Name 1 { 56# CHECK-NEXT: Hash: 0x7C9A7F6A 57# CHECK-NEXT: String: {{.+}} "main" 58# CHECK-NEXT: Entry @ [[ENTRY:0x[0-9a-f]*]] { 59# CHECK-NEXT: Abbrev: [[ABBREV1]] 60# CHECK-NEXT: Tag: DW_TAG_subprogram 61# CHECK-NEXT: DW_IDX_compile_unit: 0x00 62# CHECK-NEXT: DW_IDX_die_offset: 0x00000024 63# CHECK-NEXT: DW_IDX_parent: <parent not indexed> 64# CHECK-NEXT: } 65# CHECK-NEXT: } 66# CHECK-NEXT: Name 2 { 67# CHECK-NEXT: Hash: 0xB5063CFE 68# CHECK-NEXT: String: {{.+}} "_Z3fooi" 69# CHECK-NEXT: Entry @ {{.+}} { 70# CHECK-NEXT: Abbrev: [[ABBREV1]] 71# CHECK-NEXT: Tag: DW_TAG_subprogram 72# CHECK-NEXT: DW_IDX_compile_unit: 0x01 73# CHECK-NEXT: DW_IDX_die_offset: 0x0000003a 74# CHECK-NEXT: DW_IDX_parent: <parent not indexed> 75# CHECK-NEXT: } 76# CHECK-NEXT: Entry @ {{.+}} { 77# CHECK-NEXT: Abbrev: [[ABBREV2]] 78# CHECK-NEXT: Tag: DW_TAG_inlined_subroutine 79# CHECK-NEXT: DW_IDX_compile_unit: 0x00 80# CHECK-NEXT: DW_IDX_die_offset: 0x00000054 81# CHECK-NEXT: DW_IDX_parent: Entry @ [[ENTRY]] 82# CHECK-NEXT: } 83# CHECK-NEXT: } 84# CHECK-NEXT: ] 85# CHECK-NEXT: Bucket 2 [ 86# CHECK-NEXT: EMPTY 87# CHECK-NEXT: ] 88# CHECK-NEXT: Bucket 3 [ 89# CHECK-NEXT: Name 3 { 90# CHECK-NEXT: Hash: 0xB888030 91# CHECK-NEXT: String: {{.+}} "int" 92# CHECK-NEXT: Entry @ {{.+}} { 93# CHECK-NEXT: Abbrev: [[ABBREV3]] 94# CHECK-NEXT: Tag: DW_TAG_base_type 95# CHECK-NEXT: DW_IDX_compile_unit: 0x01 96# CHECK-NEXT: DW_IDX_die_offset: 0x00000036 97# CHECK-NEXT: DW_IDX_parent: <parent not indexed> 98# CHECK-NEXT: } 99# CHECK-NEXT: } 100# CHECK-NEXT: ] 101# CHECK-NEXT: Bucket 4 [ 102# CHECK-NEXT: Name 4 { 103# CHECK-NEXT: Hash: 0xB887389 104# CHECK-NEXT: String: {{.+}} "foo" 105# CHECK-NEXT: Entry @ {{.+}} { 106# CHECK-NEXT: Abbrev: [[ABBREV1]] 107# CHECK-NEXT: Tag: DW_TAG_subprogram 108# CHECK-NEXT: DW_IDX_compile_unit: 0x01 109# CHECK-NEXT: DW_IDX_die_offset: 0x0000003a 110# CHECK-NEXT: DW_IDX_parent: <parent not indexed> 111# CHECK-NEXT: } 112# CHECK-NEXT: Entry @ 0xc4 { 113# CHECK-NEXT: Abbrev: [[ABBREV2]] 114# CHECK-NEXT: Tag: DW_TAG_inlined_subroutine 115# CHECK-NEXT: DW_IDX_compile_unit: 0x00 116# CHECK-NEXT: DW_IDX_die_offset: 0x00000054 117# CHECK-NEXT: DW_IDX_parent: Entry @ [[ENTRY]] 118# CHECK-NEXT: } 119# CHECK-NEXT: } 120# CHECK-NEXT: Name 5 { 121# CHECK-NEXT: Hash: 0x7C952063 122# CHECK-NEXT: String: {{.+}} "char" 123# CHECK-NEXT: Entry @ {{.+}} { 124# CHECK-NEXT: Abbrev: [[ABBREV3]] 125# CHECK-NEXT: Tag: DW_TAG_base_type 126# CHECK-NEXT: DW_IDX_compile_unit: 0x00 127# CHECK-NEXT: DW_IDX_die_offset: 0x00000075 128# CHECK-NEXT: DW_IDX_parent: <parent not indexed> 129# CHECK-NEXT: } 130# CHECK-NEXT: } 131# CHECK-NEXT: ] 132# CHECK-NEXT: } 133 134## clang++ -g2 -gpubnames -S -emit-llvm main.cpp -o main.ll 135## clang++ -g2 -gpubnames -S -emit-llvm helper.cpp -o helper.ll 136## llvm-link main.ll helper.ll -o combined.ll 137## clang++ -g2 -gpubnames combined.ll -emit-llvm -S -o combined.opt.ll 138## llc -dwarf-version=5 -filetype=asm -mtriple x86_64-unknown-linux combined.opt.ll -o combined.s 139## main.cpp 140## extern int foo(int); 141## int main(int argc, char* argv[]) { 142## int i = 0; 143## [[clang::always_inline]] i = foo(argc); 144## return i; 145## } 146## helper.cpp 147## int foo(int i) { 148## return i ++; 149## } 150 151 .text 152 .file "llvm-link" 153 .globl main # -- Begin function main 154 .p2align 4, 0x90 155 .type main,@function 156main: # @main 157.Lfunc_begin0: 158 .file 1 "/home" "main.cpp" md5 0x24fb0b4c3900e91fece1ac87ed73ff3b 159 .loc 1 2 0 # main.cpp:2:0 160 .cfi_startproc 161# %bb.0: # %entry 162 pushq %rbp 163 .cfi_def_cfa_offset 16 164 .cfi_offset %rbp, -16 165 movq %rsp, %rbp 166 .cfi_def_cfa_register %rbp 167 movl $0, -16(%rbp) 168 movl %edi, -12(%rbp) 169 movq %rsi, -24(%rbp) 170.Ltmp0: 171 .loc 1 3 7 prologue_end # main.cpp:3:7 172 movl $0, -4(%rbp) 173 .loc 1 4 36 # main.cpp:4:36 174 movl -12(%rbp), %eax 175 movl %eax, -8(%rbp) 176.Ltmp1: 177 .file 2 "/home" "helper.cpp" md5 0x7d4429e24d8c74d7ee22c1889ad46d6b 178 .loc 2 2 12 # helper.cpp:2:12 179 movl -8(%rbp), %eax 180 movl %eax, %ecx 181 addl $1, %ecx 182 movl %ecx, -8(%rbp) 183.Ltmp2: 184 .loc 1 4 30 # main.cpp:4:30 185 movl %eax, -4(%rbp) 186 .loc 1 5 10 # main.cpp:5:10 187 movl -4(%rbp), %eax 188 .loc 1 5 3 epilogue_begin is_stmt 0 # main.cpp:5:3 189 popq %rbp 190 .cfi_def_cfa %rsp, 8 191 retq 192.Ltmp3: 193.Lfunc_end0: 194 .size main, .Lfunc_end0-main 195 .cfi_endproc 196 # -- End function 197 .globl _Z3fooi # -- Begin function _Z3fooi 198 .p2align 4, 0x90 199 .type _Z3fooi,@function 200_Z3fooi: # @_Z3fooi 201.Lfunc_begin1: 202 .loc 2 1 0 is_stmt 1 # helper.cpp:1:0 203 .cfi_startproc 204# %bb.0: # %entry 205 pushq %rbp 206 .cfi_def_cfa_offset 16 207 .cfi_offset %rbp, -16 208 movq %rsp, %rbp 209 .cfi_def_cfa_register %rbp 210 movl %edi, -4(%rbp) 211.Ltmp4: 212 .loc 2 2 12 prologue_end # helper.cpp:2:12 213 movl -4(%rbp), %eax 214 movl %eax, %ecx 215 addl $1, %ecx 216 movl %ecx, -4(%rbp) 217 .loc 2 2 3 epilogue_begin is_stmt 0 # helper.cpp:2:3 218 popq %rbp 219 .cfi_def_cfa %rsp, 8 220 retq 221.Ltmp5: 222.Lfunc_end1: 223 .size _Z3fooi, .Lfunc_end1-_Z3fooi 224 .cfi_endproc 225 # -- End function 226 .section .debug_abbrev,"",@progbits 227 .byte 1 # Abbreviation Code 228 .byte 17 # DW_TAG_compile_unit 229 .byte 1 # DW_CHILDREN_yes 230 .byte 37 # DW_AT_producer 231 .byte 37 # DW_FORM_strx1 232 .byte 19 # DW_AT_language 233 .byte 5 # DW_FORM_data2 234 .byte 3 # DW_AT_name 235 .byte 37 # DW_FORM_strx1 236 .byte 114 # DW_AT_str_offsets_base 237 .byte 23 # DW_FORM_sec_offset 238 .byte 16 # DW_AT_stmt_list 239 .byte 23 # DW_FORM_sec_offset 240 .byte 27 # DW_AT_comp_dir 241 .byte 37 # DW_FORM_strx1 242 .byte 17 # DW_AT_low_pc 243 .byte 27 # DW_FORM_addrx 244 .byte 18 # DW_AT_high_pc 245 .byte 6 # DW_FORM_data4 246 .byte 115 # DW_AT_addr_base 247 .byte 23 # DW_FORM_sec_offset 248 .byte 0 # EOM(1) 249 .byte 0 # EOM(2) 250 .byte 2 # Abbreviation Code 251 .byte 46 # DW_TAG_subprogram 252 .byte 1 # DW_CHILDREN_yes 253 .byte 17 # DW_AT_low_pc 254 .byte 27 # DW_FORM_addrx 255 .byte 18 # DW_AT_high_pc 256 .byte 6 # DW_FORM_data4 257 .byte 64 # DW_AT_frame_base 258 .byte 24 # DW_FORM_exprloc 259 .byte 3 # DW_AT_name 260 .byte 37 # DW_FORM_strx1 261 .byte 58 # DW_AT_decl_file 262 .byte 11 # DW_FORM_data1 263 .byte 59 # DW_AT_decl_line 264 .byte 11 # DW_FORM_data1 265 .byte 73 # DW_AT_type 266 .byte 16 # DW_FORM_ref_addr 267 .byte 63 # DW_AT_external 268 .byte 25 # DW_FORM_flag_present 269 .byte 0 # EOM(1) 270 .byte 0 # EOM(2) 271 .byte 3 # Abbreviation Code 272 .byte 5 # DW_TAG_formal_parameter 273 .byte 0 # DW_CHILDREN_no 274 .byte 2 # DW_AT_location 275 .byte 24 # DW_FORM_exprloc 276 .byte 3 # DW_AT_name 277 .byte 37 # DW_FORM_strx1 278 .byte 58 # DW_AT_decl_file 279 .byte 11 # DW_FORM_data1 280 .byte 59 # DW_AT_decl_line 281 .byte 11 # DW_FORM_data1 282 .byte 73 # DW_AT_type 283 .byte 16 # DW_FORM_ref_addr 284 .byte 0 # EOM(1) 285 .byte 0 # EOM(2) 286 .byte 4 # Abbreviation Code 287 .byte 5 # DW_TAG_formal_parameter 288 .byte 0 # DW_CHILDREN_no 289 .byte 2 # DW_AT_location 290 .byte 24 # DW_FORM_exprloc 291 .byte 3 # DW_AT_name 292 .byte 37 # DW_FORM_strx1 293 .byte 58 # DW_AT_decl_file 294 .byte 11 # DW_FORM_data1 295 .byte 59 # DW_AT_decl_line 296 .byte 11 # DW_FORM_data1 297 .byte 73 # DW_AT_type 298 .byte 19 # DW_FORM_ref4 299 .byte 0 # EOM(1) 300 .byte 0 # EOM(2) 301 .byte 5 # Abbreviation Code 302 .byte 52 # DW_TAG_variable 303 .byte 0 # DW_CHILDREN_no 304 .byte 2 # DW_AT_location 305 .byte 24 # DW_FORM_exprloc 306 .byte 3 # DW_AT_name 307 .byte 37 # DW_FORM_strx1 308 .byte 58 # DW_AT_decl_file 309 .byte 11 # DW_FORM_data1 310 .byte 59 # DW_AT_decl_line 311 .byte 11 # DW_FORM_data1 312 .byte 73 # DW_AT_type 313 .byte 16 # DW_FORM_ref_addr 314 .byte 0 # EOM(1) 315 .byte 0 # EOM(2) 316 .byte 6 # Abbreviation Code 317 .byte 29 # DW_TAG_inlined_subroutine 318 .byte 1 # DW_CHILDREN_yes 319 .byte 49 # DW_AT_abstract_origin 320 .byte 16 # DW_FORM_ref_addr 321 .byte 17 # DW_AT_low_pc 322 .byte 27 # DW_FORM_addrx 323 .byte 18 # DW_AT_high_pc 324 .byte 6 # DW_FORM_data4 325 .byte 88 # DW_AT_call_file 326 .byte 11 # DW_FORM_data1 327 .byte 89 # DW_AT_call_line 328 .byte 11 # DW_FORM_data1 329 .byte 87 # DW_AT_call_column 330 .byte 11 # DW_FORM_data1 331 .byte 0 # EOM(1) 332 .byte 0 # EOM(2) 333 .byte 7 # Abbreviation Code 334 .byte 5 # DW_TAG_formal_parameter 335 .byte 0 # DW_CHILDREN_no 336 .byte 2 # DW_AT_location 337 .byte 24 # DW_FORM_exprloc 338 .byte 49 # DW_AT_abstract_origin 339 .byte 16 # DW_FORM_ref_addr 340 .byte 0 # EOM(1) 341 .byte 0 # EOM(2) 342 .byte 8 # Abbreviation Code 343 .byte 15 # DW_TAG_pointer_type 344 .byte 0 # DW_CHILDREN_no 345 .byte 73 # DW_AT_type 346 .byte 19 # DW_FORM_ref4 347 .byte 0 # EOM(1) 348 .byte 0 # EOM(2) 349 .byte 9 # Abbreviation Code 350 .byte 36 # DW_TAG_base_type 351 .byte 0 # DW_CHILDREN_no 352 .byte 3 # DW_AT_name 353 .byte 37 # DW_FORM_strx1 354 .byte 62 # DW_AT_encoding 355 .byte 11 # DW_FORM_data1 356 .byte 11 # DW_AT_byte_size 357 .byte 11 # DW_FORM_data1 358 .byte 0 # EOM(1) 359 .byte 0 # EOM(2) 360 .byte 10 # Abbreviation Code 361 .byte 46 # DW_TAG_subprogram 362 .byte 1 # DW_CHILDREN_yes 363 .byte 110 # DW_AT_linkage_name 364 .byte 37 # DW_FORM_strx1 365 .byte 3 # DW_AT_name 366 .byte 37 # DW_FORM_strx1 367 .byte 58 # DW_AT_decl_file 368 .byte 11 # DW_FORM_data1 369 .byte 59 # DW_AT_decl_line 370 .byte 11 # DW_FORM_data1 371 .byte 73 # DW_AT_type 372 .byte 19 # DW_FORM_ref4 373 .byte 63 # DW_AT_external 374 .byte 25 # DW_FORM_flag_present 375 .byte 32 # DW_AT_inline 376 .byte 33 # DW_FORM_implicit_const 377 .byte 1 378 .byte 0 # EOM(1) 379 .byte 0 # EOM(2) 380 .byte 11 # Abbreviation Code 381 .byte 5 # DW_TAG_formal_parameter 382 .byte 0 # DW_CHILDREN_no 383 .byte 3 # DW_AT_name 384 .byte 37 # DW_FORM_strx1 385 .byte 58 # DW_AT_decl_file 386 .byte 11 # DW_FORM_data1 387 .byte 59 # DW_AT_decl_line 388 .byte 11 # DW_FORM_data1 389 .byte 73 # DW_AT_type 390 .byte 19 # DW_FORM_ref4 391 .byte 0 # EOM(1) 392 .byte 0 # EOM(2) 393 .byte 12 # Abbreviation Code 394 .byte 46 # DW_TAG_subprogram 395 .byte 1 # DW_CHILDREN_yes 396 .byte 17 # DW_AT_low_pc 397 .byte 27 # DW_FORM_addrx 398 .byte 18 # DW_AT_high_pc 399 .byte 6 # DW_FORM_data4 400 .byte 64 # DW_AT_frame_base 401 .byte 24 # DW_FORM_exprloc 402 .byte 49 # DW_AT_abstract_origin 403 .byte 19 # DW_FORM_ref4 404 .byte 0 # EOM(1) 405 .byte 0 # EOM(2) 406 .byte 13 # Abbreviation Code 407 .byte 5 # DW_TAG_formal_parameter 408 .byte 0 # DW_CHILDREN_no 409 .byte 2 # DW_AT_location 410 .byte 24 # DW_FORM_exprloc 411 .byte 49 # DW_AT_abstract_origin 412 .byte 19 # DW_FORM_ref4 413 .byte 0 # EOM(1) 414 .byte 0 # EOM(2) 415 .byte 0 # EOM(3) 416 .section .debug_info,"",@progbits 417.Lcu_begin0: 418 .long .Ldebug_info_end0-.Ldebug_info_start0 # Length of Unit 419.Ldebug_info_start0: 420 .short 5 # DWARF version number 421 .byte 1 # DWARF Unit Type 422 .byte 8 # Address Size (in bytes) 423 .long .debug_abbrev # Offset Into Abbrev. Section 424 .byte 1 # Abbrev [1] 0xc:0x6d DW_TAG_compile_unit 425 .byte 0 # DW_AT_producer 426 .short 33 # DW_AT_language 427 .byte 1 # DW_AT_name 428 .long .Lstr_offsets_base0 # DW_AT_str_offsets_base 429 .long .Lline_table_start0 # DW_AT_stmt_list 430 .byte 2 # DW_AT_comp_dir 431 .byte 0 # DW_AT_low_pc 432 .long .Lfunc_end0-.Lfunc_begin0 # DW_AT_high_pc 433 .long .Laddr_table_base0 # DW_AT_addr_base 434 .byte 2 # Abbrev [2] 0x23:0x47 DW_TAG_subprogram 435 .byte 0 # DW_AT_low_pc 436 .long .Lfunc_end0-.Lfunc_begin0 # DW_AT_high_pc 437 .byte 1 # DW_AT_frame_base 438 .byte 86 439 .byte 8 # DW_AT_name 440 .byte 1 # DW_AT_decl_file 441 .byte 2 # DW_AT_decl_line 442 .long .debug_info+174 # DW_AT_type 443 # DW_AT_external 444 .byte 3 # Abbrev [3] 0x32:0xb DW_TAG_formal_parameter 445 .byte 2 # DW_AT_location 446 .byte 145 447 .byte 116 448 .byte 9 # DW_AT_name 449 .byte 1 # DW_AT_decl_file 450 .byte 2 # DW_AT_decl_line 451 .long .debug_info+174 # DW_AT_type 452 .byte 4 # Abbrev [4] 0x3d:0xb DW_TAG_formal_parameter 453 .byte 2 # DW_AT_location 454 .byte 145 455 .byte 104 456 .byte 10 # DW_AT_name 457 .byte 1 # DW_AT_decl_file 458 .byte 2 # DW_AT_decl_line 459 .long 106 # DW_AT_type 460 .byte 5 # Abbrev [5] 0x48:0xb DW_TAG_variable 461 .byte 2 # DW_AT_location 462 .byte 145 463 .byte 124 464 .byte 7 # DW_AT_name 465 .byte 1 # DW_AT_decl_file 466 .byte 3 # DW_AT_decl_line 467 .long .debug_info+174 # DW_AT_type 468 .byte 6 # Abbrev [6] 0x53:0x16 DW_TAG_inlined_subroutine 469 .long .debug_info+156 # DW_AT_abstract_origin 470 .byte 1 # DW_AT_low_pc 471 .long .Ltmp2-.Ltmp1 # DW_AT_high_pc 472 .byte 1 # DW_AT_call_file 473 .byte 4 # DW_AT_call_line 474 .byte 32 # DW_AT_call_column 475 .byte 7 # Abbrev [7] 0x60:0x8 DW_TAG_formal_parameter 476 .byte 2 # DW_AT_location 477 .byte 145 478 .byte 120 479 .long .debug_info+165 # DW_AT_abstract_origin 480 .byte 0 # End Of Children Mark 481 .byte 0 # End Of Children Mark 482 .byte 8 # Abbrev [8] 0x6a:0x5 DW_TAG_pointer_type 483 .long 111 # DW_AT_type 484 .byte 8 # Abbrev [8] 0x6f:0x5 DW_TAG_pointer_type 485 .long 116 # DW_AT_type 486 .byte 9 # Abbrev [9] 0x74:0x4 DW_TAG_base_type 487 .byte 11 # DW_AT_name 488 .byte 6 # DW_AT_encoding 489 .byte 1 # DW_AT_byte_size 490 .byte 0 # End Of Children Mark 491.Ldebug_info_end0: 492.Lcu_begin1: 493 .long .Ldebug_info_end1-.Ldebug_info_start1 # Length of Unit 494.Ldebug_info_start1: 495 .short 5 # DWARF version number 496 .byte 1 # DWARF Unit Type 497 .byte 8 # Address Size (in bytes) 498 .long .debug_abbrev # Offset Into Abbrev. Section 499 .byte 1 # Abbrev [1] 0xc:0x43 DW_TAG_compile_unit 500 .byte 0 # DW_AT_producer 501 .short 33 # DW_AT_language 502 .byte 3 # DW_AT_name 503 .long .Lstr_offsets_base0 # DW_AT_str_offsets_base 504 .long .Lline_table_start0 # DW_AT_stmt_list 505 .byte 2 # DW_AT_comp_dir 506 .byte 2 # DW_AT_low_pc 507 .long .Lfunc_end1-.Lfunc_begin1 # DW_AT_high_pc 508 .long .Laddr_table_base0 # DW_AT_addr_base 509 .byte 10 # Abbrev [10] 0x23:0x12 DW_TAG_subprogram 510 .byte 4 # DW_AT_linkage_name 511 .byte 5 # DW_AT_name 512 .byte 2 # DW_AT_decl_file 513 .byte 1 # DW_AT_decl_line 514 .long 53 # DW_AT_type 515 # DW_AT_external 516 # DW_AT_inline 517 .byte 11 # Abbrev [11] 0x2c:0x8 DW_TAG_formal_parameter 518 .byte 7 # DW_AT_name 519 .byte 2 # DW_AT_decl_file 520 .byte 1 # DW_AT_decl_line 521 .long 53 # DW_AT_type 522 .byte 0 # End Of Children Mark 523 .byte 9 # Abbrev [9] 0x35:0x4 DW_TAG_base_type 524 .byte 6 # DW_AT_name 525 .byte 5 # DW_AT_encoding 526 .byte 4 # DW_AT_byte_size 527 .byte 12 # Abbrev [12] 0x39:0x15 DW_TAG_subprogram 528 .byte 2 # DW_AT_low_pc 529 .long .Lfunc_end1-.Lfunc_begin1 # DW_AT_high_pc 530 .byte 1 # DW_AT_frame_base 531 .byte 86 532 .long 35 # DW_AT_abstract_origin 533 .byte 13 # Abbrev [13] 0x45:0x8 DW_TAG_formal_parameter 534 .byte 2 # DW_AT_location 535 .byte 145 536 .byte 124 537 .long 44 # DW_AT_abstract_origin 538 .byte 0 # End Of Children Mark 539 .byte 0 # End Of Children Mark 540.Ldebug_info_end1: 541 .section .debug_str_offsets,"",@progbits 542 .long 52 # Length of String Offsets Set 543 .short 5 544 .short 0 545.Lstr_offsets_base0: 546 .section .debug_str,"MS",@progbits,1 547.Linfo_string0: 548 .asciz "clang version 19.0.0git" # string offset=0 549.Linfo_string1: 550 .asciz "main.cpp" # string offset=24 551.Linfo_string2: 552 .asciz "/home/ayermolo/local/tasks/T182867349" # string offset=33 553.Linfo_string3: 554 .asciz "helper.cpp" # string offset=71 555.Linfo_string4: 556 .asciz "_Z3fooi" # string offset=82 557.Linfo_string5: 558 .asciz "foo" # string offset=90 559.Linfo_string6: 560 .asciz "int" # string offset=94 561.Linfo_string7: 562 .asciz "i" # string offset=98 563.Linfo_string8: 564 .asciz "main" # string offset=100 565.Linfo_string9: 566 .asciz "argc" # string offset=105 567.Linfo_string10: 568 .asciz "argv" # string offset=110 569.Linfo_string11: 570 .asciz "char" # string offset=115 571 .section .debug_str_offsets,"",@progbits 572 .long .Linfo_string0 573 .long .Linfo_string1 574 .long .Linfo_string2 575 .long .Linfo_string3 576 .long .Linfo_string4 577 .long .Linfo_string5 578 .long .Linfo_string6 579 .long .Linfo_string7 580 .long .Linfo_string8 581 .long .Linfo_string9 582 .long .Linfo_string10 583 .long .Linfo_string11 584 .section .debug_addr,"",@progbits 585 .long .Ldebug_addr_end0-.Ldebug_addr_start0 # Length of contribution 586.Ldebug_addr_start0: 587 .short 5 # DWARF version number 588 .byte 8 # Address size 589 .byte 0 # Segment selector size 590.Laddr_table_base0: 591 .quad .Lfunc_begin0 592 .quad .Ltmp1 593 .quad .Lfunc_begin1 594.Ldebug_addr_end0: 595 .section .debug_names,"",@progbits 596 .long .Lnames_end0-.Lnames_start0 # Header: unit length 597.Lnames_start0: 598 .short 5 # Header: version 599 .short 0 # Header: padding 600 .long 2 # Header: compilation unit count 601 .long 0 # Header: local type unit count 602 .long 0 # Header: foreign type unit count 603 .long 5 # Header: bucket count 604 .long 5 # Header: name count 605 .long .Lnames_abbrev_end0-.Lnames_abbrev_start0 # Header: abbreviation table size 606 .long 8 # Header: augmentation string size 607 .ascii "LLVM0700" # Header: augmentation string 608 .long .Lcu_begin0 # Compilation unit 0 609 .long .Lcu_begin1 # Compilation unit 1 610 .long 0 # Bucket 0 611 .long 1 # Bucket 1 612 .long 0 # Bucket 2 613 .long 3 # Bucket 3 614 .long 4 # Bucket 4 615 .long 2090499946 # Hash in Bucket 1 616 .long -1257882370 # Hash in Bucket 1 617 .long 193495088 # Hash in Bucket 3 618 .long 193491849 # Hash in Bucket 4 619 .long 2090147939 # Hash in Bucket 4 620 .long .Linfo_string8 # String in Bucket 1: main 621 .long .Linfo_string4 # String in Bucket 1: _Z3fooi 622 .long .Linfo_string6 # String in Bucket 3: int 623 .long .Linfo_string5 # String in Bucket 4: foo 624 .long .Linfo_string11 # String in Bucket 4: char 625 .long .Lnames1-.Lnames_entries0 # Offset in Bucket 1 626 .long .Lnames3-.Lnames_entries0 # Offset in Bucket 1 627 .long .Lnames0-.Lnames_entries0 # Offset in Bucket 3 628 .long .Lnames2-.Lnames_entries0 # Offset in Bucket 4 629 .long .Lnames4-.Lnames_entries0 # Offset in Bucket 4 630.Lnames_abbrev_start0: 631 .byte 1 # Abbrev code 632 .byte 46 # DW_TAG_subprogram 633 .byte 1 # DW_IDX_compile_unit 634 .byte 11 # DW_FORM_data1 635 .byte 3 # DW_IDX_die_offset 636 .byte 19 # DW_FORM_ref4 637 .byte 4 # DW_IDX_parent 638 .byte 25 # DW_FORM_flag_present 639 .byte 0 # End of abbrev 640 .byte 0 # End of abbrev 641 .byte 2 # Abbrev code 642 .byte 29 # DW_TAG_inlined_subroutine 643 .byte 1 # DW_IDX_compile_unit 644 .byte 11 # DW_FORM_data1 645 .byte 3 # DW_IDX_die_offset 646 .byte 19 # DW_FORM_ref4 647 .byte 4 # DW_IDX_parent 648 .byte 19 # DW_FORM_ref4 649 .byte 0 # End of abbrev 650 .byte 0 # End of abbrev 651 .byte 3 # Abbrev code 652 .byte 36 # DW_TAG_base_type 653 .byte 1 # DW_IDX_compile_unit 654 .byte 11 # DW_FORM_data1 655 .byte 3 # DW_IDX_die_offset 656 .byte 19 # DW_FORM_ref4 657 .byte 4 # DW_IDX_parent 658 .byte 25 # DW_FORM_flag_present 659 .byte 0 # End of abbrev 660 .byte 0 # End of abbrev 661 .byte 0 # End of abbrev list 662.Lnames_abbrev_end0: 663.Lnames_entries0: 664.Lnames1: 665.L3: 666 .byte 1 # Abbreviation code 667 .byte 0 # DW_IDX_compile_unit 668 .long 35 # DW_IDX_die_offset 669 .byte 0 # DW_IDX_parent 670 # End of list: main 671.Lnames3: 672.L0: 673 .byte 1 # Abbreviation code 674 .byte 1 # DW_IDX_compile_unit 675 .long 57 # DW_IDX_die_offset 676.L2: # DW_IDX_parent 677 .byte 2 # Abbreviation code 678 .byte 0 # DW_IDX_compile_unit 679 .long 83 # DW_IDX_die_offset 680 .long .L3-.Lnames_entries0 # DW_IDX_parent 681 .byte 0 # End of list: _Z3fooi 682.Lnames0: 683.L4: 684 .byte 3 # Abbreviation code 685 .byte 1 # DW_IDX_compile_unit 686 .long 53 # DW_IDX_die_offset 687 .byte 0 # DW_IDX_parent 688 # End of list: int 689.Lnames2: 690 .byte 1 # Abbreviation code 691 .byte 1 # DW_IDX_compile_unit 692 .long 57 # DW_IDX_die_offset 693 .byte 2 # DW_IDX_parent 694 # Abbreviation code 695 .byte 0 # DW_IDX_compile_unit 696 .long 83 # DW_IDX_die_offset 697 .long .L3-.Lnames_entries0 # DW_IDX_parent 698 .byte 0 # End of list: foo 699.Lnames4: 700.L1: 701 .byte 3 # Abbreviation code 702 .byte 0 # DW_IDX_compile_unit 703 .long 116 # DW_IDX_die_offset 704 .byte 0 # DW_IDX_parent 705 # End of list: char 706 .p2align 2, 0x0 707.Lnames_end0: 708 .ident "clang version 19.0.0git" 709 .ident "clang version 19.0.0git" 710 .section ".note.GNU-stack","",@progbits 711 .section .debug_line,"",@progbits 712.Lline_table_start0: 713