This adds a new test checking llvm-symbolizer with an object built with basic block...
authorSriraman Tallam <tmsriram@google.com>
Sat, 9 Jan 2021 05:52:34 +0000 (21:52 -0800)
committerSriraman Tallam <tmsriram@google.com>
Sat, 9 Jan 2021 06:12:36 +0000 (22:12 -0800)
Build a object with -fbasic-block-sections and reorder the basic blocks to be
non-contiguous. Then check if llvm-symbolizer correctly reports the symbolized
addresses. Included the source to build the object with command lines.

Differential Revision: https://reviews.llvm.org/D91678

llvm/test/DebugInfo/llvm-symbolizer-bbsections-test.s [new file with mode: 0644]

diff --git a/llvm/test/DebugInfo/llvm-symbolizer-bbsections-test.s b/llvm/test/DebugInfo/llvm-symbolizer-bbsections-test.s
new file mode 100644 (file)
index 0000000..822ce26
--- /dev/null
@@ -0,0 +1,594 @@
+# REQUIRES: x86-registered-target
+# RUN: clang -c %s -o %t
+# RUN: llvm-symbolizer --obj=%t 0x30 0x20 0x6c 0xf | FileCheck %s
+
+# CHECK:      main
+# CHECK-NEXT: llvm-symbolizer-bbsections-test.c:13
+# CHECK:      g
+# CHECK-NEXT: llvm-symbolizer-bbsections-test.c:5
+# CHECK:      main
+# CHECK-NEXT: llvm-symbolizer-bbsections-test.c:15
+# CHECK:      main
+# CHECK-NEXT: llvm-symbolizer-bbsections-test.c:18
+# How to generate this file:
+#  int f(int a) {
+#    return a + 1;
+#  }
+#
+#  int g(int a) {
+#    return a + 2;
+#  }
+#
+#  int h(int a) {
+#    return a + 3;
+#  }
+#
+#  // Use simple control flow to generate lots of basic block sections.
+#  int main(int argc, char *argv[]) {
+#    if (argc > 10)
+#      return f(argc);
+#    else if (argc > 8)
+#      return g(argc);
+#    else if (argc > 4)
+#      return h(argc);
+#    return 0;
+#  }
+#
+#  $ clang -S -fbasic-block-sections=all llvm-symbolizer-bbsections-test.cc
+#  Manually reororder the sections to place them in this order:
+#   _Z1fi
+#   main.__part.4
+#   _Z1gi
+#   main
+#   _Z1hi
+#   main.__part.5
+#   (rest)
+#  Strip the .section .text directives to have all the functions in the same
+#  section.
+#  This ensures the basic blocks are reordered non-contiguous exactly like
+#  how a linker would do it.
+       .text
+       .file   "llvm-symbolizer-bbsections-test.c"
+       #.section .text._Z1fi,"ax",@progbits
+       .globl  _Z1fi                           # -- Begin function _Z1fi
+       .p2align        4, 0x90
+       .type   _Z1fi,@function
+_Z1fi:                                  # @_Z1fi
+.Lfunc_begin0:
+       .file   1 "Examples" "llvm-symbolizer-bbsections-test.c"
+       .loc    1 1 0                           # llvm-symbolizer-bbsections-test.c:1:0
+       .cfi_startproc
+# %bb.0:
+       pushq   %rbp
+       .cfi_def_cfa_offset 16
+       .cfi_offset %rbp, -16
+       movq    %rsp, %rbp
+       .cfi_def_cfa_register %rbp
+       movl    %edi, -4(%rbp)
+.Ltmp0:
+       .loc    1 2 10 prologue_end             # llvm-symbolizer-bbsections-test.c:2:10
+       movl    -4(%rbp), %eax
+       .loc    1 2 12 is_stmt 0                # llvm-symbolizer-bbsections-test.c:2:12
+       addl    $1, %eax
+       .loc    1 2 3                           # llvm-symbolizer-bbsections-test.c:2:3
+       popq    %rbp
+       .cfi_def_cfa %rsp, 8
+       retq
+.Ltmp1:
+       .cfi_endproc
+.Lfunc_end0:
+       .size   _Z1fi, .Lfunc_end0-_Z1fi
+                                        # -- End function
+       #.section text.main,"ax",@progbits,unique,4
+main.__part.4:
+       .cfi_startproc
+       .cfi_def_cfa %rbp, 16
+       .cfi_offset %rbp, -16
+       .loc    1 18 17 is_stmt 1               # llvm-symbolizer-bbsections-test.c:18:17
+       cmpl    $4, -8(%rbp)
+.Ltmp9:
+       .loc    1 18 12 is_stmt 0               # llvm-symbolizer-bbsections-test.c:18:12
+       jle     main.__part.6
+       jmp     main.__part.5
+.LBB_END3_4:
+       .size   main.__part.4, .LBB_END3_4-main.__part.4
+       .cfi_endproc
+
+       #.section .text._Z1gi,"ax",@progbits
+       .globl  _Z1gi                           # -- Begin function _Z1gi
+       .p2align        4, 0x90
+       .type   _Z1gi,@function
+_Z1gi:                                  # @_Z1gi
+.Lfunc_begin1:
+       .loc    1 5 0 is_stmt 1                 # llvm-symbolizer-bbsections-test.c:5:0
+       .cfi_startproc
+# %bb.0:
+       pushq   %rbp
+       .cfi_def_cfa_offset 16
+       .cfi_offset %rbp, -16
+       movq    %rsp, %rbp
+       .cfi_def_cfa_register %rbp
+       movl    %edi, -4(%rbp)
+.Ltmp2:
+       .loc    1 6 10 prologue_end             # llvm-symbolizer-bbsections-test.c:6:10
+       movl    -4(%rbp), %eax
+       .loc    1 6 12 is_stmt 0                # llvm-symbolizer-bbsections-test.c:6:12
+       addl    $2, %eax
+       .loc    1 6 3                           # llvm-symbolizer-bbsections-test.c:6:3
+       popq    %rbp
+       .cfi_def_cfa %rsp, 8
+       retq
+.Ltmp3:
+       .cfi_endproc
+.Lfunc_end1:
+       .size   _Z1gi, .Lfunc_end1-_Z1gi
+                                        # -- End function
+       #.section .text.main,"ax",@progbits
+       .globl  main                            # -- Begin function main
+       .p2align        4, 0x90
+       .type   main,@function
+main:                                   # @main
+.Lfunc_begin3:
+       .loc    1 13 0 is_stmt 1                # llvm-symbolizer-bbsections-test.c:13:0
+       .cfi_startproc
+# %bb.0:
+       pushq   %rbp
+       .cfi_def_cfa_offset 16
+       .cfi_offset %rbp, -16
+       movq    %rsp, %rbp
+       .cfi_def_cfa_register %rbp
+       subq    $16, %rsp
+       movl    $0, -4(%rbp)
+       movl    %edi, -8(%rbp)
+       movq    %rsi, -16(%rbp)
+.Ltmp6:
+       .loc    1 14 12 prologue_end            # llvm-symbolizer-bbsections-test.c:14:12
+       cmpl    $10, -8(%rbp)
+.Ltmp7:
+       .loc    1 14 7 is_stmt 0                # llvm-symbolizer-bbsections-test.c:14:7
+       jle     main.__part.2
+       jmp     main.__part.1
+       .cfi_endproc
+        #.section .text._Z1hi,"ax",@progbits
+       .globl  _Z1hi                           # -- Begin function _Z1hi
+       .p2align        4, 0x90
+       .type   _Z1hi,@function
+_Z1hi:                                  # @_Z1hi
+.Lfunc_begin2:
+       .loc    1 9 0 is_stmt 1                 # llvm-symbolizer-bbsections-test.c:9:0
+       .cfi_startproc
+# %bb.0:
+       pushq   %rbp
+       .cfi_def_cfa_offset 16
+       .cfi_offset %rbp, -16
+       movq    %rsp, %rbp
+       .cfi_def_cfa_register %rbp
+       movl    %edi, -4(%rbp)
+.Ltmp4:
+       .loc    1 10 10 prologue_end            # llvm-symbolizer-bbsections-test.c:10:10
+       movl    -4(%rbp), %eax
+       .loc    1 10 12 is_stmt 0               # llvm-symbolizer-bbsections-test.c:10:12
+       addl    $3, %eax
+       .loc    1 10 3                          # llvm-symbolizer-bbsections-test.c:10:3
+       popq    %rbp
+       .cfi_def_cfa %rsp, 8
+       retq
+.Ltmp5:
+       .cfi_endproc
+.Lfunc_end2:
+       .size   _Z1hi, .Lfunc_end2-_Z1hi
+                                        # -- End function
+       #.section .text.main,"ax",@progbits,unique,5
+main.__part.5:
+       .cfi_startproc
+       .cfi_def_cfa %rbp, 16
+       .cfi_offset %rbp, -16
+       .loc    1 19 14 is_stmt 1               # llvm-symbolizer-bbsections-test.c:19:14
+       movl    -8(%rbp), %edi
+       .loc    1 19 12 is_stmt 0               # llvm-symbolizer-bbsections-test.c:19:12
+       callq   _Z1hi
+       .loc    1 19 5                          # llvm-symbolizer-bbsections-test.c:19:5
+       movl    %eax, -4(%rbp)
+       jmp     main.__part.9
+.Ltmp10:
+.LBB_END3_5:
+       .size   main.__part.5, .LBB_END3_5-main.__part.5
+       .cfi_endproc
+       #.section .text.main,"ax",@progbits,unique,1
+main.__part.1:
+       .cfi_startproc
+       .cfi_def_cfa %rbp, 16
+       .cfi_offset %rbp, -16
+       .loc    1 15 14 is_stmt 1               # llvm-symbolizer-bbsections-test.c:15:14
+       movl    -8(%rbp), %edi
+       .loc    1 15 12 is_stmt 0               # llvm-symbolizer-bbsections-test.c:15:12
+       callq   _Z1fi
+       .loc    1 15 5                          # llvm-symbolizer-bbsections-test.c:15:5
+       movl    %eax, -4(%rbp)
+       jmp     main.__part.9
+.LBB_END3_1:
+       .size   main.__part.1, .LBB_END3_1-main.__part.1
+       .cfi_endproc
+       #.section .text.main,"ax",@progbits,unique,2
+main.__part.2:
+       .cfi_startproc
+       .cfi_def_cfa %rbp, 16
+       .cfi_offset %rbp, -16
+       .loc    1 16 17 is_stmt 1               # llvm-symbolizer-bbsections-test.c:16:17
+       cmpl    $8, -8(%rbp)
+.Ltmp8:
+       .loc    1 16 12 is_stmt 0               # llvm-symbolizer-bbsections-test.c:16:12
+       jle     main.__part.4
+       jmp     main.__part.3
+.LBB_END3_2:
+       .size   main.__part.2, .LBB_END3_2-main.__part.2
+       .cfi_endproc
+       #.section .text.main,"ax",@progbits,unique,3
+main.__part.3:
+       .cfi_startproc
+       .cfi_def_cfa %rbp, 16
+       .cfi_offset %rbp, -16
+       .loc    1 17 14 is_stmt 1               # llvm-symbolizer-bbsections-test.c:17:14
+       movl    -8(%rbp), %edi
+       .loc    1 17 12 is_stmt 0               # llvm-symbolizer-bbsections-test.c:17:12
+       callq   _Z1gi
+       .loc    1 17 5                          # llvm-symbolizer-bbsections-test.c:17:5
+       movl    %eax, -4(%rbp)
+       jmp     main.__part.9
+.LBB_END3_3:
+       .size   main.__part.3, .LBB_END3_3-main.__part.3
+       .cfi_endproc
+       #.section .text.main,"ax",@progbits,unique,6
+main.__part.6:
+       .cfi_startproc
+       .cfi_def_cfa %rbp, 16
+       .cfi_offset %rbp, -16
+       .loc    1 0 5                           # llvm-symbolizer-bbsections-test.c:0:5
+       jmp     main.__part.7
+       jmp     main.__part.7
+.LBB_END3_6:
+       .size   main.__part.6, .LBB_END3_6-main.__part.6
+       .cfi_endproc
+       #.section .text.main,"ax",@progbits,unique,7
+main.__part.7:
+       .cfi_startproc
+       .cfi_def_cfa %rbp, 16
+       .cfi_offset %rbp, -16
+       jmp     main.__part.8
+       jmp     main.__part.8
+.LBB_END3_7:
+       .size   main.__part.7, .LBB_END3_7-main.__part.7
+       .cfi_endproc
+       #.section .text.main,"ax",@progbits,unique,8
+main.__part.8:
+       .cfi_startproc
+       .cfi_def_cfa %rbp, 16
+       .cfi_offset %rbp, -16
+       .loc    1 20 3 is_stmt 1                # llvm-symbolizer-bbsections-test.c:20:3
+       movl    $0, -4(%rbp)
+       jmp     main.__part.9
+.LBB_END3_8:
+       .size   main.__part.8, .LBB_END3_8-main.__part.8
+       .cfi_endproc
+       #.section .text.main,"ax",@progbits,unique,9
+main.__part.9:
+       .cfi_startproc
+       .cfi_def_cfa %rbp, 16
+       .cfi_offset %rbp, -16
+       .loc    1 21 1                          # llvm-symbolizer-bbsections-test.c:21:1
+       movl    -4(%rbp), %eax
+       addq    $16, %rsp
+       popq    %rbp
+       .cfi_def_cfa %rsp, 8
+       retq
+.Ltmp11:
+.LBB_END3_9:
+       .size   main.__part.9, .LBB_END3_9-main.__part.9
+       .cfi_endproc
+       #.section .text.main,"ax",@progbits
+.Lfunc_end3:
+       .size   main, .Lfunc_end3-main
+                                        # -- End function
+       .section        .debug_abbrev,"",@progbits
+       .byte   1                               # Abbreviation Code
+       .byte   17                              # DW_TAG_compile_unit
+       .byte   1                               # DW_CHILDREN_yes
+       .byte   37                              # DW_AT_producer
+       .byte   14                              # DW_FORM_strp
+       .byte   19                              # DW_AT_language
+       .byte   5                               # DW_FORM_data2
+       .byte   3                               # DW_AT_name
+       .byte   14                              # DW_FORM_strp
+       .byte   16                              # DW_AT_stmt_list
+       .byte   23                              # DW_FORM_sec_offset
+       .byte   27                              # DW_AT_comp_dir
+       .byte   14                              # DW_FORM_strp
+       .byte   17                              # DW_AT_low_pc
+       .byte   1                               # DW_FORM_addr
+       .byte   85                              # DW_AT_ranges
+       .byte   23                              # DW_FORM_sec_offset
+       .byte   0                               # EOM(1)
+       .byte   0                               # EOM(2)
+       .byte   2                               # Abbreviation Code
+       .byte   46                              # DW_TAG_subprogram
+       .byte   1                               # DW_CHILDREN_yes
+       .byte   17                              # DW_AT_low_pc
+       .byte   1                               # DW_FORM_addr
+       .byte   18                              # DW_AT_high_pc
+       .byte   6                               # DW_FORM_data4
+       .byte   64                              # DW_AT_frame_base
+       .byte   24                              # DW_FORM_exprloc
+       .byte   110                             # DW_AT_linkage_name
+       .byte   14                              # DW_FORM_strp
+       .byte   3                               # DW_AT_name
+       .byte   14                              # DW_FORM_strp
+       .byte   58                              # DW_AT_decl_file
+       .byte   11                              # DW_FORM_data1
+       .byte   59                              # DW_AT_decl_line
+       .byte   11                              # DW_FORM_data1
+       .byte   73                              # DW_AT_type
+       .byte   19                              # DW_FORM_ref4
+       .byte   63                              # DW_AT_external
+       .byte   25                              # DW_FORM_flag_present
+       .byte   0                               # EOM(1)
+       .byte   0                               # EOM(2)
+       .byte   3                               # Abbreviation Code
+       .byte   5                               # DW_TAG_formal_parameter
+       .byte   0                               # DW_CHILDREN_no
+       .byte   2                               # DW_AT_location
+       .byte   24                              # DW_FORM_exprloc
+       .byte   3                               # DW_AT_name
+       .byte   14                              # DW_FORM_strp
+       .byte   58                              # DW_AT_decl_file
+       .byte   11                              # DW_FORM_data1
+       .byte   59                              # DW_AT_decl_line
+       .byte   11                              # DW_FORM_data1
+       .byte   73                              # DW_AT_type
+       .byte   19                              # DW_FORM_ref4
+       .byte   0                               # EOM(1)
+       .byte   0                               # EOM(2)
+       .byte   4                               # Abbreviation Code
+       .byte   46                              # DW_TAG_subprogram
+       .byte   1                               # DW_CHILDREN_yes
+       .byte   85                              # DW_AT_ranges
+       .byte   23                              # DW_FORM_sec_offset
+       .byte   64                              # DW_AT_frame_base
+       .byte   24                              # DW_FORM_exprloc
+       .byte   3                               # DW_AT_name
+       .byte   14                              # DW_FORM_strp
+       .byte   58                              # DW_AT_decl_file
+       .byte   11                              # DW_FORM_data1
+       .byte   59                              # DW_AT_decl_line
+       .byte   11                              # DW_FORM_data1
+       .byte   73                              # DW_AT_type
+       .byte   19                              # DW_FORM_ref4
+       .byte   63                              # DW_AT_external
+       .byte   25                              # DW_FORM_flag_present
+       .byte   0                               # EOM(1)
+       .byte   0                               # EOM(2)
+       .byte   5                               # Abbreviation Code
+       .byte   36                              # DW_TAG_base_type
+       .byte   0                               # DW_CHILDREN_no
+       .byte   3                               # DW_AT_name
+       .byte   14                              # DW_FORM_strp
+       .byte   62                              # DW_AT_encoding
+       .byte   11                              # DW_FORM_data1
+       .byte   11                              # DW_AT_byte_size
+       .byte   11                              # DW_FORM_data1
+       .byte   0                               # EOM(1)
+       .byte   0                               # EOM(2)
+       .byte   6                               # Abbreviation Code
+       .byte   15                              # DW_TAG_pointer_type
+       .byte   0                               # DW_CHILDREN_no
+       .byte   73                              # DW_AT_type
+       .byte   19                              # DW_FORM_ref4
+       .byte   0                               # EOM(1)
+       .byte   0                               # EOM(2)
+       .byte   0                               # EOM(3)
+       .section        .debug_info,"",@progbits
+.Lcu_begin0:
+       .long   .Ldebug_info_end0-.Ldebug_info_start0 # Length of Unit
+.Ldebug_info_start0:
+       .short  4                               # DWARF version number
+       .long   .debug_abbrev                   # Offset Into Abbrev. Section
+       .byte   8                               # Address Size (in bytes)
+       .byte   1                               # Abbrev [1] 0xb:0xea DW_TAG_compile_unit
+       .long   .Linfo_string0                  # DW_AT_producer
+       .short  33                              # DW_AT_language
+       .long   .Linfo_string1                  # DW_AT_name
+       .long   .Lline_table_start0             # DW_AT_stmt_list
+       .long   .Linfo_string2                  # DW_AT_comp_dir
+       .quad   0                               # DW_AT_low_pc
+       .long   .Ldebug_ranges1                 # DW_AT_ranges
+       .byte   2                               # Abbrev [2] 0x2a:0x2c DW_TAG_subprogram
+       .quad   .Lfunc_begin0                   # DW_AT_low_pc
+       .long   .Lfunc_end0-.Lfunc_begin0       # DW_AT_high_pc
+       .byte   1                               # DW_AT_frame_base
+       .byte   86
+       .long   .Linfo_string3                  # DW_AT_linkage_name
+       .long   .Linfo_string4                  # DW_AT_name
+       .byte   1                               # DW_AT_decl_file
+       .byte   1                               # DW_AT_decl_line
+       .long   220                             # DW_AT_type
+                                        # DW_AT_external
+       .byte   3                               # Abbrev [3] 0x47:0xe DW_TAG_formal_parameter
+       .byte   2                               # DW_AT_location
+       .byte   145
+       .byte   124
+       .long   .Linfo_string11                 # DW_AT_name
+       .byte   1                               # DW_AT_decl_file
+       .byte   1                               # DW_AT_decl_line
+       .long   220                             # DW_AT_type
+       .byte   0                               # End Of Children Mark
+       .byte   2                               # Abbrev [2] 0x56:0x2c DW_TAG_subprogram
+       .quad   .Lfunc_begin1                   # DW_AT_low_pc
+       .long   .Lfunc_end1-.Lfunc_begin1       # DW_AT_high_pc
+       .byte   1                               # DW_AT_frame_base
+       .byte   86
+       .long   .Linfo_string6                  # DW_AT_linkage_name
+       .long   .Linfo_string7                  # DW_AT_name
+       .byte   1                               # DW_AT_decl_file
+       .byte   5                               # DW_AT_decl_line
+       .long   220                             # DW_AT_type
+                                        # DW_AT_external
+       .byte   3                               # Abbrev [3] 0x73:0xe DW_TAG_formal_parameter
+       .byte   2                               # DW_AT_location
+       .byte   145
+       .byte   124
+       .long   .Linfo_string11                 # DW_AT_name
+       .byte   1                               # DW_AT_decl_file
+       .byte   5                               # DW_AT_decl_line
+       .long   220                             # DW_AT_type
+       .byte   0                               # End Of Children Mark
+       .byte   2                               # Abbrev [2] 0x82:0x2c DW_TAG_subprogram
+       .quad   .Lfunc_begin2                   # DW_AT_low_pc
+       .long   .Lfunc_end2-.Lfunc_begin2       # DW_AT_high_pc
+       .byte   1                               # DW_AT_frame_base
+       .byte   86
+       .long   .Linfo_string8                  # DW_AT_linkage_name
+       .long   .Linfo_string9                  # DW_AT_name
+       .byte   1                               # DW_AT_decl_file
+       .byte   9                               # DW_AT_decl_line
+       .long   220                             # DW_AT_type
+                                        # DW_AT_external
+       .byte   3                               # Abbrev [3] 0x9f:0xe DW_TAG_formal_parameter
+       .byte   2                               # DW_AT_location
+       .byte   145
+       .byte   124
+       .long   .Linfo_string11                 # DW_AT_name
+       .byte   1                               # DW_AT_decl_file
+       .byte   9                               # DW_AT_decl_line
+       .long   220                             # DW_AT_type
+       .byte   0                               # End Of Children Mark
+       .byte   4                               # Abbrev [4] 0xae:0x2e DW_TAG_subprogram
+       .long   .Ldebug_ranges0                 # DW_AT_ranges
+       .byte   1                               # DW_AT_frame_base
+       .byte   86
+       .long   .Linfo_string10                 # DW_AT_name
+       .byte   1                               # DW_AT_decl_file
+       .byte   13                              # DW_AT_decl_line
+       .long   220                             # DW_AT_type
+                                        # DW_AT_external
+       .byte   3                               # Abbrev [3] 0xbf:0xe DW_TAG_formal_parameter
+       .byte   2                               # DW_AT_location
+       .byte   145
+       .byte   120
+       .long   .Linfo_string12                 # DW_AT_name
+       .byte   1                               # DW_AT_decl_file
+       .byte   13                              # DW_AT_decl_line
+       .long   220                             # DW_AT_type
+       .byte   3                               # Abbrev [3] 0xcd:0xe DW_TAG_formal_parameter
+       .byte   2                               # DW_AT_location
+       .byte   145
+       .byte   112
+       .long   .Linfo_string13                 # DW_AT_name
+       .byte   1                               # DW_AT_decl_file
+       .byte   13                              # DW_AT_decl_line
+       .long   227                             # DW_AT_type
+       .byte   0                               # End Of Children Mark
+       .byte   5                               # Abbrev [5] 0xdc:0x7 DW_TAG_base_type
+       .long   .Linfo_string5                  # DW_AT_name
+       .byte   5                               # DW_AT_encoding
+       .byte   4                               # DW_AT_byte_size
+       .byte   6                               # Abbrev [6] 0xe3:0x5 DW_TAG_pointer_type
+       .long   232                             # DW_AT_type
+       .byte   6                               # Abbrev [6] 0xe8:0x5 DW_TAG_pointer_type
+       .long   237                             # DW_AT_type
+       .byte   5                               # Abbrev [5] 0xed:0x7 DW_TAG_base_type
+       .long   .Linfo_string14                 # DW_AT_name
+       .byte   6                               # DW_AT_encoding
+       .byte   1                               # DW_AT_byte_size
+       .byte   0                               # End Of Children Mark
+.Ldebug_info_end0:
+       .section        .debug_ranges,"",@progbits
+.Ldebug_ranges0:
+       .quad   main.__part.1
+       .quad   .LBB_END3_1
+       .quad   main.__part.2
+       .quad   .LBB_END3_2
+       .quad   main.__part.3
+       .quad   .LBB_END3_3
+       .quad   main.__part.4
+       .quad   .LBB_END3_4
+       .quad   main.__part.5
+       .quad   .LBB_END3_5
+       .quad   main.__part.6
+       .quad   .LBB_END3_6
+       .quad   main.__part.7
+       .quad   .LBB_END3_7
+       .quad   main.__part.8
+       .quad   .LBB_END3_8
+       .quad   main.__part.9
+       .quad   .LBB_END3_9
+       .quad   .Lfunc_begin3
+       .quad   .Lfunc_end3
+       .quad   0
+       .quad   0
+.Ldebug_ranges1:
+       .quad   .Lfunc_begin0
+       .quad   .Lfunc_end0
+       .quad   .Lfunc_begin1
+       .quad   .Lfunc_end1
+       .quad   .Lfunc_begin2
+       .quad   .Lfunc_end2
+       .quad   main.__part.1
+       .quad   .LBB_END3_1
+       .quad   main.__part.2
+       .quad   .LBB_END3_2
+       .quad   main.__part.3
+       .quad   .LBB_END3_3
+       .quad   main.__part.4
+       .quad   .LBB_END3_4
+       .quad   main.__part.5
+       .quad   .LBB_END3_5
+       .quad   main.__part.6
+       .quad   .LBB_END3_6
+       .quad   main.__part.7
+       .quad   .LBB_END3_7
+       .quad   main.__part.8
+       .quad   .LBB_END3_8
+       .quad   main.__part.9
+       .quad   .LBB_END3_9
+       .quad   .Lfunc_begin3
+       .quad   .Lfunc_end3
+       .quad   0
+       .quad   0
+       .section        .debug_str,"MS",@progbits,1
+.Linfo_string0:
+       .asciz  "clang version 12.0.0 (git@github.com:llvm/llvm-project.git bfa6ca07a8cda0ab889b7fee0b914907ce594e11)" # string offset=0
+.Linfo_string1:
+       .asciz  "llvm-symbolizer-bbsections-test.c" # string offset=101
+.Linfo_string2:
+       .asciz  "Examples" # string offset=135
+.Linfo_string3:
+       .asciz  "_Z1fi"                         # string offset=182
+.Linfo_string4:
+       .asciz  "f"                             # string offset=188
+.Linfo_string5:
+       .asciz  "int"                           # string offset=190
+.Linfo_string6:
+       .asciz  "_Z1gi"                         # string offset=194
+.Linfo_string7:
+       .asciz  "g"                             # string offset=200
+.Linfo_string8:
+       .asciz  "_Z1hi"                         # string offset=202
+.Linfo_string9:
+       .asciz  "h"                             # string offset=208
+.Linfo_string10:
+       .asciz  "main"                          # string offset=210
+.Linfo_string11:
+       .asciz  "a"                             # string offset=215
+.Linfo_string12:
+       .asciz  "argc"                          # string offset=217
+.Linfo_string13:
+       .asciz  "argv"                          # string offset=222
+.Linfo_string14:
+       .asciz  "char"                          # string offset=227
+       .ident  "clang version 12.0.0 (git@github.com:llvm/llvm-project.git bfa6ca07a8cda0ab889b7fee0b914907ce594e11)"
+       .section        ".note.GNU-stack","",@progbits
+       .addrsig
+       .addrsig_sym _Z1fi
+       .addrsig_sym _Z1gi
+       .addrsig_sym _Z1hi
+       .section        .debug_line,"",@progbits
+.Lline_table_start0: