1*df6d0579SAlex Orlov## This test checks how we handle parsing a broken DWARF when 2*df6d0579SAlex Orlov## a parent of DW_TAG_inlined_subroutine is anything other than DW_TAG_subprogram. 3*df6d0579SAlex Orlov 4*df6d0579SAlex Orlov# REQUIRES: x86-registered-target 5*df6d0579SAlex Orlov 6*df6d0579SAlex Orlov# RUN: llvm-mc -filetype=obj -triple=i386-linux-gnu -o %t.o %s 7*df6d0579SAlex Orlov# RUN: llvm-symbolizer "CODE %t.o 0" \ 8*df6d0579SAlex Orlov# RUN: | FileCheck %s --strict-whitespace --match-full-lines --implicit-check-not={{.}} 9*df6d0579SAlex Orlov 10*df6d0579SAlex Orlov# CHECK:main 11*df6d0579SAlex Orlov# CHECK-NEXT:/tmp/test{{/|\\}}test.cpp:2:3 12*df6d0579SAlex Orlov 13*df6d0579SAlex Orlov## Generated from: 14*df6d0579SAlex Orlov## 15*df6d0579SAlex Orlov## int main() { 16*df6d0579SAlex Orlov## return 123; 17*df6d0579SAlex Orlov## } 18*df6d0579SAlex Orlov## 19*df6d0579SAlex Orlov## clang++ --target=i386-linux-gnu test.cpp -g -O2 -std=c++11 -S -o test.s 20*df6d0579SAlex Orlov 21*df6d0579SAlex Orlov .text 22*df6d0579SAlex Orlov .file "test.cpp" 23*df6d0579SAlex Orlov .globl main # -- Begin function main 24*df6d0579SAlex Orlov .p2align 4, 0x90 25*df6d0579SAlex Orlov .type main,@function 26*df6d0579SAlex Orlovmain: # @main 27*df6d0579SAlex Orlov.Lfunc_begin0: 28*df6d0579SAlex Orlov .file 1 "/tmp/test" "test.cpp" 29*df6d0579SAlex Orlov .loc 1 1 0 # test.cpp:1:0 30*df6d0579SAlex Orlov .cfi_sections .debug_frame 31*df6d0579SAlex Orlov .cfi_startproc 32*df6d0579SAlex Orlov# %bb.0: # %entry 33*df6d0579SAlex Orlov .loc 1 2 3 prologue_end # test.cpp:2:3 34*df6d0579SAlex Orlov movl $123, %eax 35*df6d0579SAlex Orlov retl 36*df6d0579SAlex Orlov.Ltmp0: 37*df6d0579SAlex Orlov.Lfunc_end0: 38*df6d0579SAlex Orlov .size main, .Lfunc_end0-main 39*df6d0579SAlex Orlov .cfi_endproc 40*df6d0579SAlex Orlov # -- End function 41*df6d0579SAlex Orlov .section .debug_abbrev,"",@progbits 42*df6d0579SAlex Orlov .byte 1 # Abbreviation Code 43*df6d0579SAlex Orlov .byte 17 # DW_TAG_compile_unit 44*df6d0579SAlex Orlov .byte 1 # DW_CHILDREN_yes 45*df6d0579SAlex Orlov .byte 37 # DW_AT_producer 46*df6d0579SAlex Orlov .byte 14 # DW_FORM_strp 47*df6d0579SAlex Orlov .byte 19 # DW_AT_language 48*df6d0579SAlex Orlov .byte 5 # DW_FORM_data2 49*df6d0579SAlex Orlov .byte 3 # DW_AT_name 50*df6d0579SAlex Orlov .byte 14 # DW_FORM_strp 51*df6d0579SAlex Orlov .byte 16 # DW_AT_stmt_list 52*df6d0579SAlex Orlov .byte 23 # DW_FORM_sec_offset 53*df6d0579SAlex Orlov .byte 27 # DW_AT_comp_dir 54*df6d0579SAlex Orlov .byte 14 # DW_FORM_strp 55*df6d0579SAlex Orlov .byte 17 # DW_AT_low_pc 56*df6d0579SAlex Orlov .byte 1 # DW_FORM_addr 57*df6d0579SAlex Orlov .byte 18 # DW_AT_high_pc 58*df6d0579SAlex Orlov .byte 6 # DW_FORM_data4 59*df6d0579SAlex Orlov .byte 0 # EOM(1) 60*df6d0579SAlex Orlov .byte 0 # EOM(2) 61*df6d0579SAlex Orlov .byte 2 # Abbreviation Code 62*df6d0579SAlex Orlov// Replace DW_TAG_subprogram with DW_TAG_inlined_subroutine 63*df6d0579SAlex Orlov// .byte 46 # DW_TAG_subprogram 64*df6d0579SAlex Orlov .byte 29 # DW_TAG_inlined_subroutine 65*df6d0579SAlex Orlov .byte 0 # DW_CHILDREN_no 66*df6d0579SAlex Orlov .byte 17 # DW_AT_low_pc 67*df6d0579SAlex Orlov .byte 1 # DW_FORM_addr 68*df6d0579SAlex Orlov .byte 18 # DW_AT_high_pc 69*df6d0579SAlex Orlov .byte 6 # DW_FORM_data4 70*df6d0579SAlex Orlov .byte 64 # DW_AT_frame_base 71*df6d0579SAlex Orlov .byte 24 # DW_FORM_exprloc 72*df6d0579SAlex Orlov .ascii "\227B" # DW_AT_GNU_all_call_sites 73*df6d0579SAlex Orlov .byte 25 # DW_FORM_flag_present 74*df6d0579SAlex Orlov .byte 3 # DW_AT_name 75*df6d0579SAlex Orlov .byte 14 # DW_FORM_strp 76*df6d0579SAlex Orlov .byte 58 # DW_AT_decl_file 77*df6d0579SAlex Orlov .byte 11 # DW_FORM_data1 78*df6d0579SAlex Orlov .byte 59 # DW_AT_decl_line 79*df6d0579SAlex Orlov .byte 11 # DW_FORM_data1 80*df6d0579SAlex Orlov .byte 73 # DW_AT_type 81*df6d0579SAlex Orlov .byte 19 # DW_FORM_ref4 82*df6d0579SAlex Orlov .byte 63 # DW_AT_external 83*df6d0579SAlex Orlov .byte 25 # DW_FORM_flag_present 84*df6d0579SAlex Orlov .byte 0 # EOM(1) 85*df6d0579SAlex Orlov .byte 0 # EOM(2) 86*df6d0579SAlex Orlov .byte 3 # Abbreviation Code 87*df6d0579SAlex Orlov .byte 36 # DW_TAG_base_type 88*df6d0579SAlex Orlov .byte 0 # DW_CHILDREN_no 89*df6d0579SAlex Orlov .byte 3 # DW_AT_name 90*df6d0579SAlex Orlov .byte 14 # DW_FORM_strp 91*df6d0579SAlex Orlov .byte 62 # DW_AT_encoding 92*df6d0579SAlex Orlov .byte 11 # DW_FORM_data1 93*df6d0579SAlex Orlov .byte 11 # DW_AT_byte_size 94*df6d0579SAlex Orlov .byte 11 # DW_FORM_data1 95*df6d0579SAlex Orlov .byte 0 # EOM(1) 96*df6d0579SAlex Orlov .byte 0 # EOM(2) 97*df6d0579SAlex Orlov .byte 0 # EOM(3) 98*df6d0579SAlex Orlov .section .debug_info,"",@progbits 99*df6d0579SAlex Orlov.Lcu_begin0: 100*df6d0579SAlex Orlov .long .Ldebug_info_end0-.Ldebug_info_start0 # Length of Unit 101*df6d0579SAlex Orlov.Ldebug_info_start0: 102*df6d0579SAlex Orlov .short 4 # DWARF version number 103*df6d0579SAlex Orlov .long .debug_abbrev # Offset Into Abbrev. Section 104*df6d0579SAlex Orlov .byte 4 # Address Size (in bytes) 105*df6d0579SAlex Orlov .byte 1 # Abbrev [1] 0xb:0x38 DW_TAG_compile_unit 106*df6d0579SAlex Orlov .long .Linfo_string0 # DW_AT_producer 107*df6d0579SAlex Orlov .short 26 # DW_AT_language 108*df6d0579SAlex Orlov .long .Linfo_string1 # DW_AT_name 109*df6d0579SAlex Orlov .long .Lline_table_start0 # DW_AT_stmt_list 110*df6d0579SAlex Orlov .long .Linfo_string2 # DW_AT_comp_dir 111*df6d0579SAlex Orlov .long .Lfunc_begin0 # DW_AT_low_pc 112*df6d0579SAlex Orlov .long .Lfunc_end0-.Lfunc_begin0 # DW_AT_high_pc 113*df6d0579SAlex Orlov .byte 2 # Abbrev [2] 0x26:0x15 DW_TAG_subprogram 114*df6d0579SAlex Orlov .long .Lfunc_begin0 # DW_AT_low_pc 115*df6d0579SAlex Orlov .long .Lfunc_end0-.Lfunc_begin0 # DW_AT_high_pc 116*df6d0579SAlex Orlov .byte 1 # DW_AT_frame_base 117*df6d0579SAlex Orlov .byte 84 118*df6d0579SAlex Orlov # DW_AT_GNU_all_call_sites 119*df6d0579SAlex Orlov .long .Linfo_string3 # DW_AT_name 120*df6d0579SAlex Orlov .byte 1 # DW_AT_decl_file 121*df6d0579SAlex Orlov .byte 1 # DW_AT_decl_line 122*df6d0579SAlex Orlov .long 59 # DW_AT_type 123*df6d0579SAlex Orlov # DW_AT_external 124*df6d0579SAlex Orlov .byte 3 # Abbrev [3] 0x3b:0x7 DW_TAG_base_type 125*df6d0579SAlex Orlov .long .Linfo_string4 # DW_AT_name 126*df6d0579SAlex Orlov .byte 5 # DW_AT_encoding 127*df6d0579SAlex Orlov .byte 4 # DW_AT_byte_size 128*df6d0579SAlex Orlov .byte 0 # End Of Children Mark 129*df6d0579SAlex Orlov.Ldebug_info_end0: 130*df6d0579SAlex Orlov .section .debug_str,"MS",@progbits,1 131*df6d0579SAlex Orlov.Linfo_string0: 132*df6d0579SAlex Orlov .asciz "clang version 13.0.0" 133*df6d0579SAlex Orlov.Linfo_string1: 134*df6d0579SAlex Orlov .asciz "test.cpp" 135*df6d0579SAlex Orlov.Linfo_string2: 136*df6d0579SAlex Orlov .asciz "/tmp/test" # string offset=114 137*df6d0579SAlex Orlov.Linfo_string3: 138*df6d0579SAlex Orlov .asciz "main" 139*df6d0579SAlex Orlov.Linfo_string4: 140*df6d0579SAlex Orlov .asciz "int" 141*df6d0579SAlex Orlov .ident "clang version 13.0.0" 142*df6d0579SAlex Orlov .section ".note.GNU-stack","",@progbits 143*df6d0579SAlex Orlov .addrsig 144*df6d0579SAlex Orlov .section .debug_line,"",@progbits 145*df6d0579SAlex Orlov.Lline_table_start0: 146