1*8a64d80aSDavid Spickett# Test handling of DWARF5 line tables. In particular, test that we handle files 2*8a64d80aSDavid Spickett# which are present in the line table more than once. 3*8a64d80aSDavid Spickett 4*8a64d80aSDavid Spickett# RUN: llvm-mc -filetype=obj -o %t -triple x86_64-pc-linux %s 5*8a64d80aSDavid Spickett# RUN: %lldb %t -o "source info -f file0.c" -o "source info -f file1.c" \ 6*8a64d80aSDavid Spickett# RUN: -o "breakpoint set -f file0.c -l 42" \ 7*8a64d80aSDavid Spickett# RUN: -o "breakpoint set -f file0.c -l 47" \ 8*8a64d80aSDavid Spickett# RUN: -o exit | FileCheck %s 9*8a64d80aSDavid Spickett 10*8a64d80aSDavid Spickett# CHECK-LABEL: source info -f file0.c 11*8a64d80aSDavid Spickett# CHECK: [0x0000000000000000-0x0000000000000001): /file0.c:42 12*8a64d80aSDavid Spickett# CHECK-LABEL: source info -f file1.c 13*8a64d80aSDavid Spickett# CHECK: [0x0000000000000001-0x0000000000000002): /file1.c:47 14*8a64d80aSDavid Spickett# CHECK-LABEL: breakpoint set -f file0.c -l 42 15*8a64d80aSDavid Spickett# CHECK: Breakpoint 1: {{.*}}`foo, 16*8a64d80aSDavid Spickett# CHECK-LABEL: breakpoint set -f file0.c -l 47 17*8a64d80aSDavid Spickett# CHECK: Breakpoint 2: {{.*}}`foo + 2, 18*8a64d80aSDavid Spickett 19*8a64d80aSDavid Spickett .text 20*8a64d80aSDavid Spickett .globl foo 21*8a64d80aSDavid Spickettfoo: 22*8a64d80aSDavid Spickett nop 23*8a64d80aSDavid Spickett nop 24*8a64d80aSDavid Spickett nop 25*8a64d80aSDavid Spickett.Lfoo_end: 26*8a64d80aSDavid Spickett 27*8a64d80aSDavid Spickett .section .debug_abbrev,"",@progbits 28*8a64d80aSDavid Spickett .byte 1 # Abbreviation Code 29*8a64d80aSDavid Spickett .byte 17 # DW_TAG_compile_unit 30*8a64d80aSDavid Spickett .byte 0 # DW_CHILDREN_no 31*8a64d80aSDavid Spickett .byte 37 # DW_AT_producer 32*8a64d80aSDavid Spickett .byte 8 # DW_FORM_string 33*8a64d80aSDavid Spickett .byte 19 # DW_AT_language 34*8a64d80aSDavid Spickett .byte 5 # DW_FORM_data2 35*8a64d80aSDavid Spickett .byte 3 # DW_AT_name 36*8a64d80aSDavid Spickett .byte 8 # DW_FORM_string 37*8a64d80aSDavid Spickett .byte 16 # DW_AT_stmt_list 38*8a64d80aSDavid Spickett .byte 23 # DW_FORM_sec_offset 39*8a64d80aSDavid Spickett .byte 27 # DW_AT_comp_dir 40*8a64d80aSDavid Spickett .byte 8 # DW_FORM_string 41*8a64d80aSDavid Spickett .byte 17 # DW_AT_low_pc 42*8a64d80aSDavid Spickett .byte 1 # DW_FORM_addr 43*8a64d80aSDavid Spickett .byte 18 # DW_AT_high_pc 44*8a64d80aSDavid Spickett .byte 6 # DW_FORM_data4 45*8a64d80aSDavid Spickett .byte 0 # EOM(1) 46*8a64d80aSDavid Spickett .byte 0 # EOM(2) 47*8a64d80aSDavid Spickett .byte 0 # EOM(3) 48*8a64d80aSDavid Spickett 49*8a64d80aSDavid Spickett .section .debug_info,"",@progbits 50*8a64d80aSDavid Spickett.Lcu_begin0: 51*8a64d80aSDavid Spickett .long .Ldebug_info_end0-.Ldebug_info_start0 # Length of Unit 52*8a64d80aSDavid Spickett.Ldebug_info_start0: 53*8a64d80aSDavid Spickett .short 5 # DWARF version number 54*8a64d80aSDavid Spickett .byte 1 # DWARF Unit Type 55*8a64d80aSDavid Spickett .byte 8 # Address Size (in bytes) 56*8a64d80aSDavid Spickett .long .debug_abbrev # Offset Into Abbrev. Section 57*8a64d80aSDavid Spickett .byte 1 # Abbrev [1] 0xc:0x23 DW_TAG_compile_unit 58*8a64d80aSDavid Spickett .asciz "Hand-written DWARF" # DW_AT_producer 59*8a64d80aSDavid Spickett .short 12 # DW_AT_language 60*8a64d80aSDavid Spickett .asciz "file0.c" # DW_AT_name 61*8a64d80aSDavid Spickett .long .Lline_table_begin # DW_AT_stmt_list 62*8a64d80aSDavid Spickett .asciz "/" # DW_AT_comp_dir 63*8a64d80aSDavid Spickett .quad foo # DW_AT_low_pc 64*8a64d80aSDavid Spickett .long .Lfoo_end-foo # DW_AT_high_pc 65*8a64d80aSDavid Spickett.Ldebug_info_end0: 66*8a64d80aSDavid Spickett 67*8a64d80aSDavid Spickett .section .debug_line,"",@progbits 68*8a64d80aSDavid Spickett.Lline_table_begin: 69*8a64d80aSDavid Spickett .long .Lline_end-.Lline_start 70*8a64d80aSDavid Spickett.Lline_start: 71*8a64d80aSDavid Spickett .short 5 # DWARF version number 72*8a64d80aSDavid Spickett .byte 8 # Address Size (in bytes) 73*8a64d80aSDavid Spickett .byte 0 # Segment Selector Size 74*8a64d80aSDavid Spickett .long .Lheader_end-.Lheader_start 75*8a64d80aSDavid Spickett.Lheader_start: 76*8a64d80aSDavid Spickett .byte 1 # Minimum Instruction Length 77*8a64d80aSDavid Spickett .byte 1 # Maximum Operations per Instruction 78*8a64d80aSDavid Spickett .byte 1 # Default is_stmt 79*8a64d80aSDavid Spickett .byte 0 # Line Base 80*8a64d80aSDavid Spickett .byte 0 # Line Range 81*8a64d80aSDavid Spickett .byte 5 # Opcode Base 82*8a64d80aSDavid Spickett .byte 0, 1, 1, 1 # Standard Opcode Lengths 83*8a64d80aSDavid Spickett 84*8a64d80aSDavid Spickett # Directory table format 85*8a64d80aSDavid Spickett .byte 1 # One element per directory entry 86*8a64d80aSDavid Spickett .byte 1 # DW_LNCT_path 87*8a64d80aSDavid Spickett .byte 0x08 # DW_FORM_string 88*8a64d80aSDavid Spickett 89*8a64d80aSDavid Spickett # Directory table entries 90*8a64d80aSDavid Spickett .byte 1 # 1 directory 91*8a64d80aSDavid Spickett .asciz "/" 92*8a64d80aSDavid Spickett 93*8a64d80aSDavid Spickett # File table format 94*8a64d80aSDavid Spickett .byte 2 # 2 elements per file entry 95*8a64d80aSDavid Spickett .byte 1 # DW_LNCT_path 96*8a64d80aSDavid Spickett .byte 0x08 # DW_FORM_string 97*8a64d80aSDavid Spickett .byte 2 # DW_LNCT_directory_index 98*8a64d80aSDavid Spickett .byte 0x0b # DW_FORM_data1 99*8a64d80aSDavid Spickett 100*8a64d80aSDavid Spickett # File table entries 101*8a64d80aSDavid Spickett .byte 3 # 3 files 102*8a64d80aSDavid Spickett .asciz "file0.c" 103*8a64d80aSDavid Spickett .byte 0 104*8a64d80aSDavid Spickett .asciz "file1.c" 105*8a64d80aSDavid Spickett .byte 0 106*8a64d80aSDavid Spickett .asciz "file0.c" 107*8a64d80aSDavid Spickett .byte 0 108*8a64d80aSDavid Spickett.Lheader_end: 109*8a64d80aSDavid Spickett 110*8a64d80aSDavid Spickett .byte 4, 0 # DW_LNS_set_file 0 111*8a64d80aSDavid Spickett .byte 0, 9, 2 # DW_LNE_set_address 112*8a64d80aSDavid Spickett .quad foo 113*8a64d80aSDavid Spickett .byte 3, 41 # DW_LNS_advance_line 41 114*8a64d80aSDavid Spickett .byte 1 # DW_LNS_copy 115*8a64d80aSDavid Spickett 116*8a64d80aSDavid Spickett .byte 4, 1 # DW_LNS_set_file 1 117*8a64d80aSDavid Spickett .byte 2, 1 # DW_LNS_advance_pc 1 118*8a64d80aSDavid Spickett .byte 3, 5 # DW_LNS_advance_line 5 119*8a64d80aSDavid Spickett .byte 1 # DW_LNS_copy 120*8a64d80aSDavid Spickett 121*8a64d80aSDavid Spickett .byte 4, 2 # DW_LNS_set_file 2 122*8a64d80aSDavid Spickett .byte 2, 1 # DW_LNS_advance_pc 1 123*8a64d80aSDavid Spickett .byte 1 # DW_LNS_copy 124*8a64d80aSDavid Spickett 125*8a64d80aSDavid Spickett .byte 2, 1 # DW_LNS_advance_pc 1 126*8a64d80aSDavid Spickett .byte 0, 1, 1 # DW_LNE_end_sequence 127*8a64d80aSDavid Spickett.Lline_end: 128