130 lines
		
	
	
		
			5.3 KiB
		
	
	
	
		
			ArmAsm
		
	
	
	
			
		
		
	
	
			130 lines
		
	
	
		
			5.3 KiB
		
	
	
	
		
			ArmAsm
		
	
	
	
| # Test handling of DWARF5 line tables. In particular, test that we handle files
 | |
| # which are present in the line table more than once.
 | |
| 
 | |
| # REQUIRES: x86
 | |
| 
 | |
| # RUN: llvm-mc -filetype=obj -o %t -triple x86_64-pc-linux %s
 | |
| # RUN: %lldb %t -o "source info -f file0.c" -o "source info -f file1.c" \
 | |
| # RUN:   -o "breakpoint set -f file0.c -l 42" \
 | |
| # RUN:   -o "breakpoint set -f file0.c -l 47" \
 | |
| # RUN:   -o exit | FileCheck %s
 | |
| 
 | |
| # CHECK-LABEL: source info -f file0.c
 | |
| # CHECK: [0x0000000000000000-0x0000000000000001): /file0.c:42
 | |
| # CHECK-LABEL: source info -f file1.c
 | |
| # CHECK: [0x0000000000000001-0x0000000000000002): /file1.c:47
 | |
| # CHECK-LABEL: breakpoint set -f file0.c -l 42
 | |
| # CHECK: Breakpoint 1: {{.*}}`foo,
 | |
| # CHECK-LABEL: breakpoint set -f file0.c -l 47
 | |
| # CHECK: Breakpoint 2: {{.*}}`foo + 2,
 | |
| 
 | |
|         .text
 | |
|         .globl  foo
 | |
| foo:
 | |
|         nop
 | |
|         nop
 | |
|         nop
 | |
| .Lfoo_end:
 | |
| 
 | |
|         .section        .debug_abbrev,"",@progbits
 | |
|         .byte   1                       # Abbreviation Code
 | |
|         .byte   17                      # DW_TAG_compile_unit
 | |
|         .byte   0                       # DW_CHILDREN_no
 | |
|         .byte   37                      # DW_AT_producer
 | |
|         .byte   8                       # DW_FORM_string
 | |
|         .byte   19                      # DW_AT_language
 | |
|         .byte   5                       # DW_FORM_data2
 | |
|         .byte   3                       # DW_AT_name
 | |
|         .byte   8                       # DW_FORM_string
 | |
|         .byte   16                      # DW_AT_stmt_list
 | |
|         .byte   23                      # DW_FORM_sec_offset
 | |
|         .byte   27                      # DW_AT_comp_dir
 | |
|         .byte   8                       # DW_FORM_string
 | |
|         .byte   17                      # DW_AT_low_pc
 | |
|         .byte   1                       # DW_FORM_addr
 | |
|         .byte   18                      # DW_AT_high_pc
 | |
|         .byte   6                       # DW_FORM_data4
 | |
|         .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 [1] 0xc:0x23 DW_TAG_compile_unit
 | |
|         .asciz  "Hand-written DWARF"    # DW_AT_producer
 | |
|         .short  12                      # DW_AT_language
 | |
|         .asciz  "file0.c"               # DW_AT_name
 | |
|         .long   .Lline_table_begin      # DW_AT_stmt_list
 | |
|         .asciz  "/"                     # DW_AT_comp_dir
 | |
|         .quad   foo                     # DW_AT_low_pc
 | |
|         .long   .Lfoo_end-foo           # DW_AT_high_pc
 | |
| .Ldebug_info_end0:
 | |
| 
 | |
|         .section        .debug_line,"",@progbits
 | |
| .Lline_table_begin:
 | |
|         .long .Lline_end-.Lline_start
 | |
| .Lline_start:
 | |
|         .short  5                       # DWARF version number
 | |
|         .byte   8                       # Address Size (in bytes)
 | |
|         .byte   0                       # Segment Selector Size
 | |
|         .long   .Lheader_end-.Lheader_start
 | |
| .Lheader_start:
 | |
|         .byte   1                       # Minimum Instruction Length
 | |
|         .byte   1                       # Maximum Operations per Instruction
 | |
|         .byte   1                       # Default is_stmt
 | |
|         .byte   0                       # Line Base
 | |
|         .byte   0                       # Line Range
 | |
|         .byte   5                       # Opcode Base
 | |
|         .byte   0, 1, 1, 1              # Standard Opcode Lengths
 | |
| 
 | |
|         # Directory table format
 | |
|         .byte   1                       # One element per directory entry
 | |
|         .byte   1                       # DW_LNCT_path
 | |
|         .byte   0x08                    # DW_FORM_string
 | |
| 
 | |
|         # Directory table entries
 | |
|         .byte   1                       # 1 directory
 | |
|         .asciz  "/"
 | |
| 
 | |
|         # File table format
 | |
|         .byte   2                       # 2 elements per file entry
 | |
|         .byte   1                       # DW_LNCT_path
 | |
|         .byte   0x08                    # DW_FORM_string
 | |
|         .byte   2                       # DW_LNCT_directory_index
 | |
|         .byte   0x0b                    # DW_FORM_data1
 | |
| 
 | |
|         # File table entries
 | |
|         .byte   3                       # 3 files
 | |
|         .asciz  "file0.c"
 | |
|         .byte   0
 | |
|         .asciz  "file1.c"
 | |
|         .byte   0
 | |
|         .asciz  "file0.c"
 | |
|         .byte   0
 | |
| .Lheader_end:
 | |
| 
 | |
|         .byte   4, 0                    # DW_LNS_set_file 0
 | |
|         .byte   0, 9, 2                 # DW_LNE_set_address
 | |
|         .quad   foo
 | |
|         .byte   3, 41                   # DW_LNS_advance_line 41
 | |
|         .byte   1                       # DW_LNS_copy
 | |
| 
 | |
|         .byte   4, 1                    # DW_LNS_set_file 1
 | |
|         .byte   2, 1                    # DW_LNS_advance_pc 1
 | |
|         .byte   3, 5                    # DW_LNS_advance_line 5
 | |
|         .byte   1                       # DW_LNS_copy
 | |
| 
 | |
|         .byte   4, 2                    # DW_LNS_set_file 2
 | |
|         .byte   2, 1                    # DW_LNS_advance_pc 1
 | |
|         .byte   1                       # DW_LNS_copy
 | |
| 
 | |
|         .byte   2, 1                    # DW_LNS_advance_pc 1
 | |
|         .byte   0, 1, 1                 # DW_LNE_end_sequence
 | |
| .Lline_end:
 |