462 lines · plain
1# REQUIRES: system-linux2 3# RUN: llvm-mc -dwarf-version=5 -filetype=obj -triple x86_64-unknown-linux %s -o %tmain.o4# RUN: %clang %cflags -dwarf-5 %tmain.o -o %t.exe -Wl,-q5# RUN: llvm-bolt %t.exe -o %t.bolt --update-debug-sections6# RUN: llvm-dwarfdump --show-form --verbose --debug-info %t.exe | FileCheck --check-prefix=PRECHECK %s7# RUN: llvm-dwarfdump --show-form --verbose --debug-info %t.bolt | FileCheck --check-prefix=POSTCHECK %s8 9## This test checks that we correctly encode new index into .debug_addr section10## from DW_AT_location [DW_FORM_exprloc] (DW_OP_addrx 0x#)11 12# PRECHECK: version = 0x000513# PRECHECK: DW_TAG_variable14# PRECHECK: DW_AT_location [DW_FORM_exprloc] (DW_OP_addrx 0x0)15# PRECHECK: DW_TAG_variable16# PRECHECK: DW_AT_location [DW_FORM_exprloc] (DW_OP_addrx 0x1)17# PRECHECK-EMPTY:18 19# POSTCHECK: version = 0x000520# POSTCHECK: DW_TAG_variable21# POSTCHECK: DW_AT_location [DW_FORM_exprloc] (DW_OP_addrx 0x2)22# POSTCHECK-EMPTY:23# POSTCHECK: DW_TAG_variable24# POSTCHECK: DW_AT_location [DW_FORM_exprloc] (DW_OP_addrx 0x3)25# POSTCHECK-EMPTY:26 27# clang++ main.cpp -g -O228# void use(int * x, int * y) {29# *x += 4;30# *y -= 2;31# }32#33# int x = 0;34# int y = 1;35# int main(int argc, char *argv[]) {36# x = argc;37# y = argc + 3;38# use(&x, &y);39# return x + y;40# }41 42 .text43 .file "main.cpp"44 .file 0 "/testLocExprLoc" "main.cpp" md5 0xd4fd79ce0087c4cefd089752bf2182c645 .globl _Z3usePiS_ # -- Begin function _Z3usePiS_46 .p2align 4, 0x9047 .type _Z3usePiS_,@function48_Z3usePiS_: # @_Z3usePiS_49.Lfunc_begin0:50 .loc 0 1 0 # main.cpp:1:051 .cfi_startproc52# %bb.0: # %entry53 #DEBUG_VALUE: use:x <- $rdi54 #DEBUG_VALUE: use:y <- $rsi55 .loc 0 2 4 prologue_end # main.cpp:2:456 addl $4, (%rdi)57 .loc 0 3 4 # main.cpp:3:458 addl $-2, (%rsi)59 .loc 0 4 1 # main.cpp:4:160 retq61.Ltmp0:62.Lfunc_end0:63 .size _Z3usePiS_, .Lfunc_end0-_Z3usePiS_64 .cfi_endproc65 # -- End function66 .globl main # -- Begin function main67 .p2align 4, 0x9068 .type main,@function69main: # @main70.Lfunc_begin1:71 .loc 0 8 0 # main.cpp:8:072 .cfi_startproc73# %bb.0: # %entry74 #DEBUG_VALUE: main:argc <- $edi75 #DEBUG_VALUE: main:argv <- $rsi76 # kill: def $edi killed $edi def $rdi77 .loc 0 2 4 prologue_end # main.cpp:2:478 leal 4(%rdi), %eax79 movl %eax, x(%rip)80.Ltmp1:81 #DEBUG_VALUE: use:x <- undef82 .loc 0 3 4 # main.cpp:3:483 leal 1(%rdi), %eax84 movl %eax, y(%rip)85.Ltmp2:86 #DEBUG_VALUE: use:y <- undef87 .loc 0 12 13 # main.cpp:12:1388 leal (%rdi,%rdi), %eax89 addl $5, %eax90 .loc 0 12 4 is_stmt 0 # main.cpp:12:491 retq92.Ltmp3:93.Lfunc_end1:94 .size main, .Lfunc_end1-main95 .cfi_endproc96 # -- End function97 .type x,@object # @x98 .bss99 .globl x100 .p2align 2101x:102 .long 0 # 0x0103 .size x, 4104 105 .type y,@object # @y106 .data107 .globl y108 .p2align 2109y:110 .long 1 # 0x1111 .size y, 4112 113 .section .debug_abbrev,"",@progbits114 .byte 1 # Abbreviation Code115 .byte 17 # DW_TAG_compile_unit116 .byte 1 # DW_CHILDREN_yes117 .byte 37 # DW_AT_producer118 .byte 37 # DW_FORM_strx1119 .byte 19 # DW_AT_language120 .byte 5 # DW_FORM_data2121 .byte 3 # DW_AT_name122 .byte 37 # DW_FORM_strx1123 .byte 114 # DW_AT_str_offsets_base124 .byte 23 # DW_FORM_sec_offset125 .byte 16 # DW_AT_stmt_list126 .byte 23 # DW_FORM_sec_offset127 .byte 27 # DW_AT_comp_dir128 .byte 37 # DW_FORM_strx1129 .byte 17 # DW_AT_low_pc130 .byte 27 # DW_FORM_addrx131 .byte 18 # DW_AT_high_pc132 .byte 6 # DW_FORM_data4133 .byte 115 # DW_AT_addr_base134 .byte 23 # DW_FORM_sec_offset135 .byte 0 # EOM(1)136 .byte 0 # EOM(2)137 .byte 2 # Abbreviation Code138 .byte 52 # DW_TAG_variable139 .byte 0 # DW_CHILDREN_no140 .byte 3 # DW_AT_name141 .byte 37 # DW_FORM_strx1142 .byte 73 # DW_AT_type143 .byte 19 # DW_FORM_ref4144 .byte 63 # DW_AT_external145 .byte 25 # DW_FORM_flag_present146 .byte 58 # DW_AT_decl_file147 .byte 11 # DW_FORM_data1148 .byte 59 # DW_AT_decl_line149 .byte 11 # DW_FORM_data1150 .byte 2 # DW_AT_location151 .byte 24 # DW_FORM_exprloc152 .byte 0 # EOM(1)153 .byte 0 # EOM(2)154 .byte 3 # Abbreviation Code155 .byte 36 # DW_TAG_base_type156 .byte 0 # DW_CHILDREN_no157 .byte 3 # DW_AT_name158 .byte 37 # DW_FORM_strx1159 .byte 62 # DW_AT_encoding160 .byte 11 # DW_FORM_data1161 .byte 11 # DW_AT_byte_size162 .byte 11 # DW_FORM_data1163 .byte 0 # EOM(1)164 .byte 0 # EOM(2)165 .byte 4 # Abbreviation Code166 .byte 46 # DW_TAG_subprogram167 .byte 1 # DW_CHILDREN_yes168 .byte 17 # DW_AT_low_pc169 .byte 27 # DW_FORM_addrx170 .byte 18 # DW_AT_high_pc171 .byte 6 # DW_FORM_data4172 .byte 64 # DW_AT_frame_base173 .byte 24 # DW_FORM_exprloc174 .byte 122 # DW_AT_call_all_calls175 .byte 25 # DW_FORM_flag_present176 .byte 49 # DW_AT_abstract_origin177 .byte 19 # DW_FORM_ref4178 .byte 0 # EOM(1)179 .byte 0 # EOM(2)180 .byte 5 # Abbreviation Code181 .byte 5 # DW_TAG_formal_parameter182 .byte 0 # DW_CHILDREN_no183 .byte 2 # DW_AT_location184 .byte 24 # DW_FORM_exprloc185 .byte 49 # DW_AT_abstract_origin186 .byte 19 # DW_FORM_ref4187 .byte 0 # EOM(1)188 .byte 0 # EOM(2)189 .byte 6 # Abbreviation Code190 .byte 46 # DW_TAG_subprogram191 .byte 1 # DW_CHILDREN_yes192 .byte 110 # DW_AT_linkage_name193 .byte 37 # DW_FORM_strx1194 .byte 3 # DW_AT_name195 .byte 37 # DW_FORM_strx1196 .byte 58 # DW_AT_decl_file197 .byte 11 # DW_FORM_data1198 .byte 59 # DW_AT_decl_line199 .byte 11 # DW_FORM_data1200 .byte 63 # DW_AT_external201 .byte 25 # DW_FORM_flag_present202 .byte 32 # DW_AT_inline203 .byte 33 # DW_FORM_implicit_const204 .byte 1205 .byte 0 # EOM(1)206 .byte 0 # EOM(2)207 .byte 7 # Abbreviation Code208 .byte 5 # DW_TAG_formal_parameter209 .byte 0 # DW_CHILDREN_no210 .byte 3 # DW_AT_name211 .byte 37 # DW_FORM_strx1212 .byte 58 # DW_AT_decl_file213 .byte 11 # DW_FORM_data1214 .byte 59 # DW_AT_decl_line215 .byte 11 # DW_FORM_data1216 .byte 73 # DW_AT_type217 .byte 19 # DW_FORM_ref4218 .byte 0 # EOM(1)219 .byte 0 # EOM(2)220 .byte 8 # Abbreviation Code221 .byte 15 # DW_TAG_pointer_type222 .byte 0 # DW_CHILDREN_no223 .byte 73 # DW_AT_type224 .byte 19 # DW_FORM_ref4225 .byte 0 # EOM(1)226 .byte 0 # EOM(2)227 .byte 9 # Abbreviation Code228 .byte 46 # DW_TAG_subprogram229 .byte 1 # DW_CHILDREN_yes230 .byte 17 # DW_AT_low_pc231 .byte 27 # DW_FORM_addrx232 .byte 18 # DW_AT_high_pc233 .byte 6 # DW_FORM_data4234 .byte 64 # DW_AT_frame_base235 .byte 24 # DW_FORM_exprloc236 .byte 122 # DW_AT_call_all_calls237 .byte 25 # DW_FORM_flag_present238 .byte 3 # DW_AT_name239 .byte 37 # DW_FORM_strx1240 .byte 58 # DW_AT_decl_file241 .byte 11 # DW_FORM_data1242 .byte 59 # DW_AT_decl_line243 .byte 11 # DW_FORM_data1244 .byte 73 # DW_AT_type245 .byte 19 # DW_FORM_ref4246 .byte 63 # DW_AT_external247 .byte 25 # DW_FORM_flag_present248 .byte 0 # EOM(1)249 .byte 0 # EOM(2)250 .byte 10 # Abbreviation Code251 .byte 5 # DW_TAG_formal_parameter252 .byte 0 # DW_CHILDREN_no253 .byte 2 # DW_AT_location254 .byte 24 # DW_FORM_exprloc255 .byte 3 # DW_AT_name256 .byte 37 # DW_FORM_strx1257 .byte 58 # DW_AT_decl_file258 .byte 11 # DW_FORM_data1259 .byte 59 # DW_AT_decl_line260 .byte 11 # DW_FORM_data1261 .byte 73 # DW_AT_type262 .byte 19 # DW_FORM_ref4263 .byte 0 # EOM(1)264 .byte 0 # EOM(2)265 .byte 11 # Abbreviation Code266 .byte 29 # DW_TAG_inlined_subroutine267 .byte 0 # DW_CHILDREN_no268 .byte 49 # DW_AT_abstract_origin269 .byte 19 # DW_FORM_ref4270 .byte 17 # DW_AT_low_pc271 .byte 27 # DW_FORM_addrx272 .byte 18 # DW_AT_high_pc273 .byte 6 # DW_FORM_data4274 .byte 88 # DW_AT_call_file275 .byte 11 # DW_FORM_data1276 .byte 89 # DW_AT_call_line277 .byte 11 # DW_FORM_data1278 .byte 87 # DW_AT_call_column279 .byte 11 # DW_FORM_data1280 .byte 0 # EOM(1)281 .byte 0 # EOM(2)282 .byte 0 # EOM(3)283 .section .debug_info,"",@progbits284.Lcu_begin0:285 .long .Ldebug_info_end0-.Ldebug_info_start0 # Length of Unit286.Ldebug_info_start0:287 .short 5 # DWARF version number288 .byte 1 # DWARF Unit Type289 .byte 8 # Address Size (in bytes)290 .long .debug_abbrev # Offset Into Abbrev. Section291 .byte 1 # Abbrev [1] 0xc:0xa7 DW_TAG_compile_unit292 .byte 0 # DW_AT_producer293 .short 33 # DW_AT_language294 .byte 1 # DW_AT_name295 .long .Lstr_offsets_base0 # DW_AT_str_offsets_base296 .long .Lline_table_start0 # DW_AT_stmt_list297 .byte 2 # DW_AT_comp_dir298 .byte 2 # DW_AT_low_pc299 .long .Lfunc_end1-.Lfunc_begin0 # DW_AT_high_pc300 .long .Laddr_table_base0 # DW_AT_addr_base301 .byte 2 # Abbrev [2] 0x23:0xb DW_TAG_variable302 .byte 3 # DW_AT_name303 .long 46 # DW_AT_type304 # DW_AT_external305 .byte 0 # DW_AT_decl_file306 .byte 6 # DW_AT_decl_line307 .byte 2 # DW_AT_location308 .byte 161309 .byte 0310 .byte 3 # Abbrev [3] 0x2e:0x4 DW_TAG_base_type311 .byte 4 # DW_AT_name312 .byte 5 # DW_AT_encoding313 .byte 4 # DW_AT_byte_size314 .byte 2 # Abbrev [2] 0x32:0xb DW_TAG_variable315 .byte 5 # DW_AT_name316 .long 46 # DW_AT_type317 # DW_AT_external318 .byte 0 # DW_AT_decl_file319 .byte 7 # DW_AT_decl_line320 .byte 2 # DW_AT_location321 .byte 161322 .byte 1323 .byte 4 # Abbrev [4] 0x3d:0x1b DW_TAG_subprogram324 .byte 2 # DW_AT_low_pc325 .long .Lfunc_end0-.Lfunc_begin0 # DW_AT_high_pc326 .byte 1 # DW_AT_frame_base327 .byte 87328 # DW_AT_call_all_calls329 .long 88 # DW_AT_abstract_origin330 .byte 5 # Abbrev [5] 0x49:0x7 DW_TAG_formal_parameter331 .byte 1 # DW_AT_location332 .byte 85333 .long 93 # DW_AT_abstract_origin334 .byte 5 # Abbrev [5] 0x50:0x7 DW_TAG_formal_parameter335 .byte 1 # DW_AT_location336 .byte 84337 .long 101 # DW_AT_abstract_origin338 .byte 0 # End Of Children Mark339 .byte 6 # Abbrev [6] 0x58:0x16 DW_TAG_subprogram340 .byte 6 # DW_AT_linkage_name341 .byte 7 # DW_AT_name342 .byte 0 # DW_AT_decl_file343 .byte 1 # DW_AT_decl_line344 # DW_AT_external345 # DW_AT_inline346 .byte 7 # Abbrev [7] 0x5d:0x8 DW_TAG_formal_parameter347 .byte 3 # DW_AT_name348 .byte 0 # DW_AT_decl_file349 .byte 1 # DW_AT_decl_line350 .long 110 # DW_AT_type351 .byte 7 # Abbrev [7] 0x65:0x8 DW_TAG_formal_parameter352 .byte 5 # DW_AT_name353 .byte 0 # DW_AT_decl_file354 .byte 1 # DW_AT_decl_line355 .long 110 # DW_AT_type356 .byte 0 # End Of Children Mark357 .byte 8 # Abbrev [8] 0x6e:0x5 DW_TAG_pointer_type358 .long 46 # DW_AT_type359 .byte 9 # Abbrev [9] 0x73:0x31 DW_TAG_subprogram360 .byte 3 # DW_AT_low_pc361 .long .Lfunc_end1-.Lfunc_begin1 # DW_AT_high_pc362 .byte 1 # DW_AT_frame_base363 .byte 87364 # DW_AT_call_all_calls365 .byte 8 # DW_AT_name366 .byte 0 # DW_AT_decl_file367 .byte 8 # DW_AT_decl_line368 .long 46 # DW_AT_type369 # DW_AT_external370 .byte 10 # Abbrev [10] 0x82:0xa DW_TAG_formal_parameter371 .byte 1 # DW_AT_location372 .byte 85373 .byte 9 # DW_AT_name374 .byte 0 # DW_AT_decl_file375 .byte 8 # DW_AT_decl_line376 .long 46 # DW_AT_type377 .byte 10 # Abbrev [10] 0x8c:0xa DW_TAG_formal_parameter378 .byte 1 # DW_AT_location379 .byte 84380 .byte 10 # DW_AT_name381 .byte 0 # DW_AT_decl_file382 .byte 8 # DW_AT_decl_line383 .long 164 # DW_AT_type384 .byte 11 # Abbrev [11] 0x96:0xd DW_TAG_inlined_subroutine385 .long 88 # DW_AT_abstract_origin386 .byte 3 # DW_AT_low_pc387 .long .Ltmp2-.Lfunc_begin1 # DW_AT_high_pc388 .byte 0 # DW_AT_call_file389 .byte 11 # DW_AT_call_line390 .byte 4 # DW_AT_call_column391 .byte 0 # End Of Children Mark392 .byte 8 # Abbrev [8] 0xa4:0x5 DW_TAG_pointer_type393 .long 169 # DW_AT_type394 .byte 8 # Abbrev [8] 0xa9:0x5 DW_TAG_pointer_type395 .long 174 # DW_AT_type396 .byte 3 # Abbrev [3] 0xae:0x4 DW_TAG_base_type397 .byte 11 # DW_AT_name398 .byte 6 # DW_AT_encoding399 .byte 1 # DW_AT_byte_size400 .byte 0 # End Of Children Mark401.Ldebug_info_end0:402 .section .debug_str_offsets,"",@progbits403 .long 52 # Length of String Offsets Set404 .short 5405 .short 0406.Lstr_offsets_base0:407 .section .debug_str,"MS",@progbits,1408.Linfo_string0:409 .asciz "clang version 15.0.0" # string offset=0410.Linfo_string1:411 .asciz "main.cpp" # string offset=134412.Linfo_string2:413 .asciz "/testLocExprLoc" # string offset=143414.Linfo_string3:415 .asciz "x" # string offset=195416.Linfo_string4:417 .asciz "int" # string offset=197418.Linfo_string5:419 .asciz "y" # string offset=201420.Linfo_string6:421 .asciz "_Z3usePiS_" # string offset=203422.Linfo_string7:423 .asciz "use" # string offset=214424.Linfo_string8:425 .asciz "main" # string offset=218426.Linfo_string9:427 .asciz "argc" # string offset=223428.Linfo_string10:429 .asciz "argv" # string offset=228430.Linfo_string11:431 .asciz "char" # string offset=233432 .section .debug_str_offsets,"",@progbits433 .long .Linfo_string0434 .long .Linfo_string1435 .long .Linfo_string2436 .long .Linfo_string3437 .long .Linfo_string4438 .long .Linfo_string5439 .long .Linfo_string6440 .long .Linfo_string7441 .long .Linfo_string8442 .long .Linfo_string9443 .long .Linfo_string10444 .long .Linfo_string11445 .section .debug_addr,"",@progbits446 .long .Ldebug_addr_end0-.Ldebug_addr_start0 # Length of contribution447.Ldebug_addr_start0:448 .short 5 # DWARF version number449 .byte 8 # Address size450 .byte 0 # Segment selector size451.Laddr_table_base0:452 .quad x453 .quad y454 .quad .Lfunc_begin0455 .quad .Lfunc_begin1456.Ldebug_addr_end0:457 .ident "clang version 15.0.0"458 .section ".note.GNU-stack","",@progbits459 .addrsig460 .section .debug_line,"",@progbits461.Lline_table_start0:462