306 lines · plain
1 2# REQUIRES: system-linux3 4# RUN: llvm-mc -dwarf-version=5 -filetype=obj -triple x86_64-unknown-linux %s -o %tmain.o5# RUN: %clang %cflags -dwarf-5 %tmain.o -o %t.exe -Wl,-q6# RUN: llvm-bolt %t.exe -o %t.bolt --update-debug-sections7# RUN: llvm-dwarfdump --show-form --verbose --debug-info %t.exe | FileCheck --check-prefix=PRECHECK %s8 9# RUN: llvm-dwarfdump --show-form --verbose --debug-addr %t.bolt > %t.txt10# RUN: llvm-dwarfdump --show-form --verbose --debug-info %t.bolt >> %t.txt11# RUN: llvm-objdump -d %t.bolt >> %t.txt12# RUN: cat %t.txt | FileCheck --check-prefix=POSTCHECK %s13 14## This test checks that we correctly handle DW_AT_low_pc [DW_FORM_addrx] that is part of DW_TAG_label.15 16# PRECHECK: version = 0x000517# PRECHECK: DW_TAG_label18# PRECHECK-NEXT: DW_AT_name19# PRECHECK-NEXT: DW_AT_decl_file20# PRECHECK-NEXT: DW_AT_decl_line21# PRECHECK-NEXT:DW_AT_low_pc [DW_FORM_addrx] (indexed (00000001)22# PRECHECK: DW_TAG_label23# PRECHECK-NEXT: DW_AT_name24# PRECHECK-NEXT: DW_AT_decl_file25# PRECHECK-NEXT: DW_AT_decl_line26# PRECHECK-NEXT:DW_AT_low_pc [DW_FORM_addrx] (indexed (00000002)27 28 29# POSTCHECK: Addrs: [30# POSTCHECK-NEXT: 0x31# POSTCHECK-NEXT: 0x32# POSTCHECK-NEXT: 0x[[ADDR:[1-9a-f]*]]33# POSTCHECK-NEXT: 0x[[ADDR2:[1-9a-f]*]]34 35# POSTCHECK: version = 0x000536# POSTCHECK: DW_TAG_label37# POSTCHECK-NEXT: DW_AT_name38# POSTCHECK-NEXT: DW_AT_decl_file39# POSTCHECK-NEXT: DW_AT_decl_line40# POSTCHECK-NEXT:DW_AT_low_pc [DW_FORM_addrx] (indexed (00000002)41# POSTCHECK-SAME: 0x[[ADDR]]42# POSTCHECK: DW_TAG_label43# POSTCHECK-NEXT: DW_AT_name44# POSTCHECK-NEXT: DW_AT_decl_file45# POSTCHECK-NEXT: DW_AT_decl_line46# POSTCHECK-NEXT:DW_AT_low_pc [DW_FORM_addrx] (indexed (00000003)47# POSTCHECK-SAME: 0x[[ADDR2]]48 49# POSTCHECK: [[ADDR]]: 8b 45 f850# POSTCHECK: [[ADDR2]]: 8b 45 f851 52## clang++ main.cpp -g -S53## int main() {54## int a = 4;55## if (a == 5)56## goto LABEL1;57## else58## goto LABEL2;59## LABEL1:a++;60## LABEL2:a--;61## return 0;62## }63 64 .text65 .file "main.cpp"66 .globl main # -- Begin function main67 .p2align 4, 0x9068 .type main,@function69main: # @main70.Lfunc_begin0:71 .file 0 "/testLabel" "main.cpp" md5 0xa0bd66020d06f1303de7008e3c54205072 .loc 0 1 0 # main.cpp:1:073 .cfi_startproc74# %bb.0: # %entry75 pushq %rbp76 .cfi_def_cfa_offset 1677 .cfi_offset %rbp, -1678 movq %rsp, %rbp79 .cfi_def_cfa_register %rbp80 movl $0, -4(%rbp)81.Ltmp0:82 .loc 0 2 7 prologue_end # main.cpp:2:783 movl $4, -8(%rbp)84.Ltmp1:85 .loc 0 3 9 # main.cpp:3:986 cmpl $5, -8(%rbp)87.Ltmp2:88 .loc 0 3 7 is_stmt 0 # main.cpp:3:789 jne .LBB0_290# %bb.1: # %if.then91.Ltmp3:92 .loc 0 4 5 is_stmt 1 # main.cpp:4:593 jmp .LBB0_394.LBB0_2: # %if.else95 .loc 0 6 5 # main.cpp:6:596 jmp .LBB0_497.Ltmp4:98.LBB0_3: # %LABEL199 #DEBUG_LABEL: main:LABEL1100 .loc 0 7 11 # main.cpp:7:11101 movl -8(%rbp), %eax102 addl $1, %eax103 movl %eax, -8(%rbp)104.LBB0_4: # %LABEL2105.Ltmp5:106 #DEBUG_LABEL: main:LABEL2107 .loc 0 8 11 # main.cpp:8:11108 movl -8(%rbp), %eax109 addl $-1, %eax110 movl %eax, -8(%rbp)111 .loc 0 9 3 # main.cpp:9:3112 xorl %eax, %eax113 popq %rbp114 .cfi_def_cfa %rsp, 8115 retq116.Ltmp6:117.Lfunc_end0:118 .size main, .Lfunc_end0-main119 .cfi_endproc120 # -- End function121 .section .debug_abbrev,"",@progbits122 .byte 1 # Abbreviation Code123 .byte 17 # DW_TAG_compile_unit124 .byte 1 # DW_CHILDREN_yes125 .byte 37 # DW_AT_producer126 .byte 37 # DW_FORM_strx1127 .byte 19 # DW_AT_language128 .byte 5 # DW_FORM_data2129 .byte 3 # DW_AT_name130 .byte 37 # DW_FORM_strx1131 .byte 114 # DW_AT_str_offsets_base132 .byte 23 # DW_FORM_sec_offset133 .byte 16 # DW_AT_stmt_list134 .byte 23 # DW_FORM_sec_offset135 .byte 27 # DW_AT_comp_dir136 .byte 37 # DW_FORM_strx1137 .byte 17 # DW_AT_low_pc138 .byte 27 # DW_FORM_addrx139 .byte 18 # DW_AT_high_pc140 .byte 6 # DW_FORM_data4141 .byte 115 # DW_AT_addr_base142 .byte 23 # DW_FORM_sec_offset143 .byte 0 # EOM(1)144 .byte 0 # EOM(2)145 .byte 2 # Abbreviation Code146 .byte 46 # DW_TAG_subprogram147 .byte 1 # DW_CHILDREN_yes148 .byte 17 # DW_AT_low_pc149 .byte 27 # DW_FORM_addrx150 .byte 18 # DW_AT_high_pc151 .byte 6 # DW_FORM_data4152 .byte 64 # DW_AT_frame_base153 .byte 24 # DW_FORM_exprloc154 .byte 3 # DW_AT_name155 .byte 37 # DW_FORM_strx1156 .byte 58 # DW_AT_decl_file157 .byte 11 # DW_FORM_data1158 .byte 59 # DW_AT_decl_line159 .byte 11 # DW_FORM_data1160 .byte 73 # DW_AT_type161 .byte 19 # DW_FORM_ref4162 .byte 63 # DW_AT_external163 .byte 25 # DW_FORM_flag_present164 .byte 0 # EOM(1)165 .byte 0 # EOM(2)166 .byte 3 # Abbreviation Code167 .byte 52 # DW_TAG_variable168 .byte 0 # DW_CHILDREN_no169 .byte 2 # DW_AT_location170 .byte 24 # DW_FORM_exprloc171 .byte 3 # DW_AT_name172 .byte 37 # DW_FORM_strx1173 .byte 58 # DW_AT_decl_file174 .byte 11 # DW_FORM_data1175 .byte 59 # DW_AT_decl_line176 .byte 11 # DW_FORM_data1177 .byte 73 # DW_AT_type178 .byte 19 # DW_FORM_ref4179 .byte 0 # EOM(1)180 .byte 0 # EOM(2)181 .byte 4 # Abbreviation Code182 .byte 10 # DW_TAG_label183 .byte 0 # DW_CHILDREN_no184 .byte 3 # DW_AT_name185 .byte 37 # DW_FORM_strx1186 .byte 58 # DW_AT_decl_file187 .byte 11 # DW_FORM_data1188 .byte 59 # DW_AT_decl_line189 .byte 11 # DW_FORM_data1190 .byte 17 # DW_AT_low_pc191 .byte 27 # DW_FORM_addrx192 .byte 0 # EOM(1)193 .byte 0 # EOM(2)194 .byte 5 # Abbreviation Code195 .byte 36 # DW_TAG_base_type196 .byte 0 # DW_CHILDREN_no197 .byte 3 # DW_AT_name198 .byte 37 # DW_FORM_strx1199 .byte 62 # DW_AT_encoding200 .byte 11 # DW_FORM_data1201 .byte 11 # DW_AT_byte_size202 .byte 11 # DW_FORM_data1203 .byte 0 # EOM(1)204 .byte 0 # EOM(2)205 .byte 0 # EOM(3)206 .section .debug_info,"",@progbits207.Lcu_begin0:208 .long .Ldebug_info_end0-.Ldebug_info_start0 # Length of Unit209.Ldebug_info_start0:210 .short 5 # DWARF version number211 .byte 1 # DWARF Unit Type212 .byte 8 # Address Size (in bytes)213 .long .debug_abbrev # Offset Into Abbrev. Section214 .byte 1 # Abbrev [1] 0xc:0x41 DW_TAG_compile_unit215 .byte 0 # DW_AT_producer216 .short 33 # DW_AT_language217 .byte 1 # DW_AT_name218 .long .Lstr_offsets_base0 # DW_AT_str_offsets_base219 .long .Lline_table_start0 # DW_AT_stmt_list220 .byte 2 # DW_AT_comp_dir221 .byte 0 # DW_AT_low_pc222 .long .Lfunc_end0-.Lfunc_begin0 # DW_AT_high_pc223 .long .Laddr_table_base0 # DW_AT_addr_base224 .byte 2 # Abbrev [2] 0x23:0x25 DW_TAG_subprogram225 .byte 0 # DW_AT_low_pc226 .long .Lfunc_end0-.Lfunc_begin0 # DW_AT_high_pc227 .byte 1 # DW_AT_frame_base228 .byte 86229 .byte 3 # DW_AT_name230 .byte 0 # DW_AT_decl_file231 .byte 1 # DW_AT_decl_line232 .long 72 # DW_AT_type233 # DW_AT_external234 .byte 3 # Abbrev [3] 0x32:0xb DW_TAG_variable235 .byte 2 # DW_AT_location236 .byte 145237 .byte 120238 .byte 5 # DW_AT_name239 .byte 0 # DW_AT_decl_file240 .byte 2 # DW_AT_decl_line241 .long 72 # DW_AT_type242 .byte 4 # Abbrev [4] 0x3d:0x5 DW_TAG_label243 .byte 6 # DW_AT_name244 .byte 0 # DW_AT_decl_file245 .byte 7 # DW_AT_decl_line246 .byte 1 # DW_AT_low_pc247 .byte 4 # Abbrev [4] 0x42:0x5 DW_TAG_label248 .byte 7 # DW_AT_name249 .byte 0 # DW_AT_decl_file250 .byte 8 # DW_AT_decl_line251 .byte 2 # DW_AT_low_pc252 .byte 0 # End Of Children Mark253 .byte 5 # Abbrev [5] 0x48:0x4 DW_TAG_base_type254 .byte 4 # DW_AT_name255 .byte 5 # DW_AT_encoding256 .byte 4 # DW_AT_byte_size257 .byte 0 # End Of Children Mark258.Ldebug_info_end0:259 .section .debug_str_offsets,"",@progbits260 .long 36 # Length of String Offsets Set261 .short 5262 .short 0263.Lstr_offsets_base0:264 .section .debug_str,"MS",@progbits,1265.Linfo_string0:266 .asciz "clang version 15.0.0" # string offset=0267.Linfo_string1:268 .asciz "main.cpp" # string offset=134269.Linfo_string2:270 .asciz "/testLabel" # string offset=143271.Linfo_string3:272 .asciz "main" # string offset=190273.Linfo_string4:274 .asciz "int" # string offset=195275.Linfo_string5:276 .asciz "a" # string offset=199277.Linfo_string6:278 .asciz "LABEL1" # string offset=201279.Linfo_string7:280 .asciz "LABEL2" # string offset=208281 .section .debug_str_offsets,"",@progbits282 .long .Linfo_string0283 .long .Linfo_string1284 .long .Linfo_string2285 .long .Linfo_string3286 .long .Linfo_string4287 .long .Linfo_string5288 .long .Linfo_string6289 .long .Linfo_string7290 .section .debug_addr,"",@progbits291 .long .Ldebug_addr_end0-.Ldebug_addr_start0 # Length of contribution292.Ldebug_addr_start0:293 .short 5 # DWARF version number294 .byte 8 # Address size295 .byte 0 # Segment selector size296.Laddr_table_base0:297 .quad .Lfunc_begin0298 .quad .Ltmp4299 .quad .Ltmp5300.Ldebug_addr_end0:301 .ident "clang version 15.0.0"302 .section ".note.GNU-stack","",@progbits303 .addrsig304 .section .debug_line,"",@progbits305.Lline_table_start0:306