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