1## This checks that llvm-mc is able to produce 64-bit debug info.
2
3# RUN: llvm-mc -g -dwarf-version 3 -dwarf64 -triple x86_64 %s -filetype=obj -o %t3.o
4# RUN: llvm-readobj -r %t3.o | FileCheck --check-prefixes=REL,REL3 %s --implicit-check-not="R_{{.*}} .debug_"
5# RUN: llvm-dwarfdump -v %t3.o | FileCheck --check-prefixes=DUMP,DUMP3 %s
6
7# RUN: llvm-mc -g -dwarf-version 5 -dwarf64 -triple x86_64 %s -filetype=obj -o %t5.o
8# RUN: llvm-readobj -r %t5.o | FileCheck --check-prefixes=REL,REL5 %s --implicit-check-not="R_{{.*}} .debug_"
9# RUN: llvm-dwarfdump -v %t5.o | FileCheck --check-prefixes=DUMP,DUMP5 %s
10
11## The references to other debug info sections are 64-bit, as required for DWARF64.
12# REL:         Section ({{[0-9]+}}) .rela.debug_frame {
13# REL-NEXT:      R_X86_64_64 .debug_frame 0x0
14# REL:         Section ({{[0-9]+}}) .rela.debug_info {
15# REL-NEXT:      R_X86_64_64 .debug_abbrev 0x0
16# REL-NEXT:      R_X86_64_64 .debug_line 0x0
17# REL3-NEXT:     R_X86_64_64 .debug_ranges 0x0
18# REL5-NEXT:     R_X86_64_64 .debug_rnglists 0x14
19# REL:         Section ({{[0-9]+}}) .rela.debug_aranges {
20# REL-NEXT:      R_X86_64_64 .debug_info 0x0
21# REL5:        Section ({{[0-9]+}}) .rela.debug_line {
22# REL5-NEXT:     R_X86_64_64 .debug_line_str 0x0
23# REL5-NEXT:     R_X86_64_64 .debug_line_str 0x
24
25## DW_FORM_sec_offset was introduced in DWARFv4.
26## For DWARFv3, DW_FORM_data8 is used instead.
27# DUMP:       .debug_abbrev contents:
28# DUMP3:        DW_AT_stmt_list DW_FORM_data8
29# DUMP3-NEXT:   DW_AT_ranges    DW_FORM_data8
30# DUMP5:        DW_AT_stmt_list DW_FORM_sec_offset
31# DUMP5-NEXT:   DW_AT_ranges    DW_FORM_sec_offset
32
33# DUMP:       .debug_info contents:
34# DUMP-NEXT:  0x00000000: Compile Unit: {{.*}} format = DWARF64
35# DUMP:       DW_TAG_compile_unit [1] *
36# DUMP3-NEXT:   DW_AT_stmt_list [DW_FORM_data8] (0x0000000000000000)
37# DUMP5-NEXT:   DW_AT_stmt_list [DW_FORM_sec_offset] (0x0000000000000000)
38# DUMP3-NEXT:   DW_AT_ranges [DW_FORM_data8] (0x0000000000000000
39# DUMP5-NEXT:   DW_AT_ranges [DW_FORM_sec_offset] (0x0000000000000014
40# DUMP-NEXT:      [0x0000000000000000, 0x0000000000000001) ".foo"
41# DUMP-NEXT:      [0x0000000000000000, 0x0000000000000001) ".bar")
42# DUMP:       DW_TAG_label [2]
43# DUMP-NEXT:    DW_AT_name [DW_FORM_string] ("foo")
44# DUMP:       DW_TAG_label [2]
45# DUMP-NEXT:    DW_AT_name [DW_FORM_string] ("bar")
46
47# DUMP:       .debug_frame contents:
48# DUMP:       00000000 {{([[:xdigit:]]{16})}} ffffffffffffffff CIE
49# DUMP-NEXT:    Format: DWARF64
50# DUMP:       {{([[:xdigit:]]{8})}} {{([[:xdigit:]]{16})}} 0000000000000000 FDE cie=00000000 pc=00000000...00000001
51# DUMP-NEXT:    Format: DWARF64
52
53## Even though the debug info sections are in the 64-bit format,
54## .eh_frame is still generated as 32-bit.
55# DUMP:       .eh_frame contents:
56# DUMP:       00000000 {{([[:xdigit:]]{8})}} 00000000 CIE
57# DUMP-NEXT:    Format: DWARF32
58# DUMP:       {{([[:xdigit:]]{8})}} {{([[:xdigit:]]{8})}} {{([[:xdigit:]]{8})}} FDE cie=00000000 pc=00000000...00000001
59# DUMP-NEXT:    Format: DWARF32
60
61# DUMP:       .debug_aranges contents:
62# DUMP-NEXT:  Address Range Header: length = 0x0000000000000044, format = DWARF64, version = 0x0002, cu_offset = 0x0000000000000000, addr_size = 0x08, seg_size = 0x00
63# DUMP-NEXT:  [0x0000000000000000,  0x0000000000000001)
64# DUMP-NEXT:  [0x0000000000000000,  0x0000000000000001)
65# DUMP-EMPTY:
66
67# DUMP:       .debug_line contents:
68# DUMP-NEXT:  debug_line[0x00000000]
69# DUMP-NEXT:  Line table prologue:
70# DUMP-NEXT:      total_length:
71# DUMP-NEXT:            format: DWARF64
72# DUMP5:      include_directories[  0] = .debug_line_str[0x0000000000000000] = "[[DIR:.+]]"
73# DUMP5-NEXT: file_names[  0]:
74# DUMP5-NEXT:            name: .debug_line_str[0x00000000[[FILEOFF:[[:xdigit:]]{8}]]] = "[[FILE:.+]]"
75# DUMP5-NEXT:       dir_index: 0
76
77# DUMP5:      .debug_line_str contents:
78# DUMP5-NEXT: 0x00000000: "[[DIR]]"
79# DUMP5-NEXT: 0x[[FILEOFF]]: "[[FILE]]"
80
81# DUMP3:      .debug_ranges contents:
82# DUMP3-NEXT: 00000000 ffffffffffffffff 0000000000000000
83# DUMP3-NEXT: 00000000 0000000000000000 0000000000000001
84# DUMP3-NEXT: 00000000 ffffffffffffffff 0000000000000000
85# DUMP3-NEXT: 00000000 0000000000000000 0000000000000001
86# DUMP3-NEXT: 00000000 <End of list>
87
88# DUMP5:      .debug_rnglists contents:
89# DUMP5-NEXT: 0x00000000: range list header: length = 0x000000000000001d, format = DWARF64, version = 0x0005, addr_size = 0x08, seg_size = 0x00, offset_entry_count = 0x00000000
90# DUMP5-NEXT: ranges:
91# DUMP5-NEXT: 0x00000014: [DW_RLE_start_length]: 0x0000000000000000, 0x0000000000000001 => [0x0000000000000000, 0x0000000000000001)
92# DUMP5-NEXT: 0x0000001e: [DW_RLE_start_length]: 0x0000000000000000, 0x0000000000000001 => [0x0000000000000000, 0x0000000000000001)
93# DUMP5-NEXT: 0x00000028: [DW_RLE_end_of_list ]
94
95    .cfi_sections .eh_frame, .debug_frame
96
97    .section .foo, "ax", @progbits
98foo:
99    nop
100
101    .section .bar, "ax", @progbits
102bar:
103    .cfi_startproc
104    nop
105    .cfi_endproc
106