blob: 76a97e72bb735cdeff36109c611eccda857b5eb6 [file] [log] [blame]
# REQUIRES: x86
# RUN: split-file %s %t
# RUN: llvm-mc --triple=x86_64-pc-linux -filetype=obj %t/a.s -o %t/a.o
# RUN: %lldb %t/a.o -o "settings set target.source-map . %t" \
# RUN: -o "settings set interpreter.stop-command-source-on-error false" \
# RUN: -s %t/commands -o exit 2>&1 | FileCheck %s
#--- commands
# CASE 0: function at the start of the file
source list -n func0
# CHECK-LABEL: source list -n func0
# CHECK-NEXT: File: file0.c
# CHECK-NEXT: 1 content of file0.c:1
# CHECK-NEXT: 2 content of file0.c:2
# CHECK-NEXT: 3 content of file0.c:3
# CHECK-NEXT: 4 content of file0.c:4
# CHECK-NEXT: 5 content of file0.c:5
# CHECK-NEXT: 6 content of file0.c:6
# CHECK-NEXT: 7 content of file0.c:7
# CHECK-NEXT: 8 content of file0.c:8
# CHECK-NEXT: 9 content of file0.c:9
# CHECK-NEXT: 10 content of file0.c:10
# CASE 1: function in the middle of the file
source list -n func1
# CHECK-NEXT: source list -n func1
# CHECK-NEXT: File: file0.c
# CHECK-NEXT: 5 content of file0.c:5
# CHECK-NEXT: 6 content of file0.c:6
# CHECK-NEXT: 7 content of file0.c:7
# CHECK-NEXT: 8 content of file0.c:8
# CHECK-NEXT: 9 content of file0.c:9
# CHECK-NEXT: 10 content of file0.c:10
# CHECK-NEXT: 11 content of file0.c:11
# CHECK-NEXT: 12 content of file0.c:12
# CHECK-NEXT: 13 content of file0.c:13
# CHECK-NEXT: 14 content of file0.c:14
# CHECK-NEXT: 15 content of file0.c:15
# CHECK-NEXT: 16 content of file0.c:16
# CHECK-NEXT: 17 content of file0.c:17
# CASE 2: function at the end of the file
source list -n func2
# CHECK-NEXT: source list -n func2
# CHECK-NEXT: File: file0.c
# CHECK-NEXT: 20 content of file0.c:20
# CHECK-NEXT: 21 content of file0.c:21
# CHECK-NEXT: 22 content of file0.c:22
# CHECK-NEXT: 23 content of file0.c:23
# CHECK-NEXT: 24 content of file0.c:24
# CHECK-NEXT: 25 content of file0.c:25
# CHECK-NEXT: 26 content of file0.c:26
# CHECK-NEXT: 27 content of file0.c:27
# CHECK-NEXT: 28 content of file0.c:28
# CHECK-NEXT: 29 content of file0.c:29
# CHECK-NEXT: 30 content of file0.c:30
# CASE 3: function ends in a different file
source list -n func3
# CHECK-NEXT: source list -n func3
# CHECK-NEXT: File: file0.c
# CHECK-NEXT: 1 content of file0.c:1
# CHECK-NEXT: 2 content of file0.c:2
# CHECK-NEXT: 3 content of file0.c:3
# CHECK-NEXT: 4 content of file0.c:4
# CHECK-NEXT: 5 content of file0.c:5
# CHECK-NEXT: 6 content of file0.c:6
# CHECK-NEXT: 7 content of file0.c:7
# CHECK-NEXT: 8 content of file0.c:8
# CHECK-NEXT: 9 content of file0.c:9
# CHECK-NEXT: 10 content of file0.c:10
# CASE 4: function has no line entry with line!=0
source list -n func4
# CHECK-LABEL: source list -n func4
# CHECK: error: Could not find line information for function "func4".
# CASE 5: discontinuous function
source list -n func5
# CHECK-LABEL: source list -n func5
# CHECK-NEXT: File: file0.c
# CHECK-NEXT: 1 content of file0.c:1
# CHECK-NEXT: 2 content of file0.c:2
# CHECK-NEXT: 3 content of file0.c:3
# CHECK-NEXT: 4 content of file0.c:4
# CHECK-NEXT: 5 content of file0.c:5
# CHECK-NEXT: 6 content of file0.c:6
# CHECK-NEXT: 7 content of file0.c:7
# CHECK-NEXT: 8 content of file0.c:8
# CHECK-NEXT: 9 content of file0.c:9
# CHECK-NEXT: 10 content of file0.c:10
#--- a.s
.file 0 "." "file0.c"
.file 1 "." "file1.c"
.text
func0:
.loc 0 1
nop
.loc 0 5
nop
.Lfunc0_end:
func1:
.loc 0 10
nop
.loc 0 12
nop
.Lfunc1_end:
func2:
.loc 0 25
nop
.loc 0 30
nop
.Lfunc2_end:
func3:
.loc 0 1
nop
.loc 0 5
nop
.loc 1 5
nop
.Lfunc3_end:
func4:
.loc 0 0
nop
.Lfunc4_end:
func5.__part.1:
.loc 0 1
nop
.Lfunc5.__part.1_end:
.Lpadding:
nop
func5:
.loc 0 5
nop
.Lfunc5_end:
.Ltext_end:
.section .debug_abbrev,"",@progbits
.byte 1 # Abbreviation Code
.byte 17 # DW_TAG_compile_unit
.byte 1 # DW_CHILDREN_yes
.byte 3 # DW_AT_name
.byte 8 # DW_FORM_string
.byte 37 # DW_AT_producer
.byte 8 # DW_FORM_string
.byte 19 # DW_AT_language
.byte 5 # DW_FORM_data2
.byte 17 # DW_AT_low_pc
.byte 1 # DW_FORM_addr
.byte 18 # DW_AT_high_pc
.byte 1 # DW_FORM_addr
.byte 16 # DW_AT_stmt_list
.byte 23 # DW_FORM_sec_offset
.byte 0 # EOM(1)
.byte 0 # EOM(2)
.byte 2 # Abbreviation Code
.byte 46 # DW_TAG_subprogram
.byte 0 # DW_CHILDREN_no
.byte 17 # DW_AT_low_pc
.byte 1 # DW_FORM_addr
.byte 18 # DW_AT_high_pc
.byte 1 # DW_FORM_addr
.byte 3 # DW_AT_name
.byte 8 # DW_FORM_string
.byte 0 # EOM(1)
.byte 0 # EOM(2)
.byte 3 # Abbreviation Code
.byte 46 # DW_TAG_subprogram
.byte 0 # DW_CHILDREN_no
.byte 85 # DW_AT_ranges
.byte 23 # DW_FORM_sec_offset
.byte 3 # DW_AT_name
.byte 8 # DW_FORM_string
.byte 0 # EOM(1)
.byte 0 # EOM(2)
.byte 0 # EOM(3)
.section .debug_info,"",@progbits
.Lcu_begin0:
.long .Ldebug_info_end0-.Ldebug_info_start0 # Length of Unit
.Ldebug_info_start0:
.short 5 # DWARF version number
.byte 1 # DWARF Unit Type
.byte 8 # Address Size (in bytes)
.long .debug_abbrev # Offset Into Abbrev. Section
.byte 1 # Abbrev DW_TAG_compile_unit
.asciz "file0.c" # DW_AT_producer
.asciz "Hand-written DWARF" # DW_AT_producer
.short 29 # DW_AT_language
.quad .text # DW_AT_low_pc
.quad .Ltext_end # DW_AT_high_pc
.long .Lline_table_start0 # DW_AT_stmt_list
.rept 5
.byte 2 # Abbrev DW_TAG_subprogram
.quad func\+ # DW_AT_low_pc
.quad .Lfunc\+_end # DW_AT_high_pc
.asciz "func\+" # DW_AT_name
.endr
.byte 3 # Abbrev DW_TAG_subprogram
.long .Ldebug_ranges0
.asciz "func5" # DW_AT_name
.byte 0 # End Of Children Mark
.Ldebug_info_end0:
.section .debug_rnglists,"",@progbits
.long .Ldebug_list_header_end0-.Ldebug_list_header_start0 # Length
.Ldebug_list_header_start0:
.short 5 # Version
.byte 8 # Address size
.byte 0 # Segment selector size
.long 2 # Offset entry count
.Lrnglists_table_base0:
.long .Ldebug_ranges0-.Lrnglists_table_base0
.Ldebug_ranges0:
.byte 6 # DW_RLE_start_end
.quad func5
.quad .Lfunc5_end
.byte 6 # DW_RLE_start_end
.quad func5.__part.1
.quad .Lfunc5.__part.1_end
.byte 0 # DW_RLE_end_of_list
.Ldebug_list_header_end0:
.section .debug_line,"",@progbits
.Lline_table_start0:
#--- file0.c
content of file0.c:1
content of file0.c:2
content of file0.c:3
content of file0.c:4
content of file0.c:5
content of file0.c:6
content of file0.c:7
content of file0.c:8
content of file0.c:9
content of file0.c:10
content of file0.c:11
content of file0.c:12
content of file0.c:13
content of file0.c:14
content of file0.c:15
content of file0.c:16
content of file0.c:17
content of file0.c:18
content of file0.c:19
content of file0.c:20
content of file0.c:21
content of file0.c:22
content of file0.c:23
content of file0.c:24
content of file0.c:25
content of file0.c:26
content of file0.c:27
content of file0.c:28
content of file0.c:29
content of file0.c:30
#--- file1.c
content of file1.c:1
content of file1.c:2
content of file1.c:3
content of file1.c:4
content of file1.c:5
content of file1.c:6
content of file1.c:7
content of file1.c:8
content of file1.c:9
content of file1.c:10