1//===----------------------------------------------------------------------===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8
9// Test that the exception object is passed correctly from the personality
10// to the landing pad even when there are wrappers around runtime function
11// __xlc_exception_handle. This test is only for the legacy AIX xlclang
12// compiler generated code. The test source consists of two C++ source files
13// t1.cpp and t2.cpp which are compiled into assembly code by the legacy AIX
14// xlclang++ compiler included in this file. This file tests for the 32-bit
15// mode.
16
17# REQUIRES: target=powerpc-ibm-aix
18# UNSUPPORTED: no-exceptions
19
20// RUN: %{cxx} -c %s -o %t1_32.o -DT1_CPP_CODE %{flags} %{compile_flags}
21// RUN: %{cxx} -c %s -o %t2_32.o -DT2_CPP_CODE %{flags} %{compile_flags}
22// RUN: %{cxx} -o %t_32.exe %t1_32.o %t2_32.o %{flags} %{link_flags}
23// RUN: %{exec} %t_32.exe
24
25#if defined(T1_CPP_CODE)
26#
27# This portion of assembly code is generated by IBM legacy xlclang++ compiler
28# from the following C++ source file for 32-bit mode.
29#
30# t1.cpp:
31#
32#extern "C" int printf(const char *, ...);
33#
34#extern "C" unsigned int * __xlc_exception_handle() __attribute__((weak, alias("wrap__xlc_exception_handle")));
35#
36#void barf() __attribute__((noinline));
37#
38#int main(void) {
39# try {
40# barf();
41# } catch(int) {
42# printf("caught int\n");
43# }
44# return 0;
45#}
46#
47#void barf() { throw 42; }
48
49.set r0,0; .set SP,1; .set RTOC,2; .set r3,3; .set r4,4
50.set r5,5; .set r6,6; .set r7,7; .set r8,8; .set r9,9
51.set r10,10; .set r11,11; .set r12,12; .set r13,13; .set r14,14
52.set r15,15; .set r16,16; .set r17,17; .set r18,18; .set r19,19
53.set r20,20; .set r21,21; .set r22,22; .set r23,23; .set r24,24
54.set r25,25; .set r26,26; .set r27,27; .set r28,28; .set r29,29
55.set r30,30; .set r31,31
56.set fp0,0; .set fp1,1; .set fp2,2; .set fp3,3; .set fp4,4
57.set fp5,5; .set fp6,6; .set fp7,7; .set fp8,8; .set fp9,9
58.set fp10,10; .set fp11,11; .set fp12,12; .set fp13,13; .set fp14,14
59.set fp15,15; .set fp16,16; .set fp17,17; .set fp18,18; .set fp19,19
60.set fp20,20; .set fp21,21; .set fp22,22; .set fp23,23; .set fp24,24
61.set fp25,25; .set fp26,26; .set fp27,27; .set fp28,28; .set fp29,29
62.set fp30,30; .set fp31,31
63.set v0,0; .set v1,1; .set v2,2; .set v3,3; .set v4,4
64.set v5,5; .set v6,6; .set v7,7; .set v8,8; .set v9,9
65.set v10,10; .set v11,11; .set v12,12; .set v13,13; .set v14,14
66.set v15,15; .set v16,16; .set v17,17; .set v18,18; .set v19,19
67.set v20,20; .set v21,21; .set v22,22; .set v23,23; .set v24,24
68.set v25,25; .set v26,26; .set v27,27; .set v28,28; .set v29,29
69.set v30,30; .set v31,31
70.set x0,0; .set x1,1; .set x2,2; .set x3,3; .set x4,4
71.set x5,5; .set x6,6; .set x7,7; .set x8,8; .set x9,9
72.set x10,10; .set x11,11; .set x12,12; .set x13,13; .set x14,14
73.set x15,15; .set x16,16; .set x17,17; .set x18,18; .set x19,19
74.set x20,20; .set x21,21; .set x22,22; .set x23,23; .set x24,24
75.set x25,25; .set x26,26; .set x27,27; .set x28,28; .set x29,29
76.set x30,30; .set x31,31; .set x32,32; .set x33,33; .set x34,34
77.set x35,35; .set x36,36; .set x37,37; .set x38,38; .set x39,39
78.set x40,40; .set x41,41; .set x42,42; .set x43,43; .set x44,44
79.set x45,45; .set x46,46; .set x47,47; .set x48,48; .set x49,49
80.set x50,50; .set x51,51; .set x52,52; .set x53,53; .set x54,54
81.set x55,55; .set x56,56; .set x57,57; .set x58,58; .set x59,59
82.set x60,60; .set x61,61; .set x62,62; .set x63,63
83.set q0,0; .set q1,1; .set q2,2; .set q3,3; .set q4,4
84.set q5,5; .set q6,6; .set q7,7; .set q8,8; .set q9,9
85.set q10,10; .set q11,11; .set q12,12; .set q13,13; .set q14,14
86.set q15,15; .set q16,16; .set q17,17; .set q18,18; .set q19,19
87.set q20,20; .set q21,21; .set q22,22; .set q23,23; .set q24,24
88.set q25,25; .set q26,26; .set q27,27; .set q28,28; .set q29,29
89.set q30,30; .set q31,31
90.set MQ,0; .set XER,1; .set DSCR,3; .set FROM_RTCU,4; .set FROM_RTCL,5
91.set FROM_DEC,6; .set LR,8; .set CTR,9; .set AMR,13; .set TID,17; .set DSISR,18
92.set DAR,19; .set TO_RTCU,20; .set TO_RTCL,21; .set TO_DEC,22; .set SDR_0,24
93.set SDR_1,25; .set SRR_0,26; .set SRR_1,27
94.set BO_dCTR_NZERO_AND_NOT,0; .set BO_dCTR_NZERO_AND_NOT_1,1
95.set BO_dCTR_ZERO_AND_NOT,2; .set BO_dCTR_ZERO_AND_NOT_1,3
96.set BO_IF_NOT,4; .set BO_IF_NOT_1,5; .set BO_IF_NOT_2,6
97.set BO_IF_NOT_3,7; .set BO_dCTR_NZERO_AND,8; .set BO_dCTR_NZERO_AND_1,9
98.set BO_dCTR_ZERO_AND,10; .set BO_dCTR_ZERO_AND_1,11; .set BO_IF,12
99.set BO_IF_1,13; .set BO_IF_2,14; .set BO_IF_3,15; .set BO_dCTR_NZERO,16
100.set BO_dCTR_NZERO_1,17; .set BO_dCTR_ZERO,18; .set BO_dCTR_ZERO_1,19
101.set BO_ALWAYS,20; .set BO_ALWAYS_1,21; .set BO_ALWAYS_2,22
102.set BO_ALWAYS_3,23; .set BO_dCTR_NZERO_8,24; .set BO_dCTR_NZERO_9,25
103.set BO_dCTR_ZERO_8,26; .set BO_dCTR_ZERO_9,27; .set BO_ALWAYS_8,28
104.set BO_ALWAYS_9,29; .set BO_ALWAYS_10,30; .set BO_ALWAYS_11,31
105.set CR0_LT,0; .set CR0_GT,1; .set CR0_EQ,2; .set CR0_SO,3
106.set CR1_FX,4; .set CR1_FEX,5; .set CR1_VX,6; .set CR1_OX,7
107.set CR2_LT,8; .set CR2_GT,9; .set CR2_EQ,10; .set CR2_SO,11
108.set CR3_LT,12; .set CR3_GT,13; .set CR3_EQ,14; .set CR3_SO,15
109.set CR4_LT,16; .set CR4_GT,17; .set CR4_EQ,18; .set CR4_SO,19
110.set CR5_LT,20; .set CR5_GT,21; .set CR5_EQ,22; .set CR5_SO,23
111.set CR6_LT,24; .set CR6_GT,25; .set CR6_EQ,26; .set CR6_SO,27
112.set CR7_LT,28; .set CR7_GT,29; .set CR7_EQ,30; .set CR7_SO,31
113.set TO_LT,16; .set TO_GT,8; .set TO_EQ,4; .set TO_LLT,2; .set TO_LGT,1
114
115 .rename H.10.NO_SYMBOL{PR},""
116 .rename H.16..__4,".__4"
117 .rename H.18..__8,".__8"
118 .rename H.20..__3,".__3"
119 .rename H.24.NO_SYMBOL{TC},""
120 .rename H.26.NO_SYMBOL{RO},""
121 .rename E.28.__STATIC{RW},"_$STATIC"
122 .rename H.30.__STATIC{TC},"_$STATIC"
123 .rename H.34.__4{TC},"__4"
124 .rename H.38.__8{TC},"__8"
125 .rename H.42.__3{TC},"__3"
126 .rename H.46._Z4barfv{TC},"_Z4barfv"
127 .rename H.50._ZTIi{TC},"_ZTIi"
128 .rename H.54.main{TC},"main"
129
130 .lglobl H.10.NO_SYMBOL{PR}
131 .globl ._Z4barfv
132 .globl .main
133 .lglobl H.16..__4
134 .lglobl H.18..__8
135 .lglobl H.20..__3
136 .lglobl H.26.NO_SYMBOL{RO}
137 .lglobl E.28.__STATIC{RW}
138 .lglobl __4{DS}
139 .lglobl __8{DS}
140 .lglobl __3{DS}
141 .globl _Z4barfv{DS}
142 .extern _ZTIi{UA}
143 .globl main{DS}
144 .extern .__cxa_allocate_exception{PR}
145 .extern .__cxa_throw{PR}
146 .extern .wrap__xlc_exception_handle{PR}
147 .extern .__xlc_catch_matchv2{PR}
148 .extern .__cxa_begin_catch{PR}
149 .extern .printf{PR}
150 .extern .__cxa_end_catch{PR}
151 .extern ._Unwind_Resume{PR}
152 .extern .__cxa_rethrow{PR}
153 .extern ._ZSt9terminatev{PR}
154
155
156# .text section
157 .file "t.cpp","Mon Jan 30 12:53:50 2023 ","IBM XL C/C++ for AIX, Version 16.1.0.13"
158
159
160
161 .csect H.10.NO_SYMBOL{PR}, 7
162._Z4barfv: # 0x00000000 (H.10.NO_SYMBOL)
163 mfspr r0,LR
164 stu SP,-80(SP)
165 st r0,88(SP)
166 cal r3,4(r0)
167 bl .__cxa_allocate_exception{PR}
168 oril r0,r0,0x0000
169 oril r4,r3,0x0000
170 st r4,64(SP)
171 cal r3,42(r0)
172 st r3,0(r4)
173 l r3,64(SP)
174 l r4,T.50._ZTIi(RTOC)
175 cal r5,0(r0)
176 bl .__cxa_throw{PR}
177 oril r0,r0,0x0000
178 l r0,88(SP)
179 mtspr LR,r0
180 cal SP,80(SP)
181 bcr BO_ALWAYS,CR0_LT
182 .long 0x00000000
183# traceback table
184 .byte 0x00 # VERSION=0
185 .byte 0x09 # LANG=TB_CPLUSPLUS
186 .byte 0x20 # IS_GL=0,IS_EPROL=0,HAS_TBOFF=1
187 # INT_PROC=0,HAS_CTL=0,TOCLESS=0
188 # FP_PRESENT=0,LOG_ABORT=0
189 .byte 0x41 # INT_HNDL=0,NAME_PRESENT=1
190 # USES_ALLOCA=0,CL_DIS_INV=WALK_ONCOND
191 # SAVES_CR=0,SAVES_LR=1
192 .byte 0x80 # STORES_BC=1,FPR_SAVED=0
193 .byte 0x00 # GPR_SAVED=0
194 .byte 0x00 # FIXEDPARMS=0
195 .byte 0x01 # FLOATPARMS=0,PARMSONSTK=1
196 .long 0x0000004c # TB_OFFSET
197 .short 8 # NAME_LEN
198 .byte "_Z4barfv" # NAME
199
200 .byte 0 # padding
201 .byte 0 # padding
202# End of traceback table
203 .long 0x00000000 # "\0\0\0\0"
204 .long 0x00000000 # "\0\0\0\0"
205 .long 0x00000000 # "\0\0\0\0"
206 .long 0x00000000 # "\0\0\0\0"
207 .long 0x00000000 # "\0\0\0\0"
208 .long 0x00000000 # "\0\0\0\0"
209.main: # 0x00000080 (H.10.NO_SYMBOL+0x80)
210 mfspr r0,LR
211 st r31,-4(SP)
212 st r30,-8(SP)
213 st r29,-12(SP)
214 st r0,8(SP)
215 stu SP,-112(SP)
216 oril r30,SP,0x0000
217 l r31,T.30.__STATIC(RTOC)
218 l r29,T.24.NO_SYMBOL(RTOC)
219 cal r3,0(r0)
220 st r3,64(r30)
221 oril r4,r31,0x0000
222 st r4,68(r30)
223 st r3,72(r30)
224 st r3,76(r30)
225 cal r3,1(r0)
226 stb r3,67(r30)
227 bl ._Z4barfv
228 cal r3,0(r0)
229 stb r3,67(r30)
230 b __L188
231__Ld4: # 0x000000d4 (H.10.NO_SYMBOL+0xd4)
232 l r31,T.30.__STATIC(RTOC)
233 l r29,T.24.NO_SYMBOL(RTOC)
234 cal r3,2(r0)
235 stb r3,67(r30)
236 bl .wrap__xlc_exception_handle{PR}
237 oril r0,r0,0x0000
238 st r3,80(r30)
239 l r4,T.50._ZTIi(RTOC)
240 cal r5,84(r30)
241 bl .__xlc_catch_matchv2{PR}
242 oril r0,r0,0x0000
243 cmpli 0,r3,0x0000
244 bc BO_IF_NOT,CR0_EQ,__L10c
245 b __L164
246__L10c: # 0x0000010c (H.10.NO_SYMBOL+0x10c)
247 l r3,80(r30)
248 bl .__cxa_begin_catch{PR}
249 oril r0,r0,0x0000
250 oril r3,r29,0x0000
251 bl .printf{PR}
252 oril r0,r0,0x0000
253 bl .__cxa_end_catch{PR}
254 oril r0,r0,0x0000
255 cal r3,0(r0)
256 stb r3,67(r30)
257 b __L188
258__L138: # 0x00000138 (H.10.NO_SYMBOL+0x138)
259 l r31,T.30.__STATIC(RTOC)
260 l r29,T.24.NO_SYMBOL(RTOC)
261 bl .__cxa_end_catch{PR}
262 oril r0,r0,0x0000
263 cal r3,0(r0)
264 stb r3,67(r30)
265 bl .wrap__xlc_exception_handle{PR}
266 oril r0,r0,0x0000
267 st r3,88(r30)
268 bl ._Unwind_Resume{PR}
269 oril r0,r0,0x0000
270__L164: # 0x00000164 (H.10.NO_SYMBOL+0x164)
271 cal r3,2(r0)
272 stb r3,67(r30)
273 bl .wrap__xlc_exception_handle{PR}
274 oril r0,r0,0x0000
275 st r3,92(r30)
276 bl .__cxa_begin_catch{PR}
277 oril r0,r0,0x0000
278 bl .__cxa_rethrow{PR}
279 oril r0,r0,0x0000
280__L188: # 0x00000188 (H.10.NO_SYMBOL+0x188)
281 cal r3,0(r0)
282 b __L1b8
283__L190: # 0x00000190 (H.10.NO_SYMBOL+0x190)
284 bl .wrap__xlc_exception_handle{PR}
285 oril r0,r0,0x0000
286 st r3,96(r30)
287 bl ._Unwind_Resume{PR}
288 oril r0,r0,0x0000
289__L1a4: # 0x000001a4 (H.10.NO_SYMBOL+0x1a4)
290 l r31,T.30.__STATIC(RTOC)
291 l r29,T.24.NO_SYMBOL(RTOC)
292 bl ._ZSt9terminatev{PR}
293 oril r0,r0,0x0000
294 b __L190
295__L1b8: # 0x000001b8 (H.10.NO_SYMBOL+0x1b8)
296 l SP,0(SP)
297 l r29,-12(SP)
298 l r30,-8(SP)
299 l r31,-4(SP)
300 l r0,8(SP)
301 mtspr LR,r0
302 bcr BO_ALWAYS,CR0_LT
303 .long 0x00000000
304# traceback table
305 .byte 0x00 # VERSION=0
306 .byte 0x09 # LANG=TB_CPLUSPLUS
307 .byte 0x28 # IS_GL=0,IS_EPROL=0,HAS_TBOFF=1
308 # INT_PROC=0,HAS_CTL=1,TOCLESS=0
309 # FP_PRESENT=0,LOG_ABORT=0
310 .byte 0x61 # INT_HNDL=0,NAME_PRESENT=1
311 # USES_ALLOCA=1,CL_DIS_INV=WALK_ONCOND
312 # SAVES_CR=0,SAVES_LR=1
313 .byte 0x80 # STORES_BC=1,FPR_SAVED=0
314 .byte 0x03 # GPR_SAVED=3
315 .byte 0x00 # FIXEDPARMS=0
316 .byte 0x01 # FLOATPARMS=0,PARMSONSTK=1
317 .long 0x00000154 # TB_OFFSET
318 .long 0x00000001 # NUM_CTL_INFO
319 .long 0x00000040 # ctl_info_disp[0]
320 .short 4 # NAME_LEN
321 .byte "main" # NAME
322
323 .byte 30 # ALLOCA_REG
324 .byte 0 # padding
325# End of traceback table
326 .long 0x00000000 # "\0\0\0\0"
327 .long 0x00000000 # "\0\0\0\0"
328 .long 0x00000000 # "\0\0\0\0"
329H.16..__4: # 0x00000200 (H.10.NO_SYMBOL+0x200)
330 b __L1a4
331 bcr BO_ALWAYS,CR0_LT
332 .long 0x00000000
333# traceback table
334 .byte 0x00 # VERSION=0
335 .byte 0x09 # LANG=TB_CPLUSPLUS
336 .byte 0x20 # IS_GL=0,IS_EPROL=0,HAS_TBOFF=1
337 # INT_PROC=0,HAS_CTL=0,TOCLESS=0
338 # FP_PRESENT=0,LOG_ABORT=0
339 .byte 0x40 # INT_HNDL=0,NAME_PRESENT=1
340 # USES_ALLOCA=0,CL_DIS_INV=WALK_ONCOND
341 # SAVES_CR=0,SAVES_LR=0
342 .byte 0x00 # STORES_BC=0,FPR_SAVED=0
343 .byte 0x00 # GPR_SAVED=0
344 .byte 0x00 # FIXEDPARMS=0
345 .byte 0x01 # FLOATPARMS=0,PARMSONSTK=1
346 .long 0x00000008 # TB_OFFSET
347 .short 3 # NAME_LEN
348 .byte "__4" # NAME
349
350 .byte 0 # padding
351 .byte 0 # padding
352 .byte 0 # padding
353# End of traceback table
354H.18..__8: # 0x00000220 (H.10.NO_SYMBOL+0x220)
355 b __L138
356 bcr BO_ALWAYS,CR0_LT
357 .long 0x00000000
358# traceback table
359 .byte 0x00 # VERSION=0
360 .byte 0x09 # LANG=TB_CPLUSPLUS
361 .byte 0x20 # IS_GL=0,IS_EPROL=0,HAS_TBOFF=1
362 # INT_PROC=0,HAS_CTL=0,TOCLESS=0
363 # FP_PRESENT=0,LOG_ABORT=0
364 .byte 0x40 # INT_HNDL=0,NAME_PRESENT=1
365 # USES_ALLOCA=0,CL_DIS_INV=WALK_ONCOND
366 # SAVES_CR=0,SAVES_LR=0
367 .byte 0x00 # STORES_BC=0,FPR_SAVED=0
368 .byte 0x00 # GPR_SAVED=0
369 .byte 0x00 # FIXEDPARMS=0
370 .byte 0x01 # FLOATPARMS=0,PARMSONSTK=1
371 .long 0x00000008 # TB_OFFSET
372 .short 3 # NAME_LEN
373 .byte "__8" # NAME
374
375 .byte 0 # padding
376 .byte 0 # padding
377 .byte 0 # padding
378# End of traceback table
379H.20..__3: # 0x00000240 (H.10.NO_SYMBOL+0x240)
380 b __Ld4
381 bcr BO_ALWAYS,CR0_LT
382 .long 0x00000000
383# traceback table
384 .byte 0x00 # VERSION=0
385 .byte 0x09 # LANG=TB_CPLUSPLUS
386 .byte 0x20 # IS_GL=0,IS_EPROL=0,HAS_TBOFF=1
387 # INT_PROC=0,HAS_CTL=0,TOCLESS=0
388 # FP_PRESENT=0,LOG_ABORT=0
389 .byte 0x40 # INT_HNDL=0,NAME_PRESENT=1
390 # USES_ALLOCA=0,CL_DIS_INV=WALK_ONCOND
391 # SAVES_CR=0,SAVES_LR=0
392 .byte 0x00 # STORES_BC=0,FPR_SAVED=0
393 .byte 0x00 # GPR_SAVED=0
394 .byte 0x00 # FIXEDPARMS=0
395 .byte 0x01 # FLOATPARMS=0,PARMSONSTK=1
396 .long 0x00000008 # TB_OFFSET
397 .short 3 # NAME_LEN
398 .byte "__3" # NAME
399
400 .byte 0 # padding
401 .byte 0 # padding
402 .byte 0 # padding
403# End of traceback table
404 .long 0x00000000 # "\0\0\0\0"
405 .long 0x00000000 # "\0\0\0\0"
406 .long 0x00000000 # "\0\0\0\0"
407 .long 0x00000000 # "\0\0\0\0"
408 .long 0x00000000 # "\0\0\0\0"
409 .long 0x00000000 # "\0\0\0\0"
410 .long 0x00000000 # "\0\0\0\0"
411 .long 0x00000000 # "\0\0\0\0"
412# End csect H.10.NO_SYMBOL{PR}
413
414# .data section
415
416
417 .toc # 0x00000280
418T.46._Z4barfv:
419 .tc H.46._Z4barfv{TC},_Z4barfv{DS}
420T.50._ZTIi:
421 .tc H.50._ZTIi{TC},_ZTIi{UA}
422T.54.main:
423 .tc H.54.main{TC},main{DS}
424T.30.__STATIC:
425 .tc H.30.__STATIC{TC},E.28.__STATIC{RW}
426T.24.NO_SYMBOL:
427 .tc H.24.NO_SYMBOL{TC},H.26.NO_SYMBOL{RO}
428T.34.__4:
429 .tc H.34.__4{TC},__4{DS}
430T.38.__8:
431 .tc H.38.__8{TC},__8{DS}
432T.42.__3:
433 .tc H.42.__3{TC},__3{DS}
434
435
436 .csect _Z4barfv{DS}
437 .long ._Z4barfv # "\0\0\0\0"
438 .long TOC{TC0} # "\0\0\002\200"
439 .long 0x00000000 # "\0\0\0\0"
440# End csect _Z4barfv{DS}
441
442
443 .csect main{DS}
444 .long .main # "\0\0\0\200"
445 .long TOC{TC0} # "\0\0\002\200"
446 .long 0x00000000 # "\0\0\0\0"
447# End csect main{DS}
448
449
450 .csect __4{DS}
451 .long H.16..__4 # "\0\0\002\0"
452 .long TOC{TC0} # "\0\0\002\200"
453 .long 0x00000000 # "\0\0\0\0"
454# End csect __4{DS}
455
456
457 .csect __8{DS}
458 .long H.18..__8 # "\0\0\002 "
459 .long TOC{TC0} # "\0\0\002\200"
460 .long 0x00000000 # "\0\0\0\0"
461# End csect __8{DS}
462
463
464 .csect __3{DS}
465 .long H.20..__3 # "\0\0\002@"
466 .long TOC{TC0} # "\0\0\002\200"
467 .long 0x00000000 # "\0\0\0\0"
468# End csect __3{DS}
469
470
471 .csect E.28.__STATIC{RW}, 3
472 .long 0x1cedbeef # "\034\355\276\357"
473 .long 0x00000003 # "\0\0\0\003"
474 .long 0x00000000 # "\0\0\0\0"
475 .long __3{DS} # "\0\0\002\320"
476 .long 0xffffffff # "\377\377\377\377"
477 .long 0x00000000 # "\0\0\0\0"
478 .long 0x00000000 # "\0\0\0\0"
479 .long 0x00000000 # "\0\0\0\0"
480 .long __8{DS} # "\0\0\002\304"
481 .long 0xfffffffe # "\377\377\377\376"
482 .long 0x00000000 # "\0\0\0\0"
483 .long 0x00000000 # "\0\0\0\0"
484 .long 0x00000000 # "\0\0\0\0"
485 .long __4{DS} # "\0\0\002\270"
486 .long 0xfffffffc # "\377\377\377\374"
487 .long 0x00000000 # "\0\0\0\0"
488 .long 0x00000000 # "\0\0\0\0"
489# End csect E.28.__STATIC{RW}
490
491
492 .csect H.26.NO_SYMBOL{RO}, 3
493 .long 0x63617567 # "caug"
494 .long 0x68742069 # "ht i"
495 .long 0x6e740a00 # "nt\n\0"
496# End csect H.26.NO_SYMBOL{RO}
497
498
499
500# .bss section
501
502
503# dwarf sections
504
505# end dwarf sections
506#endif // defined(T1_CPP_CODE)
507
508#if defined(T2_CPP_CODE)
509#
510# This portion of assembly code is generated by IBM legacy xlclang++ compiler
511# from the following C++ source file for 64-bit mode.
512#
513# t2.cpp
514#
515#extern "C" int printf(const char *, ...);
516#
517#extern "C" unsigned int * __xlc_exception_handle();
518#
519#extern "C" unsigned int * wrap__xlc_exception_handle() {
520# printf("wrap__xlc_exception_handle called\n");
521# return __xlc_exception_handle();
522#}
523#
524
525.set r0,0; .set SP,1; .set RTOC,2; .set r3,3; .set r4,4
526.set r5,5; .set r6,6; .set r7,7; .set r8,8; .set r9,9
527.set r10,10; .set r11,11; .set r12,12; .set r13,13; .set r14,14
528.set r15,15; .set r16,16; .set r17,17; .set r18,18; .set r19,19
529.set r20,20; .set r21,21; .set r22,22; .set r23,23; .set r24,24
530.set r25,25; .set r26,26; .set r27,27; .set r28,28; .set r29,29
531.set r30,30; .set r31,31
532.set fp0,0; .set fp1,1; .set fp2,2; .set fp3,3; .set fp4,4
533.set fp5,5; .set fp6,6; .set fp7,7; .set fp8,8; .set fp9,9
534.set fp10,10; .set fp11,11; .set fp12,12; .set fp13,13; .set fp14,14
535.set fp15,15; .set fp16,16; .set fp17,17; .set fp18,18; .set fp19,19
536.set fp20,20; .set fp21,21; .set fp22,22; .set fp23,23; .set fp24,24
537.set fp25,25; .set fp26,26; .set fp27,27; .set fp28,28; .set fp29,29
538.set fp30,30; .set fp31,31
539.set v0,0; .set v1,1; .set v2,2; .set v3,3; .set v4,4
540.set v5,5; .set v6,6; .set v7,7; .set v8,8; .set v9,9
541.set v10,10; .set v11,11; .set v12,12; .set v13,13; .set v14,14
542.set v15,15; .set v16,16; .set v17,17; .set v18,18; .set v19,19
543.set v20,20; .set v21,21; .set v22,22; .set v23,23; .set v24,24
544.set v25,25; .set v26,26; .set v27,27; .set v28,28; .set v29,29
545.set v30,30; .set v31,31
546.set x0,0; .set x1,1; .set x2,2; .set x3,3; .set x4,4
547.set x5,5; .set x6,6; .set x7,7; .set x8,8; .set x9,9
548.set x10,10; .set x11,11; .set x12,12; .set x13,13; .set x14,14
549.set x15,15; .set x16,16; .set x17,17; .set x18,18; .set x19,19
550.set x20,20; .set x21,21; .set x22,22; .set x23,23; .set x24,24
551.set x25,25; .set x26,26; .set x27,27; .set x28,28; .set x29,29
552.set x30,30; .set x31,31; .set x32,32; .set x33,33; .set x34,34
553.set x35,35; .set x36,36; .set x37,37; .set x38,38; .set x39,39
554.set x40,40; .set x41,41; .set x42,42; .set x43,43; .set x44,44
555.set x45,45; .set x46,46; .set x47,47; .set x48,48; .set x49,49
556.set x50,50; .set x51,51; .set x52,52; .set x53,53; .set x54,54
557.set x55,55; .set x56,56; .set x57,57; .set x58,58; .set x59,59
558.set x60,60; .set x61,61; .set x62,62; .set x63,63
559.set q0,0; .set q1,1; .set q2,2; .set q3,3; .set q4,4
560.set q5,5; .set q6,6; .set q7,7; .set q8,8; .set q9,9
561.set q10,10; .set q11,11; .set q12,12; .set q13,13; .set q14,14
562.set q15,15; .set q16,16; .set q17,17; .set q18,18; .set q19,19
563.set q20,20; .set q21,21; .set q22,22; .set q23,23; .set q24,24
564.set q25,25; .set q26,26; .set q27,27; .set q28,28; .set q29,29
565.set q30,30; .set q31,31
566.set MQ,0; .set XER,1; .set DSCR,3; .set FROM_RTCU,4; .set FROM_RTCL,5
567.set FROM_DEC,6; .set LR,8; .set CTR,9; .set AMR,13; .set TID,17; .set DSISR,18
568.set DAR,19; .set TO_RTCU,20; .set TO_RTCL,21; .set TO_DEC,22; .set SDR_0,24
569.set SDR_1,25; .set SRR_0,26; .set SRR_1,27
570.set BO_dCTR_NZERO_AND_NOT,0; .set BO_dCTR_NZERO_AND_NOT_1,1
571.set BO_dCTR_ZERO_AND_NOT,2; .set BO_dCTR_ZERO_AND_NOT_1,3
572.set BO_IF_NOT,4; .set BO_IF_NOT_1,5; .set BO_IF_NOT_2,6
573.set BO_IF_NOT_3,7; .set BO_dCTR_NZERO_AND,8; .set BO_dCTR_NZERO_AND_1,9
574.set BO_dCTR_ZERO_AND,10; .set BO_dCTR_ZERO_AND_1,11; .set BO_IF,12
575.set BO_IF_1,13; .set BO_IF_2,14; .set BO_IF_3,15; .set BO_dCTR_NZERO,16
576.set BO_dCTR_NZERO_1,17; .set BO_dCTR_ZERO,18; .set BO_dCTR_ZERO_1,19
577.set BO_ALWAYS,20; .set BO_ALWAYS_1,21; .set BO_ALWAYS_2,22
578.set BO_ALWAYS_3,23; .set BO_dCTR_NZERO_8,24; .set BO_dCTR_NZERO_9,25
579.set BO_dCTR_ZERO_8,26; .set BO_dCTR_ZERO_9,27; .set BO_ALWAYS_8,28
580.set BO_ALWAYS_9,29; .set BO_ALWAYS_10,30; .set BO_ALWAYS_11,31
581.set CR0_LT,0; .set CR0_GT,1; .set CR0_EQ,2; .set CR0_SO,3
582.set CR1_FX,4; .set CR1_FEX,5; .set CR1_VX,6; .set CR1_OX,7
583.set CR2_LT,8; .set CR2_GT,9; .set CR2_EQ,10; .set CR2_SO,11
584.set CR3_LT,12; .set CR3_GT,13; .set CR3_EQ,14; .set CR3_SO,15
585.set CR4_LT,16; .set CR4_GT,17; .set CR4_EQ,18; .set CR4_SO,19
586.set CR5_LT,20; .set CR5_GT,21; .set CR5_EQ,22; .set CR5_SO,23
587.set CR6_LT,24; .set CR6_GT,25; .set CR6_EQ,26; .set CR6_SO,27
588.set CR7_LT,28; .set CR7_GT,29; .set CR7_EQ,30; .set CR7_SO,31
589.set TO_LT,16; .set TO_GT,8; .set TO_EQ,4; .set TO_LLT,2; .set TO_LGT,1
590
591 .rename H.10.NO_SYMBOL{PR},""
592 .rename H.16.NO_SYMBOL{TC},""
593 .rename H.18.NO_SYMBOL{RO},""
594 .rename H.22.wrap__xlc_exception_handle{TC},"wrap__xlc_exception_handle"
595
596 .lglobl H.10.NO_SYMBOL{PR}
597 .globl .wrap__xlc_exception_handle
598 .lglobl H.18.NO_SYMBOL{RO}
599 .globl wrap__xlc_exception_handle{DS}
600 .extern .printf{PR}
601 .extern .__xlc_exception_handle{PR}
602
603
604# .text section
605 .file "t2.cpp","Mon Jan 30 12:53:50 2023 ","IBM XL C/C++ for AIX, Version 16.1.0.13"
606
607
608
609 .csect H.10.NO_SYMBOL{PR}, 7
610.wrap__xlc_exception_handle: # 0x00000000 (H.10.NO_SYMBOL)
611 mfspr r0,LR
612 st r31,-4(SP)
613 st r0,8(SP)
614 stu SP,-64(SP)
615 l r31,T.16.NO_SYMBOL(RTOC)
616 oril r3,r31,0x0000
617 bl .printf{PR}
618 oril r0,r0,0x0000
619 bl .__xlc_exception_handle{PR}
620 oril r0,r0,0x0000
621 l r0,72(SP)
622 mtspr LR,r0
623 cal SP,64(SP)
624 l r31,-4(SP)
625 bcr BO_ALWAYS,CR0_LT
626 .long 0x00000000
627# traceback table
628 .byte 0x00 # VERSION=0
629 .byte 0x09 # LANG=TB_CPLUSPLUS
630 .byte 0x20 # IS_GL=0,IS_EPROL=0,HAS_TBOFF=1
631 # INT_PROC=0,HAS_CTL=0,TOCLESS=0
632 # FP_PRESENT=0,LOG_ABORT=0
633 .byte 0x41 # INT_HNDL=0,NAME_PRESENT=1
634 # USES_ALLOCA=0,CL_DIS_INV=WALK_ONCOND
635 # SAVES_CR=0,SAVES_LR=1
636 .byte 0x80 # STORES_BC=1,FPR_SAVED=0
637 .byte 0x01 # GPR_SAVED=1
638 .byte 0x00 # FIXEDPARMS=0
639 .byte 0x01 # FLOATPARMS=0,PARMSONSTK=1
640 .long 0x0000003c # TB_OFFSET
641 .short 26 # NAME_LEN
642 .byte "wrap__xlc_exception_handle" # NAME
643
644# End of traceback table
645 .long 0x00000000 # "\0\0\0\0"
646 .long 0x00000000 # "\0\0\0\0"
647 .long 0x00000000 # "\0\0\0\0"
648 .long 0x00000000 # "\0\0\0\0"
649 .long 0x00000000 # "\0\0\0\0"
650 .long 0x00000000 # "\0\0\0\0"
651# End csect H.10.NO_SYMBOL{PR}
652
653# .data section
654
655
656 .toc # 0x00000080
657T.22.wrap__xlc_exception_handle:
658 .tc H.22.wrap__xlc_exception_handle{TC},wrap__xlc_exception_handle{DS}
659T.16.NO_SYMBOL:
660 .tc H.16.NO_SYMBOL{TC},H.18.NO_SYMBOL{RO}
661
662
663 .csect wrap__xlc_exception_handle{DS}
664 .long .wrap__xlc_exception_handle# "\0\0\0\0"
665 .long TOC{TC0} # "\0\0\0\200"
666 .long 0x00000000 # "\0\0\0\0"
667# End csect wrap__xlc_exception_handle{DS}
668
669
670 .csect H.18.NO_SYMBOL{RO}, 3
671 .long 0x77726170 # "wrap"
672 .long 0x5f5f786c # "__xl"
673 .long 0x635f6578 # "c_ex"
674 .long 0x63657074 # "cept"
675 .long 0x696f6e5f # "ion_"
676 .long 0x68616e64 # "hand"
677 .long 0x6c652063 # "le c"
678 .long 0x616c6c65 # "alle"
679# End csect H.18.NO_SYMBOL{RO}
680 .long 0x640a0000 # "d\n\0\0"
681
682
683
684# .bss section
685
686
687# dwarf sections
688
689# end dwarf sections
690#endif // defined(T2_CPP_CODE)
691

source code of libcxxabi/test/vendor/ibm/aix_xlclang_passing_excp_obj_32.pass.sh.S