summaryrefslogtreecommitdiff
path: root/test/DebugInfo/X86/dwarfdump-line-only.s
diff options
context:
space:
mode:
Diffstat (limited to 'test/DebugInfo/X86/dwarfdump-line-only.s')
-rw-r--r--test/DebugInfo/X86/dwarfdump-line-only.s93
1 files changed, 93 insertions, 0 deletions
diff --git a/test/DebugInfo/X86/dwarfdump-line-only.s b/test/DebugInfo/X86/dwarfdump-line-only.s
new file mode 100644
index 00000000000..299dc2cf97a
--- /dev/null
+++ b/test/DebugInfo/X86/dwarfdump-line-only.s
@@ -0,0 +1,93 @@
+# Test object to verify dwarfdump handles dumping a DWARF v5 line table
+# without an associated unit.
+# FIXME: Support FORM_strp in this situation.
+#
+# RUN: llvm-mc -triple x86_64-unknown-linux %s -filetype=obj -o - | \
+# RUN: llvm-dwarfdump -v - | FileCheck %s
+
+ .section .text
+ # Dummy function
+foo: ret
+
+ .section .debug_line,"",@progbits
+# CHECK-LABEL: .debug_line contents:
+
+# DWARF v5 line-table header.
+LH_5_start:
+ .long LH_5_end-LH_5_version # Length of Unit (DWARF-32 format)
+LH_5_version:
+ .short 5 # DWARF version number
+ .byte 8 # Address Size
+ .byte 0 # Segment Selector Size
+ .long LH_5_header_end-LH_5_params # Length of Prologue
+LH_5_params:
+ .byte 1 # Minimum Instruction Length
+ .byte 1 # Maximum Operations per Instruction
+ .byte 1 # Default is_stmt
+ .byte -5 # Line Base
+ .byte 14 # Line Range
+ .byte 13 # Opcode Base
+ .byte 0 # Standard Opcode Lengths
+ .byte 1
+ .byte 1
+ .byte 1
+ .byte 1
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 1
+ .byte 0
+ .byte 0
+ .byte 1
+ # Directory table format
+ .byte 1 # One element per directory entry
+ .byte 1 # DW_LNCT_path
+ .byte 0x08 # DW_FORM_string
+ # Directory table entries
+ .byte 2 # Two directory entries
+ .asciz "Directory1"
+ .asciz "Directory2"
+ # File table format
+ .byte 4 # Four elements per file entry
+ .byte 2 # DW_LNCT_directory_index
+ .byte 0x0b # DW_FORM_data1
+ .byte 1 # DW_LNCT_path
+ .byte 0x08 # DW_FORM_string
+ .byte 3 # DW_LNCT_timestamp
+ .byte 0x0f # DW_FORM_udata
+ .byte 4 # DW_LNCT_size
+ .byte 0x0f # DW_FORM_udata
+ # File table entries
+ .byte 2 # Two file entries
+ .byte 2
+ .asciz "File1"
+ .byte 0x51
+ .byte 0x52
+ .byte 1
+ .asciz "File2"
+ .byte 0x53
+ .byte 0x54
+LH_5_header_end:
+ # Minimal line number program with an address in it, which shows
+ # we picked up the address size from the line-table header.
+ .byte 0
+ .byte 9
+ .byte 2 # DW_LNE_set_address
+ .quad .text
+ .byte 0
+ .byte 1
+ .byte 1 # DW_LNE_end_sequence
+LH_5_end:
+
+# CHECK: Line table prologue:
+# CHECK: version: 5
+# CHECK: address_size: 8
+# CHECK: seg_select_size: 0
+# CHECK: max_ops_per_inst: 1
+# CHECK: include_directories[ 1] = 'Directory1'
+# CHECK: include_directories[ 2] = 'Directory2'
+# CHECK-NOT: include_directories
+# CHECK: file_names[ 1] 2 0x00000051 0x00000052 File1{{$}}
+# CHECK: file_names[ 2] 1 0x00000053 0x00000054 File2{{$}}
+# CHECK-NOT: file_names
+# CHECK: 0x0000000000000000 {{.*}} is_stmt end_sequence