1# RUN: llvm-mc -triple x86_64-pc-linux %s -filetype=obj -o - | not llvm-dwarfdump -verify - | FileCheck %s
2
3# CHECK: error: Name Index @ 0x0: Unable to get string associated with name 1.
4# CHECK: error: Name Index @ 0x0: Entry @ 0x73 contains an invalid CU index (47).
5# CHECK: error: Name Index @ 0x0: Entry @ 0x79 references a non-existing DIE @ 0x3fa.
6# CHECK: error: Name Index @ 0x0: Entry @ 0x85: mismatched CU of DIE @ 0x30: index - 0x0; debug_info - 0x1e.
7# CHECK: error: Name Index @ 0x0: Entry @ 0x8b: mismatched Tag of DIE @ 0x17: index - DW_TAG_subprogram; debug_info - DW_TAG_variable.
8# CHECK: error: Name Index @ 0x0: Entry @ 0x91: mismatched Name of DIE @ 0x35: index - foo; debug_info - bar, _Z3bar.
9# CHECK: error: Name Index @ 0x0: Name 2 (foo): Incorrectly terminated entry list.
10# CHECK: error: Name Index @ 0x0: Name 3 (bar) is not associated with any entries.
11# CHECK: error: Name Index @ 0x0: Entry @ 0x69: mismatched Name of DIE @ 0x1c: index - (pseudonymous namespace); debug_info - (anonymous namespace).
12
13	.section	.debug_str,"MS",@progbits,1
14.Lstring_foo:
15	.asciz	"foo"
16.Lstring_bar:
17	.asciz	"bar"
18.Lstring_bar_mangled:
19	.asciz	"_Z3bar"
20.Lstring_pseudo_namespace:
21	.asciz	"(pseudonymous namespace)"
22.Lstring_producer:
23	.asciz	"Hand-written dwarf"
24
25	.section	.debug_abbrev,"",@progbits
26.Lsection_abbrev:
27	.byte	1                       # Abbreviation Code
28	.byte	17                      # DW_TAG_compile_unit
29	.byte	1                       # DW_CHILDREN_yes
30	.byte	37                      # DW_AT_producer
31	.byte	14                      # DW_FORM_strp
32	.byte	19                      # DW_AT_language
33	.byte	5                       # DW_FORM_data2
34	.byte	0                       # EOM(1)
35	.byte	0                       # EOM(2)
36	.byte	2                       # Abbreviation Code
37	.byte	46                      # DW_TAG_subprogram
38	.byte	0                       # DW_CHILDREN_no
39	.byte	3                       # DW_AT_name
40	.byte	14                      # DW_FORM_strp
41	.byte	63                      # DW_AT_external
42	.byte	25                      # DW_FORM_flag_present
43	.byte	0                       # EOM(1)
44	.byte	0                       # EOM(2)
45	.byte	3                       # Abbreviation Code
46	.byte	52                      # DW_TAG_variable
47	.byte	0                       # DW_CHILDREN_no
48	.byte	3                       # DW_AT_name
49	.byte	14                      # DW_FORM_strp
50	.byte	0                       # EOM(1)
51	.byte	0                       # EOM(2)
52	.byte	4                       # Abbreviation Code
53	.byte	57                      # DW_TAG_namespace
54	.byte	0                       # DW_CHILDREN_no
55	.byte	0                       # EOM(1)
56	.byte	0                       # EOM(2)
57	.byte	5                       # Abbreviation Code
58	.byte	52                      # DW_TAG_variable
59	.byte	0                       # DW_CHILDREN_no
60	.byte	3                       # DW_AT_name
61	.byte	14                      # DW_FORM_strp
62	.byte	110                     # DW_AT_linkage_name
63	.byte	14                      # DW_FORM_strp
64	.byte	0                       # EOM(1)
65	.byte	0                       # EOM(2)
66	.byte	0                       # EOM(3)
67
68	.section	.debug_info,"",@progbits
69.Lcu_begin0:
70	.long	.Lcu_end0-.Lcu_start0   # Length of Unit
71.Lcu_start0:
72	.short	4                       # DWARF version number
73	.long	.Lsection_abbrev        # Offset Into Abbrev. Section
74	.byte	8                       # Address Size (in bytes)
75	.byte	1                       # Abbrev [1] DW_TAG_compile_unit
76	.long	.Lstring_producer       # DW_AT_producer
77	.short	12                      # DW_AT_language
78.Ldie_foo:
79	.byte	2                       # Abbrev [2] DW_TAG_subprogram
80	.long	.Lstring_foo            # DW_AT_name
81                                        # DW_AT_external
82.Ldie_foo_var:
83	.byte	3                       # Abbrev [3] DW_TAG_variable
84	.long	.Lstring_foo            # DW_AT_name
85.Ldie_namespace:
86	.byte	4                       # Abbrev [3] DW_TAG_namespace
87	.byte	0                       # End Of Children Mark
88.Lcu_end0:
89
90.Lcu_begin1:
91	.long	.Lcu_end1-.Lcu_start1   # Length of Unit
92.Lcu_start1:
93	.short	4                       # DWARF version number
94	.long	.Lsection_abbrev        # Offset Into Abbrev. Section
95	.byte	8                       # Address Size (in bytes)
96	.byte	1                       # Abbrev [1] DW_TAG_compile_unit
97	.long	.Lstring_producer       # DW_AT_producer
98	.short	12                      # DW_AT_language
99.Ldie_foo2:
100	.byte	2                       # Abbrev [2] DW_TAG_subprogram
101	.long	.Lstring_foo            # DW_AT_name
102                                        # DW_AT_external
103.Ldie_bar_linkage:
104	.byte	5                       # Abbrev [2] DW_TAG_variable
105	.long	.Lstring_bar            # DW_AT_name
106	.long	.Lstring_bar_mangled    # DW_AT_linkage_name
107	.byte	0                       # End Of Children Mark
108.Lcu_end1:
109
110
111	.section	.debug_names,"",@progbits
112	.long	.Lnames_end0-.Lnames_start0 # Header: contribution length
113.Lnames_start0:
114	.short	5                       # Header: version
115	.short	0                       # Header: padding
116	.long	2                       # Header: compilation unit count
117	.long	0                       # Header: local type unit count
118	.long	0                       # Header: foreign type unit count
119	.long	0                       # Header: bucket count
120	.long	4                       # Header: name count
121	.long	.Lnames_abbrev_end0-.Lnames_abbrev_start0 # Header: abbreviation table size
122	.long	0                       # Header: augmentation length
123	.long	.Lcu_begin0             # Compilation unit 0
124	.long	.Lcu_begin1             # Compilation unit 1
125	.long	.Lstring_foo+1000       # String 1: <broken>
126	.long	.Lstring_foo            # String 2: foo
127	.long	.Lstring_bar            # String 3: bar
128	.long	.Lstring_pseudo_namespace # String 4: (pseudonymous namespace)
129	.long	.Lnames0-.Lnames_entries0 # Offset 1
130	.long	.Lnames0-.Lnames_entries0 # Offset 2
131	.long	.Lnames1-.Lnames_entries0 # Offset 3
132	.long	.Lnames2-.Lnames_entries0 # Offset 4
133.Lnames_abbrev_start0:
134	.byte	46                      # Abbrev code
135	.byte	46                      # DW_TAG_subprogram
136	.byte	1                       # DW_IDX_compile_unit
137	.byte	11                      # DW_FORM_data1
138	.byte	3                       # DW_IDX_die_offset
139	.byte	19                      # DW_FORM_ref4
140	.byte	0                       # End of abbrev
141	.byte	0                       # End of abbrev
142	.byte	57                      # Abbrev code
143	.byte	57                      # DW_TAG_namespace
144	.byte	1                       # DW_IDX_compile_unit
145	.byte	11                      # DW_FORM_data1
146	.byte	3                       # DW_IDX_die_offset
147	.byte	19                      # DW_FORM_ref4
148	.byte	0                       # End of abbrev
149	.byte	0                       # End of abbrev
150	.byte	52                      # Abbrev code
151	.byte	52                      # DW_TAG_variable
152	.byte	1                       # DW_IDX_compile_unit
153	.byte	11                      # DW_FORM_data1
154	.byte	3                       # DW_IDX_die_offset
155	.byte	19                      # DW_FORM_ref4
156	.byte	0                       # End of abbrev
157	.byte	0                       # End of abbrev
158	.byte	0                       # End of abbrev list
159.Lnames_abbrev_end0:
160.Lnames_entries0:
161.Lnames1:
162	.long	0                       # End of list: bar
163.Lnames2:
164	.byte	57                      # Abbrev code
165	.byte	0                       # DW_IDX_compile_unit
166	.long	.Ldie_namespace-.Lcu_begin0 # DW_IDX_die_offset
167	.long	0                       # End of list: (pseudonymous namespace)
168.Lnames0:
169	.byte	46                      # Abbrev code
170	.byte	47                      # DW_IDX_compile_unit
171	.long	.Ldie_foo-.Lcu_begin0   # DW_IDX_die_offset
172	.byte	46                      # Abbrev code
173	.byte	0                       # DW_IDX_compile_unit
174	.long	.Ldie_foo-.Lcu_begin0+1000 # DW_IDX_die_offset
175	.byte	46                      # Abbrev code
176	.byte	0                       # DW_IDX_compile_unit
177	.long	.Ldie_foo-.Lcu_begin0   # DW_IDX_die_offset
178	.byte	46                      # Abbrev code
179	.byte	0                       # DW_IDX_compile_unit
180	.long	.Ldie_foo2-.Lcu_begin0  # DW_IDX_die_offset
181	.byte	46                      # Abbrev code
182	.byte	0                       # DW_IDX_compile_unit
183	.long	.Ldie_foo_var-.Lcu_begin0 # DW_IDX_die_offset
184	.byte	52                      # Abbrev code
185	.byte	1                       # DW_IDX_compile_unit
186	.long	.Ldie_bar_linkage-.Lcu_begin1 # DW_IDX_die_offset
187	#.long	0                       # End of list deliberately missing
188.Lnames_end0:
189