264 lines · plain
1 2# REQUIRES: system-linux3 4# RUN: llvm-mc -dwarf-version=4 -filetype=obj -triple x86_64-unknown-linux %s -o %tmain.o5# RUN: %clang %cflags -dwarf-4 %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# RUN: llvm-dwarfdump --show-form --verbose --debug-info %t.bolt > %t.txt9# RUN: llvm-objdump -d %t.bolt >> %t.txt10# RUN: cat %t.txt | FileCheck --check-prefix=POSTCHECK %s11 12## This test checks that we correctly handle DW_AT_low_pc [DW_FORM_addr] that is part of DW_TAG_label.13 14# PRECHECK: version = 0x000415# PRECHECK: DW_TAG_label16# PRECHECK-NEXT: DW_AT_name17# PRECHECK-NEXT: DW_AT_decl_file18# PRECHECK-NEXT: DW_AT_decl_line19# PRECHECK-NEXT:DW_AT_low_pc [DW_FORM_addr]20# PRECHECK: DW_TAG_label21# PRECHECK-NEXT: DW_AT_name22# PRECHECK-NEXT: DW_AT_decl_file23# PRECHECK-NEXT: DW_AT_decl_line24# PRECHECK-NEXT:DW_AT_low_pc [DW_FORM_addr]25 26# POSTCHECK: version = 0x000427# POSTCHECK: DW_TAG_label28# POSTCHECK-NEXT: DW_AT_name29# POSTCHECK-NEXT: DW_AT_decl_file30# POSTCHECK-NEXT: DW_AT_decl_line31# POSTCHECK-NEXT:DW_AT_low_pc [DW_FORM_addr] (0x[[ADDR:[1-9a-f]*]]32# POSTCHECK: DW_TAG_label33# POSTCHECK-NEXT: DW_AT_name34# POSTCHECK-NEXT: DW_AT_decl_file35# POSTCHECK-NEXT: DW_AT_decl_line36# POSTCHECK-NEXT:DW_AT_low_pc [DW_FORM_addr] (0x[[ADDR2:[1-9a-f]*]]37 38# POSTCHECK: [[ADDR]]: 8b 45 f839# POSTCHECK: [[ADDR2]]: 8b 45 f840 41## clang++ main.cpp -g2 -gdwarf-4 -S42## int main() {43## int a = 4;44## if (a == 5)45## goto LABEL1;46## else47## goto LABEL2;48## LABEL1:a++;49## LABEL2:a--;50## return 0;51## }52 53 .text54 .file "main.cpp"55 .globl main # -- Begin function main56 .p2align 4, 0x9057 .type main,@function58main: # @main59.Lfunc_begin0:60 .file 1 "/home" "main.cpp"61 .loc 1 1 0 # main.cpp:1:062 .cfi_startproc63# %bb.0: # %entry64 pushq %rbp65 .cfi_def_cfa_offset 1666 .cfi_offset %rbp, -1667 movq %rsp, %rbp68 .cfi_def_cfa_register %rbp69 movl $0, -4(%rbp)70.Ltmp0:71 .loc 1 2 7 prologue_end # main.cpp:2:772 movl $4, -8(%rbp)73.Ltmp1:74 .loc 1 3 9 # main.cpp:3:975 cmpl $5, -8(%rbp)76.Ltmp2:77 .loc 1 3 7 is_stmt 0 # main.cpp:3:778 jne .LBB0_279# %bb.1: # %if.then80.Ltmp3:81 .loc 1 4 5 is_stmt 1 # main.cpp:4:582 jmp .LBB0_383.LBB0_2: # %if.else84 .loc 1 6 5 # main.cpp:6:585 jmp .LBB0_486.Ltmp4:87.LBB0_3: # %LABEL188 #DEBUG_LABEL: main:LABEL189 .loc 1 7 11 # main.cpp:7:1190 movl -8(%rbp), %eax91 addl $1, %eax92 movl %eax, -8(%rbp)93.LBB0_4: # %LABEL294.Ltmp5:95 #DEBUG_LABEL: main:LABEL296 .loc 1 8 11 # main.cpp:8:1197 movl -8(%rbp), %eax98 addl $-1, %eax99 movl %eax, -8(%rbp)100 .loc 1 9 3 # main.cpp:9:3101 xorl %eax, %eax102 .loc 1 9 3 epilogue_begin is_stmt 0 # main.cpp:9:3103 popq %rbp104 .cfi_def_cfa %rsp, 8105 retq106.Ltmp6:107.Lfunc_end0:108 .size main, .Lfunc_end0-main109 .cfi_endproc110 # -- End function111 .section .debug_abbrev,"",@progbits112 .byte 1 # Abbreviation Code113 .byte 17 # DW_TAG_compile_unit114 .byte 1 # DW_CHILDREN_yes115 .byte 37 # DW_AT_producer116 .byte 14 # DW_FORM_strp117 .byte 19 # DW_AT_language118 .byte 5 # DW_FORM_data2119 .byte 3 # DW_AT_name120 .byte 14 # DW_FORM_strp121 .byte 16 # DW_AT_stmt_list122 .byte 23 # DW_FORM_sec_offset123 .byte 27 # DW_AT_comp_dir124 .byte 14 # DW_FORM_strp125 .byte 17 # DW_AT_low_pc126 .byte 1 # DW_FORM_addr127 .byte 18 # DW_AT_high_pc128 .byte 6 # DW_FORM_data4129 .byte 0 # EOM(1)130 .byte 0 # EOM(2)131 .byte 2 # Abbreviation Code132 .byte 46 # DW_TAG_subprogram133 .byte 1 # DW_CHILDREN_yes134 .byte 17 # DW_AT_low_pc135 .byte 1 # DW_FORM_addr136 .byte 18 # DW_AT_high_pc137 .byte 6 # DW_FORM_data4138 .byte 64 # DW_AT_frame_base139 .byte 24 # DW_FORM_exprloc140 .byte 3 # DW_AT_name141 .byte 14 # DW_FORM_strp142 .byte 58 # DW_AT_decl_file143 .byte 11 # DW_FORM_data1144 .byte 59 # DW_AT_decl_line145 .byte 11 # DW_FORM_data1146 .byte 73 # DW_AT_type147 .byte 19 # DW_FORM_ref4148 .byte 63 # DW_AT_external149 .byte 25 # DW_FORM_flag_present150 .byte 0 # EOM(1)151 .byte 0 # EOM(2)152 .byte 3 # Abbreviation Code153 .byte 52 # DW_TAG_variable154 .byte 0 # DW_CHILDREN_no155 .byte 2 # DW_AT_location156 .byte 24 # DW_FORM_exprloc157 .byte 3 # DW_AT_name158 .byte 14 # DW_FORM_strp159 .byte 58 # DW_AT_decl_file160 .byte 11 # DW_FORM_data1161 .byte 59 # DW_AT_decl_line162 .byte 11 # DW_FORM_data1163 .byte 73 # DW_AT_type164 .byte 19 # DW_FORM_ref4165 .byte 0 # EOM(1)166 .byte 0 # EOM(2)167 .byte 4 # Abbreviation Code168 .byte 10 # DW_TAG_label169 .byte 0 # DW_CHILDREN_no170 .byte 3 # DW_AT_name171 .byte 14 # DW_FORM_strp172 .byte 58 # DW_AT_decl_file173 .byte 11 # DW_FORM_data1174 .byte 59 # DW_AT_decl_line175 .byte 11 # DW_FORM_data1176 .byte 17 # DW_AT_low_pc177 .byte 1 # DW_FORM_addr178 .byte 0 # EOM(1)179 .byte 0 # EOM(2)180 .byte 5 # Abbreviation Code181 .byte 36 # DW_TAG_base_type182 .byte 0 # DW_CHILDREN_no183 .byte 3 # DW_AT_name184 .byte 14 # DW_FORM_strp185 .byte 62 # DW_AT_encoding186 .byte 11 # DW_FORM_data1187 .byte 11 # DW_AT_byte_size188 .byte 11 # DW_FORM_data1189 .byte 0 # EOM(1)190 .byte 0 # EOM(2)191 .byte 0 # EOM(3)192 .section .debug_info,"",@progbits193.Lcu_begin0:194 .long .Ldebug_info_end0-.Ldebug_info_start0 # Length of Unit195.Ldebug_info_start0:196 .short 4 # DWARF version number197 .long .debug_abbrev # Offset Into Abbrev. Section198 .byte 8 # Address Size (in bytes)199 .byte 1 # Abbrev [1] 0xb:0x6d DW_TAG_compile_unit200 .long .Linfo_string0 # DW_AT_producer201 .short 33 # DW_AT_language202 .long .Linfo_string1 # DW_AT_name203 .long .Lline_table_start0 # DW_AT_stmt_list204 .long .Linfo_string2 # DW_AT_comp_dir205 .quad .Lfunc_begin0 # DW_AT_low_pc206 .long .Lfunc_end0-.Lfunc_begin0 # DW_AT_high_pc207 .byte 2 # Abbrev [2] 0x2a:0x46 DW_TAG_subprogram208 .quad .Lfunc_begin0 # DW_AT_low_pc209 .long .Lfunc_end0-.Lfunc_begin0 # DW_AT_high_pc210 .byte 1 # DW_AT_frame_base211 .byte 86212 .long .Linfo_string3 # DW_AT_name213 .byte 1 # DW_AT_decl_file214 .byte 1 # DW_AT_decl_line215 .long 112 # DW_AT_type216 # DW_AT_external217 .byte 3 # Abbrev [3] 0x43:0xe DW_TAG_variable218 .byte 2 # DW_AT_location219 .byte 145220 .byte 120221 .long .Linfo_string5 # DW_AT_name222 .byte 1 # DW_AT_decl_file223 .byte 2 # DW_AT_decl_line224 .long 112 # DW_AT_type225 .byte 4 # Abbrev [4] 0x51:0xf DW_TAG_label226 .long .Linfo_string6 # DW_AT_name227 .byte 1 # DW_AT_decl_file228 .byte 7 # DW_AT_decl_line229 .quad .Ltmp4 # DW_AT_low_pc230 .byte 4 # Abbrev [4] 0x60:0xf DW_TAG_label231 .long .Linfo_string7 # DW_AT_name232 .byte 1 # DW_AT_decl_file233 .byte 8 # DW_AT_decl_line234 .quad .Ltmp5 # DW_AT_low_pc235 .byte 0 # End Of Children Mark236 .byte 5 # Abbrev [5] 0x70:0x7 DW_TAG_base_type237 .long .Linfo_string4 # DW_AT_name238 .byte 5 # DW_AT_encoding239 .byte 4 # DW_AT_byte_size240 .byte 0 # End Of Children Mark241.Ldebug_info_end0:242 .section .debug_str,"MS",@progbits,1243.Linfo_string0:244 .asciz "clang version 19.0.0git" # string offset=0245.Linfo_string1:246 .asciz "main.cpp" # string offset=24247.Linfo_string2:248 .asciz "/home" # string offset=33249.Linfo_string3:250 .asciz "main" # string offset=71251.Linfo_string4:252 .asciz "int" # string offset=76253.Linfo_string5:254 .asciz "a" # string offset=80255.Linfo_string6:256 .asciz "LABEL1" # string offset=82257.Linfo_string7:258 .asciz "LABEL2" # string offset=89259 .ident "clang version 19.0.0git"260 .section ".note.GNU-stack","",@progbits261 .addrsig262 .section .debug_line,"",@progbits263.Lline_table_start0:264