1# clang++ -O2 -g -gdwarf-4 -gsplit-dwarf 2# void use(int * x, int * y) { 3# *x += 4; 4# *y -= 2; 5# } 6# 7# int helper(int z_, int d_); 8# int x = 0; 9# int y = 1; 10# int main(int argc, char *argv[]) { 11# x = argc; 12# y = argc + 3; 13# //use(&x, &y); 14# return helper(x, y); 15# } 16 17 .text 18 .file "main.cpp" 19 .file 1 "." "main.cpp" 20 .globl _Z3usePiS_ # -- Begin function _Z3usePiS_ 21 .p2align 4, 0x90 22 .type _Z3usePiS_,@function 23_Z3usePiS_: # @_Z3usePiS_ 24.Lfunc_begin0: 25 .cfi_startproc 26# %bb.0: # %entry 27 #DEBUG_VALUE: use:x <- $rdi 28 #DEBUG_VALUE: use:y <- $rsi 29 .loc 1 2 5 prologue_end # main.cpp:2:5 30 addl $4, (%rdi) 31 .loc 1 3 5 # main.cpp:3:5 32 addl $-2, (%rsi) 33 .loc 1 4 1 # main.cpp:4:1 34 retq 35.Ltmp0: 36.Lfunc_end0: 37 .size _Z3usePiS_, .Lfunc_end0-_Z3usePiS_ 38 .cfi_endproc 39 # -- End function 40 .globl main # -- Begin function main 41 .p2align 4, 0x90 42 .type main,@function 43main: # @main 44.Lfunc_begin1: 45 .cfi_startproc 46# %bb.0: # %entry 47 #DEBUG_VALUE: main:argc <- $edi 48 #DEBUG_VALUE: main:argv <- $rsi 49 # kill: def $edi killed $edi def $rdi 50 .loc 1 10 6 prologue_end # main.cpp:10:6 51 movl %edi, x(%rip) 52 .loc 1 11 13 # main.cpp:11:13 53 leal 3(%rdi), %esi 54.Ltmp1: 55 #DEBUG_VALUE: main:argv <- [DW_OP_LLVM_entry_value 1] $rsi 56 .loc 1 11 6 is_stmt 0 # main.cpp:11:6 57 movl %esi, y(%rip) 58 # kill: def $edi killed $edi killed $rdi 59.Ltmp2: 60 .loc 1 13 11 is_stmt 1 # main.cpp:13:11 61 jmp _Z6helperii@PLT # TAILCALL 62.Ltmp3: 63.Lfunc_end1: 64 .size main, .Lfunc_end1-main 65 .cfi_endproc 66 # -- End function 67 .type x,@object # @x 68 .bss 69 .globl x 70 .p2align 2, 0x0 71x: 72 .long 0 # 0x0 73 .size x, 4 74 75 .type y,@object # @y 76 .data 77 .globl y 78 .p2align 2, 0x0 79y: 80 .long 1 # 0x1 81 .size y, 4 82 83 .section .debug_loc.dwo,"e",@progbits 84.Ldebug_loc0: 85 .byte 3 86 .byte 3 87 .long .Ltmp1-.Lfunc_begin1 88 .short 1 # Loc expr size 89 .byte 84 # DW_OP_reg4 90 .byte 3 91 .byte 5 92 .long .Lfunc_end1-.Ltmp1 93 .short 4 # Loc expr size 94 .byte 243 # DW_OP_GNU_entry_value 95 .byte 1 # 1 96 .byte 84 # DW_OP_reg4 97 .byte 159 # DW_OP_stack_value 98 .byte 0 99 .section .debug_abbrev,"",@progbits 100 .byte 1 # Abbreviation Code 101 .byte 17 # DW_TAG_compile_unit 102 .byte 0 # DW_CHILDREN_no 103 .byte 16 # DW_AT_stmt_list 104 .byte 23 # DW_FORM_sec_offset 105 .byte 27 # DW_AT_comp_dir 106 .byte 14 # DW_FORM_strp 107 .ascii "\264B" # DW_AT_GNU_pubnames 108 .byte 25 # DW_FORM_flag_present 109 .ascii "\260B" # DW_AT_GNU_dwo_name 110 .byte 14 # DW_FORM_strp 111 .ascii "\261B" # DW_AT_GNU_dwo_id 112 .byte 7 # DW_FORM_data8 113 .byte 17 # DW_AT_low_pc 114 .byte 1 # DW_FORM_addr 115 .byte 18 # DW_AT_high_pc 116 .byte 6 # DW_FORM_data4 117 .ascii "\263B" # DW_AT_GNU_addr_base 118 .byte 23 # DW_FORM_sec_offset 119 .byte 0 # EOM(1) 120 .byte 0 # EOM(2) 121 .byte 0 # EOM(3) 122 .section .debug_info,"",@progbits 123.Lcu_begin0: 124 .long .Ldebug_info_end0-.Ldebug_info_start0 # Length of Unit 125.Ldebug_info_start0: 126 .short 4 # DWARF version number 127 .long .debug_abbrev # Offset Into Abbrev. Section 128 .byte 8 # Address Size (in bytes) 129 .byte 1 # Abbrev [1] 0xb:0x25 DW_TAG_compile_unit 130 .long .Lline_table_start0 # DW_AT_stmt_list 131 .long .Lskel_string0 # DW_AT_comp_dir 132 # DW_AT_GNU_pubnames 133 .long .Lskel_string1 # DW_AT_GNU_dwo_name 134 .quad -3308548803209949056 # DW_AT_GNU_dwo_id 135 .quad .Lfunc_begin0 # DW_AT_low_pc 136 .long .Lfunc_end1-.Lfunc_begin0 # DW_AT_high_pc 137 .long .Laddr_table_base0 # DW_AT_GNU_addr_base 138.Ldebug_info_end0: 139 .section .debug_str,"MS",@progbits,1 140.Lskel_string0: 141 .asciz "." # string offset=0 142.Lskel_string1: 143 .asciz "main.dwo" # string offset=47 144 .section .debug_str.dwo,"eMS",@progbits,1 145.Linfo_string0: 146 .asciz "x" # string offset=0 147.Linfo_string1: 148 .asciz "int" # string offset=2 149.Linfo_string2: 150 .asciz "y" # string offset=6 151.Linfo_string3: 152 .asciz "_Z6helperii" # string offset=8 153.Linfo_string4: 154 .asciz "helper" # string offset=20 155.Linfo_string5: 156 .asciz "_Z3usePiS_" # string offset=27 157.Linfo_string6: 158 .asciz "use" # string offset=38 159.Linfo_string7: 160 .asciz "main" # string offset=42 161.Linfo_string8: 162 .asciz "argc" # string offset=47 163.Linfo_string9: 164 .asciz "argv" # string offset=52 165.Linfo_string10: 166 .asciz "char" # string offset=57 167.Linfo_string11: 168 .asciz "clang version 18.0.0 (git@github.com:llvm/llvm-project.git 3a8db0f4bfb57348f49d9603119fa157114bbf8e)" # string offset=62 169.Linfo_string12: 170 .asciz "main.cpp" # string offset=163 171.Linfo_string13: 172 .asciz "main.dwo" # string offset=172 173 .section .debug_str_offsets.dwo,"e",@progbits 174 .long 0 175 .long 2 176 .long 6 177 .long 8 178 .long 20 179 .long 27 180 .long 38 181 .long 42 182 .long 47 183 .long 52 184 .long 57 185 .long 62 186 .long 163 187 .long 172 188 .section .debug_info.dwo,"e",@progbits 189 .long .Ldebug_info_dwo_end0-.Ldebug_info_dwo_start0 # Length of Unit 190.Ldebug_info_dwo_start0: 191 .short 4 # DWARF version number 192 .long 0 # Offset Into Abbrev. Section 193 .byte 8 # Address Size (in bytes) 194 .byte 1 # Abbrev [1] 0xb:0x9d DW_TAG_compile_unit 195 .byte 11 # DW_AT_producer 196 .short 33 # DW_AT_language 197 .byte 12 # DW_AT_name 198 .byte 13 # DW_AT_GNU_dwo_name 199 .quad -3308548803209949056 # DW_AT_GNU_dwo_id 200 .byte 2 # Abbrev [2] 0x19:0xb DW_TAG_variable 201 .byte 0 # DW_AT_name 202 .long 36 # DW_AT_type 203 # DW_AT_external 204 .byte 1 # DW_AT_decl_file 205 .byte 7 # DW_AT_decl_line 206 .byte 2 # DW_AT_location 207 .byte 251 208 .byte 0 209 .byte 3 # Abbrev [3] 0x24:0x4 DW_TAG_base_type 210 .byte 1 # DW_AT_name 211 .byte 5 # DW_AT_encoding 212 .byte 4 # DW_AT_byte_size 213 .byte 2 # Abbrev [2] 0x28:0xb DW_TAG_variable 214 .byte 2 # DW_AT_name 215 .long 36 # DW_AT_type 216 # DW_AT_external 217 .byte 1 # DW_AT_decl_file 218 .byte 8 # DW_AT_decl_line 219 .byte 2 # DW_AT_location 220 .byte 251 221 .byte 1 222 .byte 4 # Abbrev [4] 0x33:0x21 DW_TAG_subprogram 223 .byte 2 # DW_AT_low_pc 224 .long .Lfunc_end0-.Lfunc_begin0 # DW_AT_high_pc 225 .byte 1 # DW_AT_frame_base 226 .byte 87 227 # DW_AT_GNU_all_call_sites 228 .byte 5 # DW_AT_linkage_name 229 .byte 6 # DW_AT_name 230 .byte 1 # DW_AT_decl_file 231 .byte 1 # DW_AT_decl_line 232 # DW_AT_external 233 .byte 5 # Abbrev [5] 0x3f:0xa DW_TAG_formal_parameter 234 .byte 1 # DW_AT_location 235 .byte 85 236 .byte 0 # DW_AT_name 237 .byte 1 # DW_AT_decl_file 238 .byte 1 # DW_AT_decl_line 239 .long 148 # DW_AT_type 240 .byte 5 # Abbrev [5] 0x49:0xa DW_TAG_formal_parameter 241 .byte 1 # DW_AT_location 242 .byte 84 243 .byte 2 # DW_AT_name 244 .byte 1 # DW_AT_decl_file 245 .byte 1 # DW_AT_decl_line 246 .long 148 # DW_AT_type 247 .byte 0 # End Of Children Mark 248 .byte 6 # Abbrev [6] 0x54:0x2c DW_TAG_subprogram 249 .byte 3 # DW_AT_low_pc 250 .long .Lfunc_end1-.Lfunc_begin1 # DW_AT_high_pc 251 .byte 1 # DW_AT_frame_base 252 .byte 87 253 # DW_AT_GNU_all_call_sites 254 .byte 7 # DW_AT_name 255 .byte 1 # DW_AT_decl_file 256 .byte 9 # DW_AT_decl_line 257 .long 36 # DW_AT_type 258 # DW_AT_external 259 .byte 5 # Abbrev [5] 0x63:0xa DW_TAG_formal_parameter 260 .byte 1 # DW_AT_location 261 .byte 85 262 .byte 8 # DW_AT_name 263 .byte 1 # DW_AT_decl_file 264 .byte 9 # DW_AT_decl_line 265 .long 36 # DW_AT_type 266 .byte 7 # Abbrev [7] 0x6d:0xc DW_TAG_formal_parameter 267 .long .Ldebug_loc0-.debug_loc.dwo # DW_AT_location 268 .byte 9 # DW_AT_name 269 .byte 1 # DW_AT_decl_file 270 .byte 9 # DW_AT_decl_line 271 .long 153 # DW_AT_type 272 .byte 8 # Abbrev [8] 0x79:0x6 DW_TAG_GNU_call_site 273 .long 128 # DW_AT_abstract_origin 274 # DW_AT_GNU_tail_call 275 .byte 4 # DW_AT_low_pc 276 .byte 0 # End Of Children Mark 277 .byte 9 # Abbrev [9] 0x80:0x14 DW_TAG_subprogram 278 .byte 3 # DW_AT_linkage_name 279 .byte 4 # DW_AT_name 280 .byte 1 # DW_AT_decl_file 281 .byte 6 # DW_AT_decl_line 282 .long 36 # DW_AT_type 283 # DW_AT_declaration 284 # DW_AT_external 285 .byte 10 # Abbrev [10] 0x89:0x5 DW_TAG_formal_parameter 286 .long 36 # DW_AT_type 287 .byte 10 # Abbrev [10] 0x8e:0x5 DW_TAG_formal_parameter 288 .long 36 # DW_AT_type 289 .byte 0 # End Of Children Mark 290 .byte 11 # Abbrev [11] 0x94:0x5 DW_TAG_pointer_type 291 .long 36 # DW_AT_type 292 .byte 11 # Abbrev [11] 0x99:0x5 DW_TAG_pointer_type 293 .long 158 # DW_AT_type 294 .byte 11 # Abbrev [11] 0x9e:0x5 DW_TAG_pointer_type 295 .long 163 # DW_AT_type 296 .byte 3 # Abbrev [3] 0xa3:0x4 DW_TAG_base_type 297 .byte 10 # DW_AT_name 298 .byte 6 # DW_AT_encoding 299 .byte 1 # DW_AT_byte_size 300 .byte 0 # End Of Children Mark 301.Ldebug_info_dwo_end0: 302 .section .debug_abbrev.dwo,"e",@progbits 303 .byte 1 # Abbreviation Code 304 .byte 17 # DW_TAG_compile_unit 305 .byte 1 # DW_CHILDREN_yes 306 .byte 37 # DW_AT_producer 307 .ascii "\202>" # DW_FORM_GNU_str_index 308 .byte 19 # DW_AT_language 309 .byte 5 # DW_FORM_data2 310 .byte 3 # DW_AT_name 311 .ascii "\202>" # DW_FORM_GNU_str_index 312 .ascii "\260B" # DW_AT_GNU_dwo_name 313 .ascii "\202>" # DW_FORM_GNU_str_index 314 .ascii "\261B" # DW_AT_GNU_dwo_id 315 .byte 7 # DW_FORM_data8 316 .byte 0 # EOM(1) 317 .byte 0 # EOM(2) 318 .byte 2 # Abbreviation Code 319 .byte 52 # DW_TAG_variable 320 .byte 0 # DW_CHILDREN_no 321 .byte 3 # DW_AT_name 322 .ascii "\202>" # DW_FORM_GNU_str_index 323 .byte 73 # DW_AT_type 324 .byte 19 # DW_FORM_ref4 325 .byte 63 # DW_AT_external 326 .byte 25 # DW_FORM_flag_present 327 .byte 58 # DW_AT_decl_file 328 .byte 11 # DW_FORM_data1 329 .byte 59 # DW_AT_decl_line 330 .byte 11 # DW_FORM_data1 331 .byte 2 # DW_AT_location 332 .byte 24 # DW_FORM_exprloc 333 .byte 0 # EOM(1) 334 .byte 0 # EOM(2) 335 .byte 3 # Abbreviation Code 336 .byte 36 # DW_TAG_base_type 337 .byte 0 # DW_CHILDREN_no 338 .byte 3 # DW_AT_name 339 .ascii "\202>" # DW_FORM_GNU_str_index 340 .byte 62 # DW_AT_encoding 341 .byte 11 # DW_FORM_data1 342 .byte 11 # DW_AT_byte_size 343 .byte 11 # DW_FORM_data1 344 .byte 0 # EOM(1) 345 .byte 0 # EOM(2) 346 .byte 4 # Abbreviation Code 347 .byte 46 # DW_TAG_subprogram 348 .byte 1 # DW_CHILDREN_yes 349 .byte 17 # DW_AT_low_pc 350 .ascii "\201>" # DW_FORM_GNU_addr_index 351 .byte 18 # DW_AT_high_pc 352 .byte 6 # DW_FORM_data4 353 .byte 64 # DW_AT_frame_base 354 .byte 24 # DW_FORM_exprloc 355 .ascii "\227B" # DW_AT_GNU_all_call_sites 356 .byte 25 # DW_FORM_flag_present 357 .byte 110 # DW_AT_linkage_name 358 .ascii "\202>" # DW_FORM_GNU_str_index 359 .byte 3 # DW_AT_name 360 .ascii "\202>" # DW_FORM_GNU_str_index 361 .byte 58 # DW_AT_decl_file 362 .byte 11 # DW_FORM_data1 363 .byte 59 # DW_AT_decl_line 364 .byte 11 # DW_FORM_data1 365 .byte 63 # DW_AT_external 366 .byte 25 # DW_FORM_flag_present 367 .byte 0 # EOM(1) 368 .byte 0 # EOM(2) 369 .byte 5 # Abbreviation Code 370 .byte 5 # DW_TAG_formal_parameter 371 .byte 0 # DW_CHILDREN_no 372 .byte 2 # DW_AT_location 373 .byte 24 # DW_FORM_exprloc 374 .byte 3 # DW_AT_name 375 .ascii "\202>" # DW_FORM_GNU_str_index 376 .byte 58 # DW_AT_decl_file 377 .byte 11 # DW_FORM_data1 378 .byte 59 # DW_AT_decl_line 379 .byte 11 # DW_FORM_data1 380 .byte 73 # DW_AT_type 381 .byte 19 # DW_FORM_ref4 382 .byte 0 # EOM(1) 383 .byte 0 # EOM(2) 384 .byte 6 # Abbreviation Code 385 .byte 46 # DW_TAG_subprogram 386 .byte 1 # DW_CHILDREN_yes 387 .byte 17 # DW_AT_low_pc 388 .ascii "\201>" # DW_FORM_GNU_addr_index 389 .byte 18 # DW_AT_high_pc 390 .byte 6 # DW_FORM_data4 391 .byte 64 # DW_AT_frame_base 392 .byte 24 # DW_FORM_exprloc 393 .ascii "\227B" # DW_AT_GNU_all_call_sites 394 .byte 25 # DW_FORM_flag_present 395 .byte 3 # DW_AT_name 396 .ascii "\202>" # DW_FORM_GNU_str_index 397 .byte 58 # DW_AT_decl_file 398 .byte 11 # DW_FORM_data1 399 .byte 59 # DW_AT_decl_line 400 .byte 11 # DW_FORM_data1 401 .byte 73 # DW_AT_type 402 .byte 19 # DW_FORM_ref4 403 .byte 63 # DW_AT_external 404 .byte 25 # DW_FORM_flag_present 405 .byte 0 # EOM(1) 406 .byte 0 # EOM(2) 407 .byte 7 # Abbreviation Code 408 .byte 5 # DW_TAG_formal_parameter 409 .byte 0 # DW_CHILDREN_no 410 .byte 2 # DW_AT_location 411 .byte 23 # DW_FORM_sec_offset 412 .byte 3 # DW_AT_name 413 .ascii "\202>" # DW_FORM_GNU_str_index 414 .byte 58 # DW_AT_decl_file 415 .byte 11 # DW_FORM_data1 416 .byte 59 # DW_AT_decl_line 417 .byte 11 # DW_FORM_data1 418 .byte 73 # DW_AT_type 419 .byte 19 # DW_FORM_ref4 420 .byte 0 # EOM(1) 421 .byte 0 # EOM(2) 422 .byte 8 # Abbreviation Code 423 .ascii "\211\202\001" # DW_TAG_GNU_call_site 424 .byte 0 # DW_CHILDREN_no 425 .byte 49 # DW_AT_abstract_origin 426 .byte 19 # DW_FORM_ref4 427 .ascii "\225B" # DW_AT_GNU_tail_call 428 .byte 25 # DW_FORM_flag_present 429 .byte 17 # DW_AT_low_pc 430 .ascii "\201>" # DW_FORM_GNU_addr_index 431 .byte 0 # EOM(1) 432 .byte 0 # EOM(2) 433 .byte 9 # Abbreviation Code 434 .byte 46 # DW_TAG_subprogram 435 .byte 1 # DW_CHILDREN_yes 436 .byte 110 # DW_AT_linkage_name 437 .ascii "\202>" # DW_FORM_GNU_str_index 438 .byte 3 # DW_AT_name 439 .ascii "\202>" # DW_FORM_GNU_str_index 440 .byte 58 # DW_AT_decl_file 441 .byte 11 # DW_FORM_data1 442 .byte 59 # DW_AT_decl_line 443 .byte 11 # DW_FORM_data1 444 .byte 73 # DW_AT_type 445 .byte 19 # DW_FORM_ref4 446 .byte 60 # DW_AT_declaration 447 .byte 25 # DW_FORM_flag_present 448 .byte 63 # DW_AT_external 449 .byte 25 # DW_FORM_flag_present 450 .byte 0 # EOM(1) 451 .byte 0 # EOM(2) 452 .byte 10 # Abbreviation Code 453 .byte 5 # DW_TAG_formal_parameter 454 .byte 0 # DW_CHILDREN_no 455 .byte 73 # DW_AT_type 456 .byte 19 # DW_FORM_ref4 457 .byte 0 # EOM(1) 458 .byte 0 # EOM(2) 459 .byte 11 # Abbreviation Code 460 .byte 15 # DW_TAG_pointer_type 461 .byte 0 # DW_CHILDREN_no 462 .byte 73 # DW_AT_type 463 .byte 19 # DW_FORM_ref4 464 .byte 0 # EOM(1) 465 .byte 0 # EOM(2) 466 .byte 0 # EOM(3) 467 .section .debug_addr,"",@progbits 468.Laddr_table_base0: 469 .quad x 470 .quad y 471 .quad .Lfunc_begin0 472 .quad .Lfunc_begin1 473 .quad .Ltmp3 474 .quad .Ltmp1 475 .section .debug_gnu_pubnames,"",@progbits 476 .long .LpubNames_end0-.LpubNames_start0 # Length of Public Names Info 477.LpubNames_start0: 478 .short 2 # DWARF Version 479 .long .Lcu_begin0 # Offset of Compilation Unit Info 480 .long 48 # Compilation Unit Length 481 .long 25 # DIE offset 482 .byte 32 # Attributes: VARIABLE, EXTERNAL 483 .asciz "x" # External Name 484 .long 40 # DIE offset 485 .byte 32 # Attributes: VARIABLE, EXTERNAL 486 .asciz "y" # External Name 487 .long 51 # DIE offset 488 .byte 48 # Attributes: FUNCTION, EXTERNAL 489 .asciz "use" # External Name 490 .long 84 # DIE offset 491 .byte 48 # Attributes: FUNCTION, EXTERNAL 492 .asciz "main" # External Name 493 .long 0 # End Mark 494.LpubNames_end0: 495 .section .debug_gnu_pubtypes,"",@progbits 496 .long .LpubTypes_end0-.LpubTypes_start0 # Length of Public Types Info 497.LpubTypes_start0: 498 .short 2 # DWARF Version 499 .long .Lcu_begin0 # Offset of Compilation Unit Info 500 .long 48 # Compilation Unit Length 501 .long 36 # DIE offset 502 .byte 144 # Attributes: TYPE, STATIC 503 .asciz "int" # External Name 504 .long 163 # DIE offset 505 .byte 144 # Attributes: TYPE, STATIC 506 .asciz "char" # External Name 507 .long 0 # End Mark 508.LpubTypes_end0: 509 .ident "clang version 18.0.0 (git@github.com:llvm/llvm-project.git 3a8db0f4bfb57348f49d9603119fa157114bbf8e)" 510 .section ".note.GNU-stack","",@progbits 511 .addrsig 512 .section .debug_line,"",@progbits 513.Lline_table_start0: 514