1*ce17c6d3SAlexander Yermolovich# clang++ helper.cpp -g2 -gsplit-dwarf -S -fdebug-compilation-dir=. 2*ce17c6d3SAlexander Yermolovich# Modified assembly so that DW_AT_dwo_name has a partial path. 3*ce17c6d3SAlexander Yermolovich# int foo() { return 0; } 4*ce17c6d3SAlexander Yermolovich .text 5*ce17c6d3SAlexander Yermolovich .file "helper.cpp" 6*ce17c6d3SAlexander Yermolovich .globl _Z3foov # -- Begin function _Z3foov 7*ce17c6d3SAlexander Yermolovich .p2align 4, 0x90 8*ce17c6d3SAlexander Yermolovich .type _Z3foov,@function 9*ce17c6d3SAlexander Yermolovich_Z3foov: # @_Z3foov 10*ce17c6d3SAlexander Yermolovich.Lfunc_begin0: 11*ce17c6d3SAlexander Yermolovich .file 0 "." "helper.cpp" md5 0xde8d315e6d1f74ad53575cef6507e770 12*ce17c6d3SAlexander Yermolovich .loc 0 1 0 # helper.cpp:1:0 13*ce17c6d3SAlexander Yermolovich .cfi_startproc 14*ce17c6d3SAlexander Yermolovich# %bb.0: # %entry 15*ce17c6d3SAlexander Yermolovich pushq %rbp 16*ce17c6d3SAlexander Yermolovich .cfi_def_cfa_offset 16 17*ce17c6d3SAlexander Yermolovich .cfi_offset %rbp, -16 18*ce17c6d3SAlexander Yermolovich movq %rsp, %rbp 19*ce17c6d3SAlexander Yermolovich .cfi_def_cfa_register %rbp 20*ce17c6d3SAlexander Yermolovich.Ltmp0: 21*ce17c6d3SAlexander Yermolovich .loc 0 1 13 prologue_end # helper.cpp:1:13 22*ce17c6d3SAlexander Yermolovich xorl %eax, %eax 23*ce17c6d3SAlexander Yermolovich .loc 0 1 13 epilogue_begin is_stmt 0 # helper.cpp:1:13 24*ce17c6d3SAlexander Yermolovich popq %rbp 25*ce17c6d3SAlexander Yermolovich .cfi_def_cfa %rsp, 8 26*ce17c6d3SAlexander Yermolovich retq 27*ce17c6d3SAlexander Yermolovich.Ltmp1: 28*ce17c6d3SAlexander Yermolovich.Lfunc_end0: 29*ce17c6d3SAlexander Yermolovich .size _Z3foov, .Lfunc_end0-_Z3foov 30*ce17c6d3SAlexander Yermolovich .cfi_endproc 31*ce17c6d3SAlexander Yermolovich # -- End function 32*ce17c6d3SAlexander Yermolovich .section .debug_abbrev,"",@progbits 33*ce17c6d3SAlexander Yermolovich .byte 1 # Abbreviation Code 34*ce17c6d3SAlexander Yermolovich .byte 74 # DW_TAG_skeleton_unit 35*ce17c6d3SAlexander Yermolovich .byte 0 # DW_CHILDREN_no 36*ce17c6d3SAlexander Yermolovich .byte 16 # DW_AT_stmt_list 37*ce17c6d3SAlexander Yermolovich .byte 23 # DW_FORM_sec_offset 38*ce17c6d3SAlexander Yermolovich .byte 114 # DW_AT_str_offsets_base 39*ce17c6d3SAlexander Yermolovich .byte 23 # DW_FORM_sec_offset 40*ce17c6d3SAlexander Yermolovich .byte 27 # DW_AT_comp_dir 41*ce17c6d3SAlexander Yermolovich .byte 37 # DW_FORM_strx1 42*ce17c6d3SAlexander Yermolovich .ascii "\264B" # DW_AT_GNU_pubnames 43*ce17c6d3SAlexander Yermolovich .byte 25 # DW_FORM_flag_present 44*ce17c6d3SAlexander Yermolovich .byte 118 # DW_AT_dwo_name 45*ce17c6d3SAlexander Yermolovich .byte 37 # DW_FORM_strx1 46*ce17c6d3SAlexander Yermolovich .byte 17 # DW_AT_low_pc 47*ce17c6d3SAlexander Yermolovich .byte 27 # DW_FORM_addrx 48*ce17c6d3SAlexander Yermolovich .byte 18 # DW_AT_high_pc 49*ce17c6d3SAlexander Yermolovich .byte 6 # DW_FORM_data4 50*ce17c6d3SAlexander Yermolovich .byte 115 # DW_AT_addr_base 51*ce17c6d3SAlexander Yermolovich .byte 23 # DW_FORM_sec_offset 52*ce17c6d3SAlexander Yermolovich .byte 0 # EOM(1) 53*ce17c6d3SAlexander Yermolovich .byte 0 # EOM(2) 54*ce17c6d3SAlexander Yermolovich .byte 0 # EOM(3) 55*ce17c6d3SAlexander Yermolovich .section .debug_info,"",@progbits 56*ce17c6d3SAlexander Yermolovich.Lcu_begin0: 57*ce17c6d3SAlexander Yermolovich .long .Ldebug_info_end0-.Ldebug_info_start0 # Length of Unit 58*ce17c6d3SAlexander Yermolovich.Ldebug_info_start0: 59*ce17c6d3SAlexander Yermolovich .short 5 # DWARF version number 60*ce17c6d3SAlexander Yermolovich .byte 4 # DWARF Unit Type 61*ce17c6d3SAlexander Yermolovich .byte 8 # Address Size (in bytes) 62*ce17c6d3SAlexander Yermolovich .long .debug_abbrev # Offset Into Abbrev. Section 63*ce17c6d3SAlexander Yermolovich .quad -1360665163647638292 64*ce17c6d3SAlexander Yermolovich .byte 1 # Abbrev [1] 0x14:0x14 DW_TAG_skeleton_unit 65*ce17c6d3SAlexander Yermolovich .long .Lline_table_start0 # DW_AT_stmt_list 66*ce17c6d3SAlexander Yermolovich .long .Lstr_offsets_base0 # DW_AT_str_offsets_base 67*ce17c6d3SAlexander Yermolovich .byte 0 # DW_AT_comp_dir 68*ce17c6d3SAlexander Yermolovich # DW_AT_GNU_pubnames 69*ce17c6d3SAlexander Yermolovich .byte 1 # DW_AT_dwo_name 70*ce17c6d3SAlexander Yermolovich .byte 0 # DW_AT_low_pc 71*ce17c6d3SAlexander Yermolovich .long .Lfunc_end0-.Lfunc_begin0 # DW_AT_high_pc 72*ce17c6d3SAlexander Yermolovich .long .Laddr_table_base0 # DW_AT_addr_base 73*ce17c6d3SAlexander Yermolovich.Ldebug_info_end0: 74*ce17c6d3SAlexander Yermolovich .section .debug_str_offsets,"",@progbits 75*ce17c6d3SAlexander Yermolovich .long 12 # Length of String Offsets Set 76*ce17c6d3SAlexander Yermolovich .short 5 77*ce17c6d3SAlexander Yermolovich .short 0 78*ce17c6d3SAlexander Yermolovich.Lstr_offsets_base0: 79*ce17c6d3SAlexander Yermolovich .section .debug_str,"MS",@progbits,1 80*ce17c6d3SAlexander Yermolovich.Lskel_string0: 81*ce17c6d3SAlexander Yermolovich .asciz "." # string offset=0 82*ce17c6d3SAlexander Yermolovich.Lskel_string1: 83*ce17c6d3SAlexander Yermolovich .asciz "objects/o2/split.dwo" # string offset=2 <-- Manually modified. 84*ce17c6d3SAlexander Yermolovich .section .debug_str_offsets,"",@progbits 85*ce17c6d3SAlexander Yermolovich .long .Lskel_string0 86*ce17c6d3SAlexander Yermolovich .long .Lskel_string1 87*ce17c6d3SAlexander Yermolovich .section .debug_str_offsets.dwo,"e",@progbits 88*ce17c6d3SAlexander Yermolovich .long 28 # Length of String Offsets Set 89*ce17c6d3SAlexander Yermolovich .short 5 90*ce17c6d3SAlexander Yermolovich .short 0 91*ce17c6d3SAlexander Yermolovich .section .debug_str.dwo,"eMS",@progbits,1 92*ce17c6d3SAlexander Yermolovich.Linfo_string0: 93*ce17c6d3SAlexander Yermolovich .asciz "_Z3foov" # string offset=0 94*ce17c6d3SAlexander Yermolovich.Linfo_string1: 95*ce17c6d3SAlexander Yermolovich .asciz "foo" # string offset=8 96*ce17c6d3SAlexander Yermolovich.Linfo_string2: 97*ce17c6d3SAlexander Yermolovich .asciz "int" # string offset=12 98*ce17c6d3SAlexander Yermolovich.Linfo_string3: 99*ce17c6d3SAlexander Yermolovich .asciz "clang version 18.0.0" # string offset=16 100*ce17c6d3SAlexander Yermolovich.Linfo_string4: 101*ce17c6d3SAlexander Yermolovich .asciz "helper.cpp" # string offset=37 102*ce17c6d3SAlexander Yermolovich.Linfo_string5: 103*ce17c6d3SAlexander Yermolovich .asciz "objects/o2/split.dwo" # string offset=48 <-- Manually modified. 104*ce17c6d3SAlexander Yermolovich .section .debug_str_offsets.dwo,"e",@progbits 105*ce17c6d3SAlexander Yermolovich .long 0 106*ce17c6d3SAlexander Yermolovich .long 8 107*ce17c6d3SAlexander Yermolovich .long 12 108*ce17c6d3SAlexander Yermolovich .long 16 109*ce17c6d3SAlexander Yermolovich .long 37 110*ce17c6d3SAlexander Yermolovich .long 48 111*ce17c6d3SAlexander Yermolovich .section .debug_info.dwo,"e",@progbits 112*ce17c6d3SAlexander Yermolovich .long .Ldebug_info_dwo_end0-.Ldebug_info_dwo_start0 # Length of Unit 113*ce17c6d3SAlexander Yermolovich.Ldebug_info_dwo_start0: 114*ce17c6d3SAlexander Yermolovich .short 5 # DWARF version number 115*ce17c6d3SAlexander Yermolovich .byte 5 # DWARF Unit Type 116*ce17c6d3SAlexander Yermolovich .byte 8 # Address Size (in bytes) 117*ce17c6d3SAlexander Yermolovich .long 0 # Offset Into Abbrev. Section 118*ce17c6d3SAlexander Yermolovich .quad -1360665163647638292 119*ce17c6d3SAlexander Yermolovich .byte 1 # Abbrev [1] 0x14:0x1b DW_TAG_compile_unit 120*ce17c6d3SAlexander Yermolovich .byte 3 # DW_AT_producer 121*ce17c6d3SAlexander Yermolovich .short 33 # DW_AT_language 122*ce17c6d3SAlexander Yermolovich .byte 4 # DW_AT_name 123*ce17c6d3SAlexander Yermolovich .byte 5 # DW_AT_dwo_name 124*ce17c6d3SAlexander Yermolovich .byte 2 # Abbrev [2] 0x1a:0x10 DW_TAG_subprogram 125*ce17c6d3SAlexander Yermolovich .byte 0 # DW_AT_low_pc 126*ce17c6d3SAlexander Yermolovich .long .Lfunc_end0-.Lfunc_begin0 # DW_AT_high_pc 127*ce17c6d3SAlexander Yermolovich .byte 1 # DW_AT_frame_base 128*ce17c6d3SAlexander Yermolovich .byte 86 129*ce17c6d3SAlexander Yermolovich .byte 0 # DW_AT_linkage_name 130*ce17c6d3SAlexander Yermolovich .byte 1 # DW_AT_name 131*ce17c6d3SAlexander Yermolovich .byte 0 # DW_AT_decl_file 132*ce17c6d3SAlexander Yermolovich .byte 1 # DW_AT_decl_line 133*ce17c6d3SAlexander Yermolovich .long 42 # DW_AT_type 134*ce17c6d3SAlexander Yermolovich # DW_AT_external 135*ce17c6d3SAlexander Yermolovich .byte 3 # Abbrev [3] 0x2a:0x4 DW_TAG_base_type 136*ce17c6d3SAlexander Yermolovich .byte 2 # DW_AT_name 137*ce17c6d3SAlexander Yermolovich .byte 5 # DW_AT_encoding 138*ce17c6d3SAlexander Yermolovich .byte 4 # DW_AT_byte_size 139*ce17c6d3SAlexander Yermolovich .byte 0 # End Of Children Mark 140*ce17c6d3SAlexander Yermolovich.Ldebug_info_dwo_end0: 141*ce17c6d3SAlexander Yermolovich .section .debug_abbrev.dwo,"e",@progbits 142*ce17c6d3SAlexander Yermolovich .byte 1 # Abbreviation Code 143*ce17c6d3SAlexander Yermolovich .byte 17 # DW_TAG_compile_unit 144*ce17c6d3SAlexander Yermolovich .byte 1 # DW_CHILDREN_yes 145*ce17c6d3SAlexander Yermolovich .byte 37 # DW_AT_producer 146*ce17c6d3SAlexander Yermolovich .byte 37 # DW_FORM_strx1 147*ce17c6d3SAlexander Yermolovich .byte 19 # DW_AT_language 148*ce17c6d3SAlexander Yermolovich .byte 5 # DW_FORM_data2 149*ce17c6d3SAlexander Yermolovich .byte 3 # DW_AT_name 150*ce17c6d3SAlexander Yermolovich .byte 37 # DW_FORM_strx1 151*ce17c6d3SAlexander Yermolovich .byte 118 # DW_AT_dwo_name 152*ce17c6d3SAlexander Yermolovich .byte 37 # DW_FORM_strx1 153*ce17c6d3SAlexander Yermolovich .byte 0 # EOM(1) 154*ce17c6d3SAlexander Yermolovich .byte 0 # EOM(2) 155*ce17c6d3SAlexander Yermolovich .byte 2 # Abbreviation Code 156*ce17c6d3SAlexander Yermolovich .byte 46 # DW_TAG_subprogram 157*ce17c6d3SAlexander Yermolovich .byte 0 # DW_CHILDREN_no 158*ce17c6d3SAlexander Yermolovich .byte 17 # DW_AT_low_pc 159*ce17c6d3SAlexander Yermolovich .byte 27 # DW_FORM_addrx 160*ce17c6d3SAlexander Yermolovich .byte 18 # DW_AT_high_pc 161*ce17c6d3SAlexander Yermolovich .byte 6 # DW_FORM_data4 162*ce17c6d3SAlexander Yermolovich .byte 64 # DW_AT_frame_base 163*ce17c6d3SAlexander Yermolovich .byte 24 # DW_FORM_exprloc 164*ce17c6d3SAlexander Yermolovich .byte 110 # DW_AT_linkage_name 165*ce17c6d3SAlexander Yermolovich .byte 37 # DW_FORM_strx1 166*ce17c6d3SAlexander Yermolovich .byte 3 # DW_AT_name 167*ce17c6d3SAlexander Yermolovich .byte 37 # DW_FORM_strx1 168*ce17c6d3SAlexander Yermolovich .byte 58 # DW_AT_decl_file 169*ce17c6d3SAlexander Yermolovich .byte 11 # DW_FORM_data1 170*ce17c6d3SAlexander Yermolovich .byte 59 # DW_AT_decl_line 171*ce17c6d3SAlexander Yermolovich .byte 11 # DW_FORM_data1 172*ce17c6d3SAlexander Yermolovich .byte 73 # DW_AT_type 173*ce17c6d3SAlexander Yermolovich .byte 19 # DW_FORM_ref4 174*ce17c6d3SAlexander Yermolovich .byte 63 # DW_AT_external 175*ce17c6d3SAlexander Yermolovich .byte 25 # DW_FORM_flag_present 176*ce17c6d3SAlexander Yermolovich .byte 0 # EOM(1) 177*ce17c6d3SAlexander Yermolovich .byte 0 # EOM(2) 178*ce17c6d3SAlexander Yermolovich .byte 3 # Abbreviation Code 179*ce17c6d3SAlexander Yermolovich .byte 36 # DW_TAG_base_type 180*ce17c6d3SAlexander Yermolovich .byte 0 # DW_CHILDREN_no 181*ce17c6d3SAlexander Yermolovich .byte 3 # DW_AT_name 182*ce17c6d3SAlexander Yermolovich .byte 37 # DW_FORM_strx1 183*ce17c6d3SAlexander Yermolovich .byte 62 # DW_AT_encoding 184*ce17c6d3SAlexander Yermolovich .byte 11 # DW_FORM_data1 185*ce17c6d3SAlexander Yermolovich .byte 11 # DW_AT_byte_size 186*ce17c6d3SAlexander Yermolovich .byte 11 # DW_FORM_data1 187*ce17c6d3SAlexander Yermolovich .byte 0 # EOM(1) 188*ce17c6d3SAlexander Yermolovich .byte 0 # EOM(2) 189*ce17c6d3SAlexander Yermolovich .byte 0 # EOM(3) 190*ce17c6d3SAlexander Yermolovich .section .debug_addr,"",@progbits 191*ce17c6d3SAlexander Yermolovich .long .Ldebug_addr_end0-.Ldebug_addr_start0 # Length of contribution 192*ce17c6d3SAlexander Yermolovich.Ldebug_addr_start0: 193*ce17c6d3SAlexander Yermolovich .short 5 # DWARF version number 194*ce17c6d3SAlexander Yermolovich .byte 8 # Address size 195*ce17c6d3SAlexander Yermolovich .byte 0 # Segment selector size 196*ce17c6d3SAlexander Yermolovich.Laddr_table_base0: 197*ce17c6d3SAlexander Yermolovich .quad .Lfunc_begin0 198*ce17c6d3SAlexander Yermolovich.Ldebug_addr_end0: 199*ce17c6d3SAlexander Yermolovich .section .debug_gnu_pubnames,"",@progbits 200*ce17c6d3SAlexander Yermolovich .long .LpubNames_end0-.LpubNames_start0 # Length of Public Names Info 201*ce17c6d3SAlexander Yermolovich.LpubNames_start0: 202*ce17c6d3SAlexander Yermolovich .short 2 # DWARF Version 203*ce17c6d3SAlexander Yermolovich .long .Lcu_begin0 # Offset of Compilation Unit Info 204*ce17c6d3SAlexander Yermolovich .long 40 # Compilation Unit Length 205*ce17c6d3SAlexander Yermolovich .long 26 # DIE offset 206*ce17c6d3SAlexander Yermolovich .byte 48 # Attributes: FUNCTION, EXTERNAL 207*ce17c6d3SAlexander Yermolovich .asciz "foo" # External Name 208*ce17c6d3SAlexander Yermolovich .long 0 # End Mark 209*ce17c6d3SAlexander Yermolovich.LpubNames_end0: 210*ce17c6d3SAlexander Yermolovich .section .debug_gnu_pubtypes,"",@progbits 211*ce17c6d3SAlexander Yermolovich .long .LpubTypes_end0-.LpubTypes_start0 # Length of Public Types Info 212*ce17c6d3SAlexander Yermolovich.LpubTypes_start0: 213*ce17c6d3SAlexander Yermolovich .short 2 # DWARF Version 214*ce17c6d3SAlexander Yermolovich .long .Lcu_begin0 # Offset of Compilation Unit Info 215*ce17c6d3SAlexander Yermolovich .long 40 # Compilation Unit Length 216*ce17c6d3SAlexander Yermolovich .long 42 # DIE offset 217*ce17c6d3SAlexander Yermolovich .byte 144 # Attributes: TYPE, STATIC 218*ce17c6d3SAlexander Yermolovich .asciz "int" # External Name 219*ce17c6d3SAlexander Yermolovich .long 0 # End Mark 220*ce17c6d3SAlexander Yermolovich.LpubTypes_end0: 221*ce17c6d3SAlexander Yermolovich .ident "clang version 18.0.0" 222*ce17c6d3SAlexander Yermolovich .section ".note.GNU-stack","",@progbits 223*ce17c6d3SAlexander Yermolovich .addrsig 224*ce17c6d3SAlexander Yermolovich .section .debug_line,"",@progbits 225*ce17c6d3SAlexander Yermolovich.Lline_table_start0: 226