xref: /llvm-project/llvm/test/DebugInfo/invalid-inlined-subroutine.s (revision df6d0579e18e868ef4b6e97794eacd5af86e1b8a)
1*df6d0579SAlex Orlov## This test checks how we handle parsing a broken DWARF when
2*df6d0579SAlex Orlov## a parent of DW_TAG_inlined_subroutine is anything other than DW_TAG_subprogram.
3*df6d0579SAlex Orlov
4*df6d0579SAlex Orlov# REQUIRES: x86-registered-target
5*df6d0579SAlex Orlov
6*df6d0579SAlex Orlov# RUN: llvm-mc -filetype=obj -triple=i386-linux-gnu -o %t.o %s
7*df6d0579SAlex Orlov# RUN: llvm-symbolizer "CODE %t.o 0" \
8*df6d0579SAlex Orlov# RUN:   | FileCheck %s --strict-whitespace --match-full-lines --implicit-check-not={{.}}
9*df6d0579SAlex Orlov
10*df6d0579SAlex Orlov#      CHECK:main
11*df6d0579SAlex Orlov# CHECK-NEXT:/tmp/test{{/|\\}}test.cpp:2:3
12*df6d0579SAlex Orlov
13*df6d0579SAlex Orlov## Generated from:
14*df6d0579SAlex Orlov##
15*df6d0579SAlex Orlov## int main() {
16*df6d0579SAlex Orlov##   return 123;
17*df6d0579SAlex Orlov## }
18*df6d0579SAlex Orlov##
19*df6d0579SAlex Orlov## clang++ --target=i386-linux-gnu test.cpp -g -O2 -std=c++11 -S -o test.s
20*df6d0579SAlex Orlov
21*df6d0579SAlex Orlov	.text
22*df6d0579SAlex Orlov	.file	"test.cpp"
23*df6d0579SAlex Orlov	.globl	main                            # -- Begin function main
24*df6d0579SAlex Orlov	.p2align	4, 0x90
25*df6d0579SAlex Orlov	.type	main,@function
26*df6d0579SAlex Orlovmain:                                   # @main
27*df6d0579SAlex Orlov.Lfunc_begin0:
28*df6d0579SAlex Orlov	.file	1 "/tmp/test" "test.cpp"
29*df6d0579SAlex Orlov	.loc	1 1 0                           # test.cpp:1:0
30*df6d0579SAlex Orlov	.cfi_sections .debug_frame
31*df6d0579SAlex Orlov	.cfi_startproc
32*df6d0579SAlex Orlov# %bb.0:                                # %entry
33*df6d0579SAlex Orlov	.loc	1 2 3 prologue_end              # test.cpp:2:3
34*df6d0579SAlex Orlov	movl	$123, %eax
35*df6d0579SAlex Orlov	retl
36*df6d0579SAlex Orlov.Ltmp0:
37*df6d0579SAlex Orlov.Lfunc_end0:
38*df6d0579SAlex Orlov	.size	main, .Lfunc_end0-main
39*df6d0579SAlex Orlov	.cfi_endproc
40*df6d0579SAlex Orlov                                        # -- End function
41*df6d0579SAlex Orlov	.section	.debug_abbrev,"",@progbits
42*df6d0579SAlex Orlov	.byte	1                               # Abbreviation Code
43*df6d0579SAlex Orlov	.byte	17                              # DW_TAG_compile_unit
44*df6d0579SAlex Orlov	.byte	1                               # DW_CHILDREN_yes
45*df6d0579SAlex Orlov	.byte	37                              # DW_AT_producer
46*df6d0579SAlex Orlov	.byte	14                              # DW_FORM_strp
47*df6d0579SAlex Orlov	.byte	19                              # DW_AT_language
48*df6d0579SAlex Orlov	.byte	5                               # DW_FORM_data2
49*df6d0579SAlex Orlov	.byte	3                               # DW_AT_name
50*df6d0579SAlex Orlov	.byte	14                              # DW_FORM_strp
51*df6d0579SAlex Orlov	.byte	16                              # DW_AT_stmt_list
52*df6d0579SAlex Orlov	.byte	23                              # DW_FORM_sec_offset
53*df6d0579SAlex Orlov	.byte	27                              # DW_AT_comp_dir
54*df6d0579SAlex Orlov	.byte	14                              # DW_FORM_strp
55*df6d0579SAlex Orlov	.byte	17                              # DW_AT_low_pc
56*df6d0579SAlex Orlov	.byte	1                               # DW_FORM_addr
57*df6d0579SAlex Orlov	.byte	18                              # DW_AT_high_pc
58*df6d0579SAlex Orlov	.byte	6                               # DW_FORM_data4
59*df6d0579SAlex Orlov	.byte	0                               # EOM(1)
60*df6d0579SAlex Orlov	.byte	0                               # EOM(2)
61*df6d0579SAlex Orlov	.byte	2                               # Abbreviation Code
62*df6d0579SAlex Orlov// Replace DW_TAG_subprogram with DW_TAG_inlined_subroutine
63*df6d0579SAlex Orlov//	.byte	46                              # DW_TAG_subprogram
64*df6d0579SAlex Orlov	.byte	29                              # DW_TAG_inlined_subroutine
65*df6d0579SAlex Orlov	.byte	0                               # DW_CHILDREN_no
66*df6d0579SAlex Orlov	.byte	17                              # DW_AT_low_pc
67*df6d0579SAlex Orlov	.byte	1                               # DW_FORM_addr
68*df6d0579SAlex Orlov	.byte	18                              # DW_AT_high_pc
69*df6d0579SAlex Orlov	.byte	6                               # DW_FORM_data4
70*df6d0579SAlex Orlov	.byte	64                              # DW_AT_frame_base
71*df6d0579SAlex Orlov	.byte	24                              # DW_FORM_exprloc
72*df6d0579SAlex Orlov	.ascii	"\227B"                         # DW_AT_GNU_all_call_sites
73*df6d0579SAlex Orlov	.byte	25                              # DW_FORM_flag_present
74*df6d0579SAlex Orlov	.byte	3                               # DW_AT_name
75*df6d0579SAlex Orlov	.byte	14                              # DW_FORM_strp
76*df6d0579SAlex Orlov	.byte	58                              # DW_AT_decl_file
77*df6d0579SAlex Orlov	.byte	11                              # DW_FORM_data1
78*df6d0579SAlex Orlov	.byte	59                              # DW_AT_decl_line
79*df6d0579SAlex Orlov	.byte	11                              # DW_FORM_data1
80*df6d0579SAlex Orlov	.byte	73                              # DW_AT_type
81*df6d0579SAlex Orlov	.byte	19                              # DW_FORM_ref4
82*df6d0579SAlex Orlov	.byte	63                              # DW_AT_external
83*df6d0579SAlex Orlov	.byte	25                              # DW_FORM_flag_present
84*df6d0579SAlex Orlov	.byte	0                               # EOM(1)
85*df6d0579SAlex Orlov	.byte	0                               # EOM(2)
86*df6d0579SAlex Orlov	.byte	3                               # Abbreviation Code
87*df6d0579SAlex Orlov	.byte	36                              # DW_TAG_base_type
88*df6d0579SAlex Orlov	.byte	0                               # DW_CHILDREN_no
89*df6d0579SAlex Orlov	.byte	3                               # DW_AT_name
90*df6d0579SAlex Orlov	.byte	14                              # DW_FORM_strp
91*df6d0579SAlex Orlov	.byte	62                              # DW_AT_encoding
92*df6d0579SAlex Orlov	.byte	11                              # DW_FORM_data1
93*df6d0579SAlex Orlov	.byte	11                              # DW_AT_byte_size
94*df6d0579SAlex Orlov	.byte	11                              # DW_FORM_data1
95*df6d0579SAlex Orlov	.byte	0                               # EOM(1)
96*df6d0579SAlex Orlov	.byte	0                               # EOM(2)
97*df6d0579SAlex Orlov	.byte	0                               # EOM(3)
98*df6d0579SAlex Orlov	.section	.debug_info,"",@progbits
99*df6d0579SAlex Orlov.Lcu_begin0:
100*df6d0579SAlex Orlov	.long	.Ldebug_info_end0-.Ldebug_info_start0 # Length of Unit
101*df6d0579SAlex Orlov.Ldebug_info_start0:
102*df6d0579SAlex Orlov	.short	4                               # DWARF version number
103*df6d0579SAlex Orlov	.long	.debug_abbrev                   # Offset Into Abbrev. Section
104*df6d0579SAlex Orlov	.byte	4                               # Address Size (in bytes)
105*df6d0579SAlex Orlov	.byte	1                               # Abbrev [1] 0xb:0x38 DW_TAG_compile_unit
106*df6d0579SAlex Orlov	.long	.Linfo_string0                  # DW_AT_producer
107*df6d0579SAlex Orlov	.short	26                              # DW_AT_language
108*df6d0579SAlex Orlov	.long	.Linfo_string1                  # DW_AT_name
109*df6d0579SAlex Orlov	.long	.Lline_table_start0             # DW_AT_stmt_list
110*df6d0579SAlex Orlov	.long	.Linfo_string2                  # DW_AT_comp_dir
111*df6d0579SAlex Orlov	.long	.Lfunc_begin0                   # DW_AT_low_pc
112*df6d0579SAlex Orlov	.long	.Lfunc_end0-.Lfunc_begin0       # DW_AT_high_pc
113*df6d0579SAlex Orlov	.byte	2                               # Abbrev [2] 0x26:0x15 DW_TAG_subprogram
114*df6d0579SAlex Orlov	.long	.Lfunc_begin0                   # DW_AT_low_pc
115*df6d0579SAlex Orlov	.long	.Lfunc_end0-.Lfunc_begin0       # DW_AT_high_pc
116*df6d0579SAlex Orlov	.byte	1                               # DW_AT_frame_base
117*df6d0579SAlex Orlov	.byte	84
118*df6d0579SAlex Orlov                                        # DW_AT_GNU_all_call_sites
119*df6d0579SAlex Orlov	.long	.Linfo_string3                  # DW_AT_name
120*df6d0579SAlex Orlov	.byte	1                               # DW_AT_decl_file
121*df6d0579SAlex Orlov	.byte	1                               # DW_AT_decl_line
122*df6d0579SAlex Orlov	.long	59                              # DW_AT_type
123*df6d0579SAlex Orlov                                        # DW_AT_external
124*df6d0579SAlex Orlov	.byte	3                               # Abbrev [3] 0x3b:0x7 DW_TAG_base_type
125*df6d0579SAlex Orlov	.long	.Linfo_string4                  # DW_AT_name
126*df6d0579SAlex Orlov	.byte	5                               # DW_AT_encoding
127*df6d0579SAlex Orlov	.byte	4                               # DW_AT_byte_size
128*df6d0579SAlex Orlov	.byte	0                               # End Of Children Mark
129*df6d0579SAlex Orlov.Ldebug_info_end0:
130*df6d0579SAlex Orlov	.section	.debug_str,"MS",@progbits,1
131*df6d0579SAlex Orlov.Linfo_string0:
132*df6d0579SAlex Orlov	.asciz	"clang version 13.0.0"
133*df6d0579SAlex Orlov.Linfo_string1:
134*df6d0579SAlex Orlov	.asciz	"test.cpp"
135*df6d0579SAlex Orlov.Linfo_string2:
136*df6d0579SAlex Orlov	.asciz	"/tmp/test"  # string offset=114
137*df6d0579SAlex Orlov.Linfo_string3:
138*df6d0579SAlex Orlov	.asciz	"main"
139*df6d0579SAlex Orlov.Linfo_string4:
140*df6d0579SAlex Orlov	.asciz	"int"
141*df6d0579SAlex Orlov	.ident	"clang version 13.0.0"
142*df6d0579SAlex Orlov	.section	".note.GNU-stack","",@progbits
143*df6d0579SAlex Orlov	.addrsig
144*df6d0579SAlex Orlov	.section	.debug_line,"",@progbits
145*df6d0579SAlex Orlov.Lline_table_start0:
146