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