596 lines · plain
1# REQUIRES: x86-registered-target2 3# RUN: llvm-mc -filetype=obj -triple=x86_64 %s -o %t.o4# RUN: llvm-symbolizer --obj=%t.o 0x30 0x20 0x6c 0xf | FileCheck %s5 6# CHECK: main7# CHECK-NEXT: llvm-symbolizer-bbsections-test.c:138# CHECK: g9# CHECK-NEXT: llvm-symbolizer-bbsections-test.c:510# CHECK: main11# CHECK-NEXT: llvm-symbolizer-bbsections-test.c:1512# CHECK: main13# CHECK-NEXT: llvm-symbolizer-bbsections-test.c:1814# How to generate this file:15# int f(int a) {16# return a + 1;17# }18#19# int g(int a) {20# return a + 2;21# }22#23# int h(int a) {24# return a + 3;25# }26#27# // Use simple control flow to generate lots of basic block sections.28# int main(int argc, char *argv[]) {29# if (argc > 10)30# return f(argc);31# else if (argc > 8)32# return g(argc);33# else if (argc > 4)34# return h(argc);35# return 0;36# }37#38# $ clang -S -fbasic-block-sections=all llvm-symbolizer-bbsections-test.cc39# Manually reororder the sections to place them in this order:40# _Z1fi41# main.__part.442# _Z1gi43# main44# _Z1hi45# main.__part.546# (rest)47# Strip the .section .text directives to have all the functions in the same48# section.49# This ensures the basic blocks are reordered non-contiguous exactly like50# how a linker would do it.51 .text52 .file "llvm-symbolizer-bbsections-test.c"53 #.section .text._Z1fi,"ax",@progbits54 .globl _Z1fi # -- Begin function _Z1fi55 .p2align 4, 0x9056 .type _Z1fi,@function57_Z1fi: # @_Z1fi58.Lfunc_begin0:59 .file 1 "Examples" "llvm-symbolizer-bbsections-test.c"60 .loc 1 1 0 # llvm-symbolizer-bbsections-test.c:1:061 .cfi_startproc62# %bb.0:63 pushq %rbp64 .cfi_def_cfa_offset 1665 .cfi_offset %rbp, -1666 movq %rsp, %rbp67 .cfi_def_cfa_register %rbp68 movl %edi, -4(%rbp)69.Ltmp0:70 .loc 1 2 10 prologue_end # llvm-symbolizer-bbsections-test.c:2:1071 movl -4(%rbp), %eax72 .loc 1 2 12 is_stmt 0 # llvm-symbolizer-bbsections-test.c:2:1273 addl $1, %eax74 .loc 1 2 3 # llvm-symbolizer-bbsections-test.c:2:375 popq %rbp76 .cfi_def_cfa %rsp, 877 retq78.Ltmp1:79 .cfi_endproc80.Lfunc_end0:81 .size _Z1fi, .Lfunc_end0-_Z1fi82 # -- End function83 #.section text.main,"ax",@progbits,unique,484main.__part.4:85 .cfi_startproc86 .cfi_def_cfa %rbp, 1687 .cfi_offset %rbp, -1688 .loc 1 18 17 is_stmt 1 # llvm-symbolizer-bbsections-test.c:18:1789 cmpl $4, -8(%rbp)90.Ltmp9:91 .loc 1 18 12 is_stmt 0 # llvm-symbolizer-bbsections-test.c:18:1292 jle main.__part.693 jmp main.__part.594.LBB_END3_4:95 .size main.__part.4, .LBB_END3_4-main.__part.496 .cfi_endproc97 98 #.section .text._Z1gi,"ax",@progbits99 .globl _Z1gi # -- Begin function _Z1gi100 .p2align 4, 0x90101 .type _Z1gi,@function102_Z1gi: # @_Z1gi103.Lfunc_begin1:104 .loc 1 5 0 is_stmt 1 # llvm-symbolizer-bbsections-test.c:5:0105 .cfi_startproc106# %bb.0:107 pushq %rbp108 .cfi_def_cfa_offset 16109 .cfi_offset %rbp, -16110 movq %rsp, %rbp111 .cfi_def_cfa_register %rbp112 movl %edi, -4(%rbp)113.Ltmp2:114 .loc 1 6 10 prologue_end # llvm-symbolizer-bbsections-test.c:6:10115 movl -4(%rbp), %eax116 .loc 1 6 12 is_stmt 0 # llvm-symbolizer-bbsections-test.c:6:12117 addl $2, %eax118 .loc 1 6 3 # llvm-symbolizer-bbsections-test.c:6:3119 popq %rbp120 .cfi_def_cfa %rsp, 8121 retq122.Ltmp3:123 .cfi_endproc124.Lfunc_end1:125 .size _Z1gi, .Lfunc_end1-_Z1gi126 # -- End function127 #.section .text.main,"ax",@progbits128 .globl main # -- Begin function main129 .p2align 4, 0x90130 .type main,@function131main: # @main132.Lfunc_begin3:133 .loc 1 13 0 is_stmt 1 # llvm-symbolizer-bbsections-test.c:13:0134 .cfi_startproc135# %bb.0:136 pushq %rbp137 .cfi_def_cfa_offset 16138 .cfi_offset %rbp, -16139 movq %rsp, %rbp140 .cfi_def_cfa_register %rbp141 subq $16, %rsp142 movl $0, -4(%rbp)143 movl %edi, -8(%rbp)144 movq %rsi, -16(%rbp)145.Ltmp6:146 .loc 1 14 12 prologue_end # llvm-symbolizer-bbsections-test.c:14:12147 cmpl $10, -8(%rbp)148.Ltmp7:149 .loc 1 14 7 is_stmt 0 # llvm-symbolizer-bbsections-test.c:14:7150 jle main.__part.2151 jmp main.__part.1152 .cfi_endproc153 #.section .text._Z1hi,"ax",@progbits154 .globl _Z1hi # -- Begin function _Z1hi155 .p2align 4, 0x90156 .type _Z1hi,@function157_Z1hi: # @_Z1hi158.Lfunc_begin2:159 .loc 1 9 0 is_stmt 1 # llvm-symbolizer-bbsections-test.c:9:0160 .cfi_startproc161# %bb.0:162 pushq %rbp163 .cfi_def_cfa_offset 16164 .cfi_offset %rbp, -16165 movq %rsp, %rbp166 .cfi_def_cfa_register %rbp167 movl %edi, -4(%rbp)168.Ltmp4:169 .loc 1 10 10 prologue_end # llvm-symbolizer-bbsections-test.c:10:10170 movl -4(%rbp), %eax171 .loc 1 10 12 is_stmt 0 # llvm-symbolizer-bbsections-test.c:10:12172 addl $3, %eax173 .loc 1 10 3 # llvm-symbolizer-bbsections-test.c:10:3174 popq %rbp175 .cfi_def_cfa %rsp, 8176 retq177.Ltmp5:178 .cfi_endproc179.Lfunc_end2:180 .size _Z1hi, .Lfunc_end2-_Z1hi181 # -- End function182 #.section .text.main,"ax",@progbits,unique,5183main.__part.5:184 .cfi_startproc185 .cfi_def_cfa %rbp, 16186 .cfi_offset %rbp, -16187 .loc 1 19 14 is_stmt 1 # llvm-symbolizer-bbsections-test.c:19:14188 movl -8(%rbp), %edi189 .loc 1 19 12 is_stmt 0 # llvm-symbolizer-bbsections-test.c:19:12190 callq _Z1hi191 .loc 1 19 5 # llvm-symbolizer-bbsections-test.c:19:5192 movl %eax, -4(%rbp)193 jmp main.__part.9194.Ltmp10:195.LBB_END3_5:196 .size main.__part.5, .LBB_END3_5-main.__part.5197 .cfi_endproc198 #.section .text.main,"ax",@progbits,unique,1199main.__part.1:200 .cfi_startproc201 .cfi_def_cfa %rbp, 16202 .cfi_offset %rbp, -16203 .loc 1 15 14 is_stmt 1 # llvm-symbolizer-bbsections-test.c:15:14204 movl -8(%rbp), %edi205 .loc 1 15 12 is_stmt 0 # llvm-symbolizer-bbsections-test.c:15:12206 callq _Z1fi207 .loc 1 15 5 # llvm-symbolizer-bbsections-test.c:15:5208 movl %eax, -4(%rbp)209 jmp main.__part.9210.LBB_END3_1:211 .size main.__part.1, .LBB_END3_1-main.__part.1212 .cfi_endproc213 #.section .text.main,"ax",@progbits,unique,2214main.__part.2:215 .cfi_startproc216 .cfi_def_cfa %rbp, 16217 .cfi_offset %rbp, -16218 .loc 1 16 17 is_stmt 1 # llvm-symbolizer-bbsections-test.c:16:17219 cmpl $8, -8(%rbp)220.Ltmp8:221 .loc 1 16 12 is_stmt 0 # llvm-symbolizer-bbsections-test.c:16:12222 jle main.__part.4223 jmp main.__part.3224.LBB_END3_2:225 .size main.__part.2, .LBB_END3_2-main.__part.2226 .cfi_endproc227 #.section .text.main,"ax",@progbits,unique,3228main.__part.3:229 .cfi_startproc230 .cfi_def_cfa %rbp, 16231 .cfi_offset %rbp, -16232 .loc 1 17 14 is_stmt 1 # llvm-symbolizer-bbsections-test.c:17:14233 movl -8(%rbp), %edi234 .loc 1 17 12 is_stmt 0 # llvm-symbolizer-bbsections-test.c:17:12235 callq _Z1gi236 .loc 1 17 5 # llvm-symbolizer-bbsections-test.c:17:5237 movl %eax, -4(%rbp)238 jmp main.__part.9239.LBB_END3_3:240 .size main.__part.3, .LBB_END3_3-main.__part.3241 .cfi_endproc242 #.section .text.main,"ax",@progbits,unique,6243main.__part.6:244 .cfi_startproc245 .cfi_def_cfa %rbp, 16246 .cfi_offset %rbp, -16247 .loc 1 0 5 # llvm-symbolizer-bbsections-test.c:0:5248 jmp main.__part.7249 jmp main.__part.7250.LBB_END3_6:251 .size main.__part.6, .LBB_END3_6-main.__part.6252 .cfi_endproc253 #.section .text.main,"ax",@progbits,unique,7254main.__part.7:255 .cfi_startproc256 .cfi_def_cfa %rbp, 16257 .cfi_offset %rbp, -16258 jmp main.__part.8259 jmp main.__part.8260.LBB_END3_7:261 .size main.__part.7, .LBB_END3_7-main.__part.7262 .cfi_endproc263 #.section .text.main,"ax",@progbits,unique,8264main.__part.8:265 .cfi_startproc266 .cfi_def_cfa %rbp, 16267 .cfi_offset %rbp, -16268 .loc 1 20 3 is_stmt 1 # llvm-symbolizer-bbsections-test.c:20:3269 movl $0, -4(%rbp)270 jmp main.__part.9271.LBB_END3_8:272 .size main.__part.8, .LBB_END3_8-main.__part.8273 .cfi_endproc274 #.section .text.main,"ax",@progbits,unique,9275main.__part.9:276 .cfi_startproc277 .cfi_def_cfa %rbp, 16278 .cfi_offset %rbp, -16279 .loc 1 21 1 # llvm-symbolizer-bbsections-test.c:21:1280 movl -4(%rbp), %eax281 addq $16, %rsp282 popq %rbp283 .cfi_def_cfa %rsp, 8284 retq285.Ltmp11:286.LBB_END3_9:287 .size main.__part.9, .LBB_END3_9-main.__part.9288 .cfi_endproc289 #.section .text.main,"ax",@progbits290.Lfunc_end3:291 .size main, .Lfunc_end3-main292 # -- End function293 .section .debug_abbrev,"",@progbits294 .byte 1 # Abbreviation Code295 .byte 17 # DW_TAG_compile_unit296 .byte 1 # DW_CHILDREN_yes297 .byte 37 # DW_AT_producer298 .byte 14 # DW_FORM_strp299 .byte 19 # DW_AT_language300 .byte 5 # DW_FORM_data2301 .byte 3 # DW_AT_name302 .byte 14 # DW_FORM_strp303 .byte 16 # DW_AT_stmt_list304 .byte 23 # DW_FORM_sec_offset305 .byte 27 # DW_AT_comp_dir306 .byte 14 # DW_FORM_strp307 .byte 17 # DW_AT_low_pc308 .byte 1 # DW_FORM_addr309 .byte 85 # DW_AT_ranges310 .byte 23 # DW_FORM_sec_offset311 .byte 0 # EOM(1)312 .byte 0 # EOM(2)313 .byte 2 # Abbreviation Code314 .byte 46 # DW_TAG_subprogram315 .byte 1 # DW_CHILDREN_yes316 .byte 17 # DW_AT_low_pc317 .byte 1 # DW_FORM_addr318 .byte 18 # DW_AT_high_pc319 .byte 6 # DW_FORM_data4320 .byte 64 # DW_AT_frame_base321 .byte 24 # DW_FORM_exprloc322 .byte 110 # DW_AT_linkage_name323 .byte 14 # DW_FORM_strp324 .byte 3 # DW_AT_name325 .byte 14 # DW_FORM_strp326 .byte 58 # DW_AT_decl_file327 .byte 11 # DW_FORM_data1328 .byte 59 # DW_AT_decl_line329 .byte 11 # DW_FORM_data1330 .byte 73 # DW_AT_type331 .byte 19 # DW_FORM_ref4332 .byte 63 # DW_AT_external333 .byte 25 # DW_FORM_flag_present334 .byte 0 # EOM(1)335 .byte 0 # EOM(2)336 .byte 3 # Abbreviation Code337 .byte 5 # DW_TAG_formal_parameter338 .byte 0 # DW_CHILDREN_no339 .byte 2 # DW_AT_location340 .byte 24 # DW_FORM_exprloc341 .byte 3 # DW_AT_name342 .byte 14 # DW_FORM_strp343 .byte 58 # DW_AT_decl_file344 .byte 11 # DW_FORM_data1345 .byte 59 # DW_AT_decl_line346 .byte 11 # DW_FORM_data1347 .byte 73 # DW_AT_type348 .byte 19 # DW_FORM_ref4349 .byte 0 # EOM(1)350 .byte 0 # EOM(2)351 .byte 4 # Abbreviation Code352 .byte 46 # DW_TAG_subprogram353 .byte 1 # DW_CHILDREN_yes354 .byte 85 # DW_AT_ranges355 .byte 23 # DW_FORM_sec_offset356 .byte 64 # DW_AT_frame_base357 .byte 24 # DW_FORM_exprloc358 .byte 3 # DW_AT_name359 .byte 14 # DW_FORM_strp360 .byte 58 # DW_AT_decl_file361 .byte 11 # DW_FORM_data1362 .byte 59 # DW_AT_decl_line363 .byte 11 # DW_FORM_data1364 .byte 73 # DW_AT_type365 .byte 19 # DW_FORM_ref4366 .byte 63 # DW_AT_external367 .byte 25 # DW_FORM_flag_present368 .byte 0 # EOM(1)369 .byte 0 # EOM(2)370 .byte 5 # Abbreviation Code371 .byte 36 # DW_TAG_base_type372 .byte 0 # DW_CHILDREN_no373 .byte 3 # DW_AT_name374 .byte 14 # DW_FORM_strp375 .byte 62 # DW_AT_encoding376 .byte 11 # DW_FORM_data1377 .byte 11 # DW_AT_byte_size378 .byte 11 # DW_FORM_data1379 .byte 0 # EOM(1)380 .byte 0 # EOM(2)381 .byte 6 # Abbreviation Code382 .byte 15 # DW_TAG_pointer_type383 .byte 0 # DW_CHILDREN_no384 .byte 73 # DW_AT_type385 .byte 19 # DW_FORM_ref4386 .byte 0 # EOM(1)387 .byte 0 # EOM(2)388 .byte 0 # EOM(3)389 .section .debug_info,"",@progbits390.Lcu_begin0:391 .long .Ldebug_info_end0-.Ldebug_info_start0 # Length of Unit392.Ldebug_info_start0:393 .short 4 # DWARF version number394 .long .debug_abbrev # Offset Into Abbrev. Section395 .byte 8 # Address Size (in bytes)396 .byte 1 # Abbrev [1] 0xb:0xea DW_TAG_compile_unit397 .long .Linfo_string0 # DW_AT_producer398 .short 33 # DW_AT_language399 .long .Linfo_string1 # DW_AT_name400 .long .Lline_table_start0 # DW_AT_stmt_list401 .long .Linfo_string2 # DW_AT_comp_dir402 .quad 0 # DW_AT_low_pc403 .long .Ldebug_ranges1 # DW_AT_ranges404 .byte 2 # Abbrev [2] 0x2a:0x2c DW_TAG_subprogram405 .quad .Lfunc_begin0 # DW_AT_low_pc406 .long .Lfunc_end0-.Lfunc_begin0 # DW_AT_high_pc407 .byte 1 # DW_AT_frame_base408 .byte 86409 .long .Linfo_string3 # DW_AT_linkage_name410 .long .Linfo_string4 # DW_AT_name411 .byte 1 # DW_AT_decl_file412 .byte 1 # DW_AT_decl_line413 .long 220 # DW_AT_type414 # DW_AT_external415 .byte 3 # Abbrev [3] 0x47:0xe DW_TAG_formal_parameter416 .byte 2 # DW_AT_location417 .byte 145418 .byte 124419 .long .Linfo_string11 # DW_AT_name420 .byte 1 # DW_AT_decl_file421 .byte 1 # DW_AT_decl_line422 .long 220 # DW_AT_type423 .byte 0 # End Of Children Mark424 .byte 2 # Abbrev [2] 0x56:0x2c DW_TAG_subprogram425 .quad .Lfunc_begin1 # DW_AT_low_pc426 .long .Lfunc_end1-.Lfunc_begin1 # DW_AT_high_pc427 .byte 1 # DW_AT_frame_base428 .byte 86429 .long .Linfo_string6 # DW_AT_linkage_name430 .long .Linfo_string7 # DW_AT_name431 .byte 1 # DW_AT_decl_file432 .byte 5 # DW_AT_decl_line433 .long 220 # DW_AT_type434 # DW_AT_external435 .byte 3 # Abbrev [3] 0x73:0xe DW_TAG_formal_parameter436 .byte 2 # DW_AT_location437 .byte 145438 .byte 124439 .long .Linfo_string11 # DW_AT_name440 .byte 1 # DW_AT_decl_file441 .byte 5 # DW_AT_decl_line442 .long 220 # DW_AT_type443 .byte 0 # End Of Children Mark444 .byte 2 # Abbrev [2] 0x82:0x2c DW_TAG_subprogram445 .quad .Lfunc_begin2 # DW_AT_low_pc446 .long .Lfunc_end2-.Lfunc_begin2 # DW_AT_high_pc447 .byte 1 # DW_AT_frame_base448 .byte 86449 .long .Linfo_string8 # DW_AT_linkage_name450 .long .Linfo_string9 # DW_AT_name451 .byte 1 # DW_AT_decl_file452 .byte 9 # DW_AT_decl_line453 .long 220 # DW_AT_type454 # DW_AT_external455 .byte 3 # Abbrev [3] 0x9f:0xe DW_TAG_formal_parameter456 .byte 2 # DW_AT_location457 .byte 145458 .byte 124459 .long .Linfo_string11 # DW_AT_name460 .byte 1 # DW_AT_decl_file461 .byte 9 # DW_AT_decl_line462 .long 220 # DW_AT_type463 .byte 0 # End Of Children Mark464 .byte 4 # Abbrev [4] 0xae:0x2e DW_TAG_subprogram465 .long .Ldebug_ranges0 # DW_AT_ranges466 .byte 1 # DW_AT_frame_base467 .byte 86468 .long .Linfo_string10 # DW_AT_name469 .byte 1 # DW_AT_decl_file470 .byte 13 # DW_AT_decl_line471 .long 220 # DW_AT_type472 # DW_AT_external473 .byte 3 # Abbrev [3] 0xbf:0xe DW_TAG_formal_parameter474 .byte 2 # DW_AT_location475 .byte 145476 .byte 120477 .long .Linfo_string12 # DW_AT_name478 .byte 1 # DW_AT_decl_file479 .byte 13 # DW_AT_decl_line480 .long 220 # DW_AT_type481 .byte 3 # Abbrev [3] 0xcd:0xe DW_TAG_formal_parameter482 .byte 2 # DW_AT_location483 .byte 145484 .byte 112485 .long .Linfo_string13 # DW_AT_name486 .byte 1 # DW_AT_decl_file487 .byte 13 # DW_AT_decl_line488 .long 227 # DW_AT_type489 .byte 0 # End Of Children Mark490 .byte 5 # Abbrev [5] 0xdc:0x7 DW_TAG_base_type491 .long .Linfo_string5 # DW_AT_name492 .byte 5 # DW_AT_encoding493 .byte 4 # DW_AT_byte_size494 .byte 6 # Abbrev [6] 0xe3:0x5 DW_TAG_pointer_type495 .long 232 # DW_AT_type496 .byte 6 # Abbrev [6] 0xe8:0x5 DW_TAG_pointer_type497 .long 237 # DW_AT_type498 .byte 5 # Abbrev [5] 0xed:0x7 DW_TAG_base_type499 .long .Linfo_string14 # DW_AT_name500 .byte 6 # DW_AT_encoding501 .byte 1 # DW_AT_byte_size502 .byte 0 # End Of Children Mark503.Ldebug_info_end0:504 .section .debug_ranges,"",@progbits505.Ldebug_ranges0:506 .quad main.__part.1507 .quad .LBB_END3_1508 .quad main.__part.2509 .quad .LBB_END3_2510 .quad main.__part.3511 .quad .LBB_END3_3512 .quad main.__part.4513 .quad .LBB_END3_4514 .quad main.__part.5515 .quad .LBB_END3_5516 .quad main.__part.6517 .quad .LBB_END3_6518 .quad main.__part.7519 .quad .LBB_END3_7520 .quad main.__part.8521 .quad .LBB_END3_8522 .quad main.__part.9523 .quad .LBB_END3_9524 .quad .Lfunc_begin3525 .quad .Lfunc_end3526 .quad 0527 .quad 0528.Ldebug_ranges1:529 .quad .Lfunc_begin0530 .quad .Lfunc_end0531 .quad .Lfunc_begin1532 .quad .Lfunc_end1533 .quad .Lfunc_begin2534 .quad .Lfunc_end2535 .quad main.__part.1536 .quad .LBB_END3_1537 .quad main.__part.2538 .quad .LBB_END3_2539 .quad main.__part.3540 .quad .LBB_END3_3541 .quad main.__part.4542 .quad .LBB_END3_4543 .quad main.__part.5544 .quad .LBB_END3_5545 .quad main.__part.6546 .quad .LBB_END3_6547 .quad main.__part.7548 .quad .LBB_END3_7549 .quad main.__part.8550 .quad .LBB_END3_8551 .quad main.__part.9552 .quad .LBB_END3_9553 .quad .Lfunc_begin3554 .quad .Lfunc_end3555 .quad 0556 .quad 0557 .section .debug_str,"MS",@progbits,1558.Linfo_string0:559 .asciz "clang version 12.0.0 (git@github.com:llvm/llvm-project.git bfa6ca07a8cda0ab889b7fee0b914907ce594e11)" # string offset=0560.Linfo_string1:561 .asciz "llvm-symbolizer-bbsections-test.c" # string offset=101562.Linfo_string2:563 .asciz "Examples" # string offset=135564.Linfo_string3:565 .asciz "_Z1fi" # string offset=182566.Linfo_string4:567 .asciz "f" # string offset=188568.Linfo_string5:569 .asciz "int" # string offset=190570.Linfo_string6:571 .asciz "_Z1gi" # string offset=194572.Linfo_string7:573 .asciz "g" # string offset=200574.Linfo_string8:575 .asciz "_Z1hi" # string offset=202576.Linfo_string9:577 .asciz "h" # string offset=208578.Linfo_string10:579 .asciz "main" # string offset=210580.Linfo_string11:581 .asciz "a" # string offset=215582.Linfo_string12:583 .asciz "argc" # string offset=217584.Linfo_string13:585 .asciz "argv" # string offset=222586.Linfo_string14:587 .asciz "char" # string offset=227588 .ident "clang version 12.0.0 (git@github.com:llvm/llvm-project.git bfa6ca07a8cda0ab889b7fee0b914907ce594e11)"589 .section ".note.GNU-stack","",@progbits590 .addrsig591 .addrsig_sym _Z1fi592 .addrsig_sym _Z1gi593 .addrsig_sym _Z1hi594 .section .debug_line,"",@progbits595.Lline_table_start0:596