1*8a64d80aSDavid Spickett# Test basics of debug_line parsing. This test uses a linker script which 2*8a64d80aSDavid Spickett# ensures the code is placed at the end of a module to test the boundary 3*8a64d80aSDavid Spickett# condition when the final end-of-sequence line table entry points to an address 4*8a64d80aSDavid Spickett# that is outside the range of memory covered by the module. 5*8a64d80aSDavid Spickett 6*8a64d80aSDavid Spickett# REQUIRES: lld 7*8a64d80aSDavid Spickett 8*8a64d80aSDavid Spickett# RUN: llvm-mc -triple x86_64-pc-linux %s -filetype=obj > %t.o 9*8a64d80aSDavid Spickett# RUN: ld.lld --script=%S/Inputs/debug-line-basic.script %t.o -o %t 10*8a64d80aSDavid Spickett# RUN: %lldb %t -o "image dump line-table -v a.c" -o exit | FileCheck %s 11*8a64d80aSDavid Spickett 12*8a64d80aSDavid Spickett .text 13*8a64d80aSDavid Spickett .globl _start 14*8a64d80aSDavid Spickett_start: 15*8a64d80aSDavid Spickett# CHECK: Line table for /tmp/a.c 16*8a64d80aSDavid Spickett .file 1 "/tmp/b.c" 17*8a64d80aSDavid Spickett .loc 1 0 0 18*8a64d80aSDavid Spickett nop 19*8a64d80aSDavid Spickett# CHECK-NEXT: 0x0000000000201000: /tmp/b.c, is_start_of_statement = TRUE{{$}} 20*8a64d80aSDavid Spickett .loc 1 1 0 21*8a64d80aSDavid Spickett nop 22*8a64d80aSDavid Spickett# CHECK-NEXT: 0x0000000000201001: /tmp/b.c:1, is_start_of_statement = TRUE{{$}} 23*8a64d80aSDavid Spickett .loc 1 1 1 24*8a64d80aSDavid Spickett nop 25*8a64d80aSDavid Spickett# CHECK-NEXT: 0x0000000000201002: /tmp/b.c:1:1, is_start_of_statement = TRUE{{$}} 26*8a64d80aSDavid Spickett .loc 1 2 0 is_stmt 0 27*8a64d80aSDavid Spickett nop 28*8a64d80aSDavid Spickett# CHECK-NEXT: 0x0000000000201003: /tmp/b.c:2{{$}} 29*8a64d80aSDavid Spickett .loc 1 2 0 is_stmt 0 basic_block 30*8a64d80aSDavid Spickett nop 31*8a64d80aSDavid Spickett# CHECK-NEXT: 0x0000000000201004: /tmp/b.c:2, is_start_of_basic_block = TRUE{{$}} 32*8a64d80aSDavid Spickett .loc 1 2 0 is_stmt 0 prologue_end 33*8a64d80aSDavid Spickett nop 34*8a64d80aSDavid Spickett# CHECK-NEXT: 0x0000000000201005: /tmp/b.c:2, is_prologue_end = TRUE{{$}} 35*8a64d80aSDavid Spickett .loc 1 2 0 is_stmt 0 epilogue_begin 36*8a64d80aSDavid Spickett nop 37*8a64d80aSDavid Spickett# CHECK-NEXT: 0x0000000000201006: /tmp/b.c:2, is_epilogue_begin = TRUE{{$}} 38*8a64d80aSDavid Spickett .file 2 "/tmp/c.c" 39*8a64d80aSDavid Spickett .loc 2 1 0 is_stmt 0 40*8a64d80aSDavid Spickett nop 41*8a64d80aSDavid Spickett# CHECK-NEXT: 0x0000000000201007: /tmp/c.c:1{{$}} 42*8a64d80aSDavid Spickett# CHECK-NEXT: 0x0000000000201008: /tmp/c.c:1, is_terminal_entry = TRUE{{$}} 43*8a64d80aSDavid Spickett 44*8a64d80aSDavid Spickett .section .text.f,"ax",@progbits 45*8a64d80aSDavid Spickettf: 46*8a64d80aSDavid Spickett .loc 1 3 0 is_stmt 0 47*8a64d80aSDavid Spickett nop 48*8a64d80aSDavid Spickett# CHECK-NEXT: 0x0000000000201008: /tmp/b.c:3{{$}} 49*8a64d80aSDavid Spickett# CHECK-NEXT: 0x0000000000201009: /tmp/b.c:3, is_terminal_entry = TRUE{{$}} 50*8a64d80aSDavid Spickett 51*8a64d80aSDavid Spickett 52*8a64d80aSDavid Spickett .section .debug_str,"MS",@progbits,1 53*8a64d80aSDavid Spickett.Linfo_string1: 54*8a64d80aSDavid Spickett .asciz "a.c" 55*8a64d80aSDavid Spickett.Linfo_string2: 56*8a64d80aSDavid Spickett .asciz "/tmp" 57*8a64d80aSDavid Spickett .section .debug_abbrev,"",@progbits 58*8a64d80aSDavid Spickett .byte 1 # Abbreviation Code 59*8a64d80aSDavid Spickett .byte 17 # DW_TAG_compile_unit 60*8a64d80aSDavid Spickett .byte 0 # DW_CHILDREN_no 61*8a64d80aSDavid Spickett .byte 19 # DW_AT_language 62*8a64d80aSDavid Spickett .byte 5 # DW_FORM_data2 63*8a64d80aSDavid Spickett .byte 3 # DW_AT_name 64*8a64d80aSDavid Spickett .byte 14 # DW_FORM_strp 65*8a64d80aSDavid Spickett .byte 16 # DW_AT_stmt_list 66*8a64d80aSDavid Spickett .byte 23 # DW_FORM_sec_offset 67*8a64d80aSDavid Spickett .byte 27 # DW_AT_comp_dir 68*8a64d80aSDavid Spickett .byte 14 # DW_FORM_strp 69*8a64d80aSDavid Spickett .byte 0 # EOM(1) 70*8a64d80aSDavid Spickett .byte 0 # EOM(2) 71*8a64d80aSDavid Spickett .byte 0 # EOM(3) 72*8a64d80aSDavid Spickett .section .debug_info,"",@progbits 73*8a64d80aSDavid Spickett.Lcu_begin0: 74*8a64d80aSDavid Spickett .long .Lcu_end0-.Lcu_start0 # Length of Unit 75*8a64d80aSDavid Spickett.Lcu_start0: 76*8a64d80aSDavid Spickett .short 4 # DWARF version number 77*8a64d80aSDavid Spickett .long .debug_abbrev # Offset Into Abbrev. Section 78*8a64d80aSDavid Spickett .byte 8 # Address Size (in bytes) 79*8a64d80aSDavid Spickett .byte 1 # Abbrev [1] 0xb:0x1f DW_TAG_compile_unit 80*8a64d80aSDavid Spickett .short 12 # DW_AT_language 81*8a64d80aSDavid Spickett .long .Linfo_string1 # DW_AT_name 82*8a64d80aSDavid Spickett .long .Lline_table_start0 # DW_AT_stmt_list 83*8a64d80aSDavid Spickett .long .Linfo_string2 # DW_AT_comp_dir 84*8a64d80aSDavid Spickett.Lcu_end0: 85*8a64d80aSDavid Spickett .section .debug_line,"",@progbits 86*8a64d80aSDavid Spickett.Lline_table_start0: 87