File: gcc_except_table_bb_sections.ll

package info (click to toggle)
llvm-toolchain-17 1%3A17.0.6-22
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 1,799,624 kB
  • sloc: cpp: 6,428,607; ansic: 1,383,196; asm: 793,408; python: 223,504; objc: 75,364; f90: 60,502; lisp: 33,869; pascal: 15,282; sh: 9,684; perl: 7,453; ml: 4,937; awk: 3,523; makefile: 2,889; javascript: 2,149; xml: 888; fortran: 619; cs: 573
file content (227 lines) | stat: -rw-r--r-- 11,845 bytes parent folder | download | duplicates (12)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
; RUN: llc -basic-block-sections=all -mtriple x86_64-pc-linux-gnu -code-model=small < %s | FileCheck %s --check-prefixes=CHECK,CHECK-SMALL,CHECK-NON-PIC,CHECK-NON-PIC-SMALL,CHECK-NON-PIC-X64
; RUN: llc -basic-block-sections=all -mtriple x86_64-pc-linux-gnux32 -code-model=small < %s | FileCheck %s --check-prefixes=CHECK,CHECK-SMALL,CHECK-NON-PIC,CHECK-NON-PIC-SMALL,CHECK-NON-PIC-X32
; RUN: llc -basic-block-sections=all -mtriple x86_64-pc-linux-gnu -code-model=medium < %s | FileCheck %s --check-prefixes=CHECK,CHECK-MEDIUM,CHECK-NON-PIC,CHECK-NON-PIC-MEDIUM,CHECK-NON-PIC-X64
; RUN: llc -basic-block-sections=all -mtriple x86_64-pc-linux-gnu -code-model=large < %s | FileCheck %s --check-prefixes=CHECK,CHECK-NON-PIC,CHECK-NON-PIC-LARGE,CHECK-NON-PIC-X64
; RUN: llc -basic-block-sections=all -mtriple x86_64-pc-linux-gnu -relocation-model=pic -code-model=small < %s | FileCheck %s --check-prefixes=CHECK,CHECK-SMALL,CHECK-PIC,CHECK-PIC-SMALL,CHECK-PIC-X64
; RUN: llc -basic-block-sections=all -mtriple x86_64-pc-linux-gnux32 -relocation-model=pic -code-model=small < %s | FileCheck %s --check-prefixes=CHECK,CHECK-SMALL,CHECK-PIC,CHECK-PIC-SMALL,CHECK-PIC-X32
; RUN: llc -basic-block-sections=all -mtriple x86_64-pc-linux-gnu -relocation-model=pic -code-model=medium < %s | FileCheck %s --check-prefixes=CHECK,CHECK-MEDIUM,CHECK-PIC,CHECK-PIC-MEDIUM,CHECK-PIC-X64
; RUN: llc -basic-block-sections=all -mtriple x86_64-pc-linux-gnu -relocation-model=pic -code-model=large < %s | FileCheck %s --check-prefixes=CHECK,CHECK-PIC,CHECK-PIC-LARGE,CHECK-PIC-X64
@_ZTIi = external constant ptr

define i32 @main() uwtable optsize ssp personality ptr @__gxx_personality_v0 {
; Verify that each basic block section gets its own LSDA exception symbol.
;
; CHECK-LABEL:        main:
; CHECK-NEXT:         .Lfunc_begin0:
; CHECK-NEXT:           .cfi_startproc

;; Verify personality function and LSDA encoding for NON-PIC mode.
; PersonalityEncoding = dwarf::DW_EH_PE_udata4 (small/medium)
; PersonalityEncoding = dwarf::DW_EH_PE_absptr (large)
; CHECK-NON-PIC-SMALL-NEXT:  .cfi_personality 3, __gxx_personality_v0
; CHECK-NON-PIC-MEDIUM-NEXT: .cfi_personality 3, __gxx_personality_v0
; CHECK-NON-PIC-LARGE-NEXT:  .cfi_personality 0, __gxx_personality_v0
; LSDAEncoding = dwarf::DW_EH_PE_udata4 (small)
; LSDAEncoding = dwarf::DW_EH_PE_absptr (medium/large)
; CHECK-NON-PIC-SMALL-NEXT:  .cfi_lsda 3, .Lexception0
; CHECK-NON-PIC-MEDIUM-NEXT: .cfi_lsda 0, .Lexception0
; CHECK-NON-PIC-LARGE-NEXT:  .cfi_lsda 0, .Lexception0

;; Verify personality function and LSDA encoding for PIC mode.
; PersonalityEncoding = DW_EH_PE_indirect | DW_EH_PE_pcrel | DW_EH_PE_sdata4 (small/medium)
; PersonalityEncoding = DW_EH_PE_indirect | DW_EH_PE_pcrel | DW_EH_PE_sdata8 (large)
; CHECK-PIC-SMALL-NEXT:  .cfi_personality 155, DW.ref.__gxx_personality_v0
; CHECK-PIC-MEDIUM-NEXT: .cfi_personality 155, DW.ref.__gxx_personality_v0
; CHECK-PIC-LARGE-NEXT:  .cfi_personality 156, DW.ref.__gxx_personality_v0
; LSDAEncoding = DW_EH_PE_pcrel | DW_EH_PE_sdata4 (small)
; LSDAEncoding = DW_EH_PE_pcrel | DW_EH_PE_sdata8 (medium/large)
; CHECK-PIC-SMALL-NEXT:  .cfi_lsda 27, .Lexception0
; CHECK-PIC-MEDIUM-NEXT: .cfi_lsda 28, .Lexception0
; CHECK-PIC-LARGE-NEXT:  .cfi_lsda 28, .Lexception0

; CHECK-LABEL:        .Ltmp0:
; CHECK-SMALL-NEXT:     callq   _Z1fv
; CHECK-MEDIUM-NEXT:    callq   _Z1fv
; CHECK-NON-PIC-LARGE-NEXT: movabsq $_Z1fv, %rax
; CHECK-NON-PIC-LARGE-NEXT: callq   *%rax
; CHECK-PIC-LARGE-NEXT:     movabsq $_Z1fv@GOT, %rax
; CHECK-PIC-LARGE-NEXT:     callq *(%rbx,%rax)
; CHECK-LABEL:        .Ltmp1:

; CHECK-NOT:            .cfi_lsda

; CHECK-LABEL:        main.__part.1:
; CHECK-NEXT:           .cfi_startproc

; CHECK-NON-PIC-SMALL-NEXT:  .cfi_personality 3, __gxx_personality_v0
; CHECK-NON-PIC-MEDIUM-NEXT: .cfi_personality 3, __gxx_personality_v0
; CHECK-NON-PIC-LARGE-NEXT:  .cfi_personality 0, __gxx_personality_v0
; CHECK-NON-PIC-SMALL-NEXT:  .cfi_lsda 3, .Lexception1
; CHECK-NON-PIC-MEDIUM-NEXT: .cfi_lsda 0, .Lexception1
; CHECK-NON-PIC-LARGE-NEXT:  .cfi_lsda 0, .Lexception1

; CHECK-PIC-SMALL-NEXT:  .cfi_personality 155, DW.ref.__gxx_personality_v0
; CHECK-PIC-MEDIUM-NEXT: .cfi_personality 155, DW.ref.__gxx_personality_v0
; CHECK-PIC-LARGE-NEXT:  .cfi_personality 156, DW.ref.__gxx_personality_v0
; CHECK-PIC-SMALL-NEXT:  .cfi_lsda 27, .Lexception1
; CHECK-PIC-MEDIUM-NEXT: .cfi_lsda 28, .Lexception1
; CHECK-PIC-LARGE-NEXT:  .cfi_lsda 28, .Lexception1

; CHECK-NOT:            .cfi_lsda

; CHECK-LABEL:        main.__part.2:
; CHECK-NEXT:           .cfi_startproc

; CHECK-NON-PIC-SMALL-NEXT:  .cfi_personality 3, __gxx_personality_v0
; CHECK-NON-PIC-MEDIUM-NEXT: .cfi_personality 3, __gxx_personality_v0
; CHECK-NON-PIC-LARGE-NEXT:  .cfi_personality 0, __gxx_personality_v0
; CHECK-NON-PIC-SMALL-NEXT:  .cfi_lsda 3, .Lexception2
; CHECK-NON-PIC-MEDIUM-NEXT: .cfi_lsda 0, .Lexception2
; CHECK-NON-PIC-LARGE-NEXT:  .cfi_lsda 0, .Lexception2

; CHECK-PIC-SMALL-NEXT:  .cfi_personality 155, DW.ref.__gxx_personality_v0
; CHECK-PIC-MEDIUM-NEXT: .cfi_personality 155, DW.ref.__gxx_personality_v0
; CHECK-PIC-LARGE-NEXT:  .cfi_personality 156, DW.ref.__gxx_personality_v0
; CHECK-PIC-SMALL-NEXT:  .cfi_lsda 27, .Lexception2
; CHECK-PIC-MEDIUM-NEXT: .cfi_lsda 28, .Lexception2
; CHECK-PIC-LARGE-NEXT:  .cfi_lsda 28, .Lexception2

; CHECK:                nop
; CHECK-LABEL:        .Ltmp2:
; CHECK-LABEL:        .LBB_END0_2:

; CHECK-NOT:            .cfi_lsda

entry:
  invoke void @_Z1fv() optsize
          to label %try.cont unwind label %lpad

lpad:
  %0 = landingpad { ptr, i32 }
          cleanup
          catch ptr @_ZTIi
  br label %eh.resume

try.cont:
  ret i32 0

eh.resume:
  resume { ptr, i32 } %0
}

declare void @_Z1fv() optsize

declare i32 @__gxx_personality_v0(...)
;; Verify that the exception table gets split across the three basic block sections.
;
; CHECK:                .section .gcc_except_table
; CHECK-NEXT:           .p2align 2
; CHECK-NEXT:         GCC_except_table0:
; CHECK-NEXT:         .Lexception0:

;; Verify @LPStart encoding for NON-PIC mode.
; CHECK-NON-PIC-NEXT:   .byte	0                       # @LPStart Encoding = absptr
; CHECK-NON-PIC-X64-NEXT: .quad	main.__part.2
; CHECK-NON-PIC-X32-NEXT: .long	main.__part.2

;; Verify @LPStart encoding for PIC mode.
; CHECK-PIC-NEXT:       .byte	16                      # @LPStart Encoding = pcrel
; CHECK-PIC-NEXT:     [[DOT:\.Ltmp[0-9]+]]:
; CHECK-PIC-X64-NEXT:   .quad	main.__part.2-[[DOT]]
; CHECK-PIC-X32-NEXT:   .long	main.__part.2-[[DOT]]

;; Verify @TType encoding for NON-PIC mode.
; CHECK-NON-PIC-SMALL-NEXT:  .byte	3               # @TType Encoding = udata4
; CHECK-NON-PIC-MEDIUM-NEXT: .byte	0               # @TType Encoding = absptr
; CHECK-NON-PIC-LARGE-NEXT:  .byte	0               # @TType Encoding = absptr

;; Verify @TType encoding for PIC mode.
; CHECK-PIC-SMALL-NEXT: .byte 155                       # @TType Encoding = indirect pcrel sdata4
; CHECK-PIC-MEDIUM-NEXT:.byte 155                       # @TType Encoding = indirect pcrel sdata4
; CHECK-PIC-LARGE-NEXT: .byte 156                       # @TType Encoding = indirect pcrel sdata8

; CHECK-NEXT:           .uleb128 .Lttbase0-.Lttbaseref0
; CHECK-NEXT:         .Lttbaseref0:
; CHECK-NEXT:           .byte	1                       # Call site Encoding = uleb128
; CHECK-NEXT:           .uleb128 .Laction_table_base0-.Lcst_begin0
; CHECK-NEXT:         .Lcst_begin0:
; CHECK-NEXT:           .uleb128 .Ltmp0-.Lfunc_begin0   # >> Call Site 1 <<
; CHECK-NEXT:           .uleb128 .Ltmp1-.Ltmp0          #   Call between .Ltmp0 and .Ltmp1
; CHECK-NEXT:           .uleb128 .Ltmp2-main.__part.2   #     jumps to .Ltmp2
; CHECK-NEXT:           .byte	3                       #   On action: 2
; CHECK-NEXT:           .p2align	2
; CHECK-NEXT:         .Lexception1:

; CHECK-NON-PIC-NEXT:   .byte	0                       # @LPStart Encoding = absptr
; CHECK-NON-PIC-X64-NEXT: .quad	main.__part.2
; CHECK-NON-PIC-X32-NEXT: .long	main.__part.2

; CHECK-PIC-NEXT:       .byte	16                      # @LPStart Encoding = pcrel
; CHECK-PIC-NEXT:     [[DOT:\.Ltmp[0-9]+]]:
; CHECK-PIC-X64-NEXT:   .quad	main.__part.2-[[DOT]]
; CHECK-PIC-X32-NEXT:   .long	main.__part.2-[[DOT]]

; CHECK-NON-PIC-SMALL-NEXT:  .byte	3               # @TType Encoding = udata4
; CHECK-NON-PIC-MEDIUM-NEXT: .byte	0               # @TType Encoding = absptr
; CHECK-NON-PIC-LARGE-NEXT:  .byte	0               # @TType Encoding = absptr

; CHECK-PIC-SMALL-NEXT: .byte 155                       # @TType Encoding = indirect pcrel sdata4
; CHECK-PIC-MEDIUM-NEXT:.byte 155                       # @TType Encoding = indirect pcrel sdata4
; CHECK-PIC-LARGE-NEXT: .byte 156                       # @TType Encoding = indirect pcrel sdata8

; CHECK-NEXT:           .uleb128 .Lttbase0-.Lttbaseref1
; CHECK-NEXT:         .Lttbaseref1:
; CHECK-NEXT:           .byte	1                       # Call site Encoding = uleb128
; CHECK-NEXT:           .uleb128 .Laction_table_base0-.Lcst_begin1
; CHECK-NEXT:         .Lcst_begin1:
; CHECK-NEXT:           .p2align 2
; CHECK-NEXT:         .Lexception2:

; CHECK-NON-PIC-NEXT:   .byte	0                       # @LPStart Encoding = absptr
; CHECK-NON-PIC-X64-NEXT: .quad	main.__part.2
; CHECK-NON-PIC-X32-NEXT: .long	main.__part.2

; CHECK-PIC-NEXT:       .byte	16                      # @LPStart Encoding = pcrel
; CHECK-PIC-NEXT:     [[DOT:\.Ltmp[0-9]+]]:
; CHECK-PIC-X64-NEXT:   .quad	main.__part.2-[[DOT]]
; CHECK-PIC-X32-NEXT:   .long	main.__part.2-[[DOT]]

; CHECK-NON-PIC-SMALL-NEXT:  .byte	3               # @TType Encoding = udata4
; CHECK-NON-PIC-MEDIUM-NEXT: .byte	0               # @TType Encoding = absptr
; CHECK-NON-PIC-LARGE-NEXT:  .byte	0               # @TType Encoding = absptr

; CHECK-PIC-SMALL-NEXT:  .byte 155                      # @TType Encoding = indirect pcrel sdata4
; CHECK-PIC-MEDIUM-NEXT: .byte 155                      # @TType Encoding = indirect pcrel sdata4
; CHECK-PIC-LARGE-NEXT:  .byte 156                      # @TType Encoding = indirect pcrel sdata8

; CHECK-NEXT:           .uleb128 .Lttbase0-.Lttbaseref2
; CHECK-NEXT:         .Lttbaseref2:
; CHECK-NEXT:           .byte	1                       # Call site Encoding = uleb128
; CHECK-NEXT:           .uleb128 .Laction_table_base0-.Lcst_begin2
; CHECK-NEXT:         .Lcst_begin2:
; CHECK-NEXT:           .uleb128 main.__part.2-main.__part.2          # >> Call Site 2 <<
; CHECK-NEXT:           .uleb128 .LBB_END0_2-main.__part.2     #   Call between main.__part.2 and .LBB_END0_2
; CHECK-NEXT:           .byte	0                       #     has no landing pad
; CHECK-NEXT:           .byte	0                       #   On action: cleanup
; CHECK-NEXT:         .Laction_table_base0:
; CHECK-NEXT:           .byte	0                       # >> Action Record 1 <<
; CHECK-NEXT:                                           #   Cleanup
; CHECK-NEXT:           .byte	0                       #   No further actions
; CHECK-NEXT:           .byte	1                       # >> Action Record 2 <<
; CHECK-NEXT:                                           #   Catch TypeInfo 1
; CHECK-NEXT:           .byte	125                     #   Continue to action 1
; CHECK-NEXT:           .p2align 2
; CHECK-NEXT:                                           # >> Catch TypeInfos <<

; CHECK-NON-PIC-SMALL-NEXT:  .long _ZTIi                # TypeInfo 1
; CHECK-NON-PIC-MEDIUM-NEXT: .quad _ZTIi                # TypeInfo 1
; CHECK-NON-PIC-LARGE-NEXT:  .quad _ZTIi                # TypeInfo 1

; CHECK-PIC-NEXT:     [[DOT:\.Ltmp[0-9]+]]:
; CHECK-PIC-SMALL-NEXT:  .long .L_ZTIi.DW.stub-[[DOT]]
; CHECK-PIC-MEDIUM-NEXT: .long .L_ZTIi.DW.stub-[[DOT]]
; CHECK-PIC-LARGE-NEXT:  .quad .L_ZTIi.DW.stub-[[DOT]]

; CHECK-NEXT:         .Lttbase0:
; CHECK-NEXT:           .p2align 2
; CHECK-NEXT:                                           # -- End function