summaryrefslogtreecommitdiff
path: root/libcxxabi
diff options
context:
space:
mode:
authorXing Xue <xingxue@outlook.com>2023-02-15 11:14:52 -0500
committerXing Xue <xingxue@outlook.com>2023-02-15 11:14:52 -0500
commitb413b84a704e376860048e339e669adc6596a3ee (patch)
tree00675c006f145662e4b3acc088b598bf99144468 /libcxxabi
parentb0bfbad19b0698c51a0b932f82f778e67f2d7e0c (diff)
downloadllvm-b413b84a704e376860048e339e669adc6596a3ee.tar.gz
[libc++abi][AIX] Skip non-C++ EH aware frames when retrieving exception object
Summary: The personality routine for the legacy AIX xlclang++ compiler uses the stack slot reserved for compilers to pass the exception object to the landing pad. The landing pad retrieves the exception object with a call to the runtime function __xlc_exception_handle(). The current implementation incorrectly assumes that __xlc_exception_handle() should go up one stack frame to get to the stack frame of the caller of __xlc_exception_handle(), which is supposedly the stack frame of the function containing the landing pad. However, this does not always work, e.g., the xlclang++ compiler sometimes generates a wrapper of __xlc_exception_handle() and calls the wrapper from the landing pad for optimization purposes. This patch changes the implementation to unwind the stack from __xlc_exception_handle() and skip frames not associated with functions that are C++ EH-aware until a frame associated with a C++ EH-aware function is found and then retrieving the exception object with the expectation that the located frame is the one that the personality routine installed as it transferred control to the landing pad. Reviewed by: cebowleratibm, hubert.reinterpretcast, daltenty Differential Revision: https://reviews.llvm.org/D143010
Diffstat (limited to 'libcxxabi')
-rw-r--r--libcxxabi/src/aix_state_tab_eh.inc85
-rw-r--r--libcxxabi/test/vendor/ibm/aix_xlclang_passing_excp_obj_32.pass.sh.S690
-rw-r--r--libcxxabi/test/vendor/ibm/aix_xlclang_passing_excp_obj_64.pass.sh.S710
3 files changed, 1456 insertions, 29 deletions
diff --git a/libcxxabi/src/aix_state_tab_eh.inc b/libcxxabi/src/aix_state_tab_eh.inc
index 128a0ab34af7..3bb09ed27573 100644
--- a/libcxxabi/src/aix_state_tab_eh.inc
+++ b/libcxxabi/src/aix_state_tab_eh.inc
@@ -14,10 +14,6 @@
#include <stdio.h>
#include <sys/debug.h>
-#if !__has_cpp_attribute(clang::optnone)
-#error This file requires clang::optnone attribute support
-#endif
-
/*
The legacy IBM xlC and xlclang++ compilers use the state table for EH
instead of the range table. Destructors, or addresses of the possible catch
@@ -563,7 +559,8 @@ __xlcxx_personality_v0(int version, _Unwind_Action actions, uint64_t exceptionCl
uintptr_t *currentSP = reinterpret_cast<uintptr_t*>(_Unwind_GetGR(context, 1));
uintptr_t *callersSP = reinterpret_cast<uintptr_t*>(currentSP[0]);
callersSP[3] = reinterpret_cast<uintptr_t>(unwind_exception);
- _LIBCXXABI_TRACE_STATETAB("Handshake: set unwind_exception=%p in stack=%p\n", reinterpret_cast<void*>(unwind_exception), reinterpret_cast<void*>(callersSP));
+ _LIBCXXABI_TRACE_STATETAB("Handshake: save unwind_exception=%p in stack=%p\n",
+ reinterpret_cast<void*>(unwind_exception), reinterpret_cast<void*>(callersSP));
// Jump to the handler.
_Unwind_SetIP(context, results.landingPad);
return _URC_INSTALL_CONTEXT;
@@ -641,38 +638,68 @@ _LIBCXXABI_FUNC_VIS void __xlc_throw_badexception() {
__cxa_throw(newexception, const_cast<std::type_info*>(&typeid(std::bad_exception)), 0);
}
-// force_a_stackframe
-// This function is called by __xlc_exception_handle() to ensure a stack frame
-// is created for __xlc_exception_handle().
-__attribute__((noinline, optnone))
-static void force_a_stackframe() {}
+// skip_non_cxx_eh_aware_frames
+// This function skips non-C++ EH aware stack frames by unwinding from the
+// stack frame pointed by 'Sp' and returns the first C++ EH aware stack frame
+// found. 'Pc' is an instruction address inside the function that owns the
+// stack frame pointed to by 'Sp'.
+static uintptr_t* skip_non_cxx_eh_aware_frames(uint32_t* Pc, uintptr_t* Sp) {
+ uint32_t* currentPc = Pc;
+ uintptr_t* currentStack = Sp;
+
+ // Loop until a C++ EH aware frame is found or the return address is 0,
+ // which is the return address of the startup function '__start'.
+ while (currentPc != 0) {
+ uint32_t* p = currentPc;
+
+ // Keep looking forward until a word of 0 is found. The traceback
+ // table starts at the following word.
+ while (*p)
+ ++p;
+ tbtable* TBTable = reinterpret_cast<tbtable*>(p + 1);
+
+ // A stack frame with a C++ state table is C++ EH aware.
+ if (TBTable->tb.lang == TB_CPLUSPLUS && TBTable->tb.has_ctl)
+ return currentStack;
+
+ // Move up one stack frame.
+ currentStack = reinterpret_cast<uintptr_t*>(currentStack[0]);
+ // Get the value of the LR (saved, prior to incrementing the SP, by the
+ // prolog of the function just inspected) from the frame.
+ currentPc = reinterpret_cast<uint32_t*>(currentStack[2]);
+ }
+ // This should not happen.
+ _LIBCXXABI_TRACE_STATETAB0("skip_non_cxx_eh_aware_frames() reached the end of stack frames, aborting\n");
+ abort();
+}
// __xlc_exception_handle
// This function is for xlclang++. It returns the address of the exception
// object stored in the reserved field in the stack of the caller of the
// function that calls __xlc_exception_handle() (within the link area for the
// call to the latter). The address is stored by the personality routine for
-// xlclang++ compiled code. The implementation of __xlc_exception_handle()
-// assumes a stack frame is created for it. The following ensures this
-// assumption holds true: 1) a call to force_a_stackframe() is made inside
-// __xlc_exception_handle() to make it non-leaf; and 2) optimizations are
-// disabled for this function with attribute 'optnone'. Note: this function
-// may not work as expected if these are changed.
-__attribute__((optnone))
+// xlclang++ compiled code. If __xlc_exception_handle() is called by
+// non-C++ EH aware functions, their frames are skipped until a C++ EH aware
+// frame is found.
+// Note: make sure __xlc_excpetion_handle() is a non-leaf function. Currently
+// it calls skip_non_cxx_eh_aware_frames(), which in turn calls abort().
_LIBCXXABI_FUNC_VIS uintptr_t __xlc_exception_handle() {
- // Make a call to force_a_stackframe() so that the compiler creates a stack
- // frame for this function.
- force_a_stackframe();
-
// Get the SP of this function, i.e., __xlc_exception_handle().
- uintptr_t *lastStack;
- asm("mr %0, 1" : "=r"(lastStack));
- // Get the SP of the caller of __xlc_exception_handle().
- uintptr_t *callerStack = reinterpret_cast<uintptr_t*>(lastStack[0]);
- // Get the SP of the caller of the caller.
- uintptr_t *callerStack2 = reinterpret_cast<uintptr_t*>(callerStack[0]);
- uintptr_t exceptionObject = callerStack2[3];
- _LIBCXXABI_TRACE_STATETAB("Handshake: exceptionObject=%p from stack=%p\n", reinterpret_cast<void*>(exceptionObject), reinterpret_cast<void*>(callerStack2));
+ uintptr_t* lastStack = reinterpret_cast<uintptr_t*>(__builtin_frame_address(0));
+ // Move one frame up to the frame of the caller of __xlc_exception_handle().
+ lastStack = reinterpret_cast<uintptr_t*>(lastStack[0]);
+ // Get the return address of this function, i.e., __xlc_exception_handle().
+ uint32_t* returnAddress = reinterpret_cast<uint32_t*>(__builtin_return_address(0));
+
+ // Skip non-C++ EH aware frames and get the first C++ EH aware frame.
+ uintptr_t* callerStack = skip_non_cxx_eh_aware_frames(returnAddress, lastStack);
+
+ // Get the SP of the caller of the C++ EH aware caller.
+ callerStack = reinterpret_cast<uintptr_t*>(callerStack[0]);
+ // Retrieve the exception object in the stack slot saved by the personality.
+ uintptr_t exceptionObject = callerStack[3];
+ _LIBCXXABI_TRACE_STATETAB("Handshake: retrieve exceptionObject=%p from stack=%p\n",
+ reinterpret_cast<void*>(exceptionObject), reinterpret_cast<void*>(callerStack));
return exceptionObject;
}
diff --git a/libcxxabi/test/vendor/ibm/aix_xlclang_passing_excp_obj_32.pass.sh.S b/libcxxabi/test/vendor/ibm/aix_xlclang_passing_excp_obj_32.pass.sh.S
new file mode 100644
index 000000000000..d8a3ae0e91a0
--- /dev/null
+++ b/libcxxabi/test/vendor/ibm/aix_xlclang_passing_excp_obj_32.pass.sh.S
@@ -0,0 +1,690 @@
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// Test that the exception object is passed correctly from the personality
+// to the landing pad even when there are wrappers around runtime function
+// __xlc_exception_handle. This test is only for the legacy AIX xlclang
+// compiler generated code. The test source consists of two C++ source files
+// t1.cpp and t2.cpp which are compiled into assembly code by the legacy AIX
+// xlclang++ compiler included in this file. This file tests for the 32-bit
+// mode.
+
+# REQUIRES: target=powerpc-ibm-aix
+# UNSUPPORTED: no-exceptions
+
+// RUN: %{cxx} -c %s -o %t1_32.o -DT1_CPP_CODE %{flags} %{compile_flags}
+// RUN: %{cxx} -c %s -o %t2_32.o -DT2_CPP_CODE %{flags} %{compile_flags}
+// RUN: %{cxx} -o %t_32.exe %t1_32.o %t2_32.o %{flags} %{link_flags}
+// RUN: %{exec} %t_32.exe
+
+#if defined(T1_CPP_CODE)
+#
+# This portion of assembly code is generated by IBM legacy xlclang++ compiler
+# from the following C++ source file for 32-bit mode.
+#
+# t1.cpp:
+#
+#extern "C" int printf(const char *, ...);
+#
+#extern "C" unsigned int * __xlc_exception_handle() __attribute__((weak, alias("wrap__xlc_exception_handle")));
+#
+#void barf() __attribute__((noinline));
+#
+#int main(void) {
+# try {
+# barf();
+# } catch(int) {
+# printf("caught int\n");
+# }
+# return 0;
+#}
+#
+#void barf() { throw 42; }
+
+.set r0,0; .set SP,1; .set RTOC,2; .set r3,3; .set r4,4
+.set r5,5; .set r6,6; .set r7,7; .set r8,8; .set r9,9
+.set r10,10; .set r11,11; .set r12,12; .set r13,13; .set r14,14
+.set r15,15; .set r16,16; .set r17,17; .set r18,18; .set r19,19
+.set r20,20; .set r21,21; .set r22,22; .set r23,23; .set r24,24
+.set r25,25; .set r26,26; .set r27,27; .set r28,28; .set r29,29
+.set r30,30; .set r31,31
+.set fp0,0; .set fp1,1; .set fp2,2; .set fp3,3; .set fp4,4
+.set fp5,5; .set fp6,6; .set fp7,7; .set fp8,8; .set fp9,9
+.set fp10,10; .set fp11,11; .set fp12,12; .set fp13,13; .set fp14,14
+.set fp15,15; .set fp16,16; .set fp17,17; .set fp18,18; .set fp19,19
+.set fp20,20; .set fp21,21; .set fp22,22; .set fp23,23; .set fp24,24
+.set fp25,25; .set fp26,26; .set fp27,27; .set fp28,28; .set fp29,29
+.set fp30,30; .set fp31,31
+.set v0,0; .set v1,1; .set v2,2; .set v3,3; .set v4,4
+.set v5,5; .set v6,6; .set v7,7; .set v8,8; .set v9,9
+.set v10,10; .set v11,11; .set v12,12; .set v13,13; .set v14,14
+.set v15,15; .set v16,16; .set v17,17; .set v18,18; .set v19,19
+.set v20,20; .set v21,21; .set v22,22; .set v23,23; .set v24,24
+.set v25,25; .set v26,26; .set v27,27; .set v28,28; .set v29,29
+.set v30,30; .set v31,31
+.set x0,0; .set x1,1; .set x2,2; .set x3,3; .set x4,4
+.set x5,5; .set x6,6; .set x7,7; .set x8,8; .set x9,9
+.set x10,10; .set x11,11; .set x12,12; .set x13,13; .set x14,14
+.set x15,15; .set x16,16; .set x17,17; .set x18,18; .set x19,19
+.set x20,20; .set x21,21; .set x22,22; .set x23,23; .set x24,24
+.set x25,25; .set x26,26; .set x27,27; .set x28,28; .set x29,29
+.set x30,30; .set x31,31; .set x32,32; .set x33,33; .set x34,34
+.set x35,35; .set x36,36; .set x37,37; .set x38,38; .set x39,39
+.set x40,40; .set x41,41; .set x42,42; .set x43,43; .set x44,44
+.set x45,45; .set x46,46; .set x47,47; .set x48,48; .set x49,49
+.set x50,50; .set x51,51; .set x52,52; .set x53,53; .set x54,54
+.set x55,55; .set x56,56; .set x57,57; .set x58,58; .set x59,59
+.set x60,60; .set x61,61; .set x62,62; .set x63,63
+.set q0,0; .set q1,1; .set q2,2; .set q3,3; .set q4,4
+.set q5,5; .set q6,6; .set q7,7; .set q8,8; .set q9,9
+.set q10,10; .set q11,11; .set q12,12; .set q13,13; .set q14,14
+.set q15,15; .set q16,16; .set q17,17; .set q18,18; .set q19,19
+.set q20,20; .set q21,21; .set q22,22; .set q23,23; .set q24,24
+.set q25,25; .set q26,26; .set q27,27; .set q28,28; .set q29,29
+.set q30,30; .set q31,31
+.set MQ,0; .set XER,1; .set DSCR,3; .set FROM_RTCU,4; .set FROM_RTCL,5
+.set FROM_DEC,6; .set LR,8; .set CTR,9; .set AMR,13; .set TID,17; .set DSISR,18
+.set DAR,19; .set TO_RTCU,20; .set TO_RTCL,21; .set TO_DEC,22; .set SDR_0,24
+.set SDR_1,25; .set SRR_0,26; .set SRR_1,27
+.set BO_dCTR_NZERO_AND_NOT,0; .set BO_dCTR_NZERO_AND_NOT_1,1
+.set BO_dCTR_ZERO_AND_NOT,2; .set BO_dCTR_ZERO_AND_NOT_1,3
+.set BO_IF_NOT,4; .set BO_IF_NOT_1,5; .set BO_IF_NOT_2,6
+.set BO_IF_NOT_3,7; .set BO_dCTR_NZERO_AND,8; .set BO_dCTR_NZERO_AND_1,9
+.set BO_dCTR_ZERO_AND,10; .set BO_dCTR_ZERO_AND_1,11; .set BO_IF,12
+.set BO_IF_1,13; .set BO_IF_2,14; .set BO_IF_3,15; .set BO_dCTR_NZERO,16
+.set BO_dCTR_NZERO_1,17; .set BO_dCTR_ZERO,18; .set BO_dCTR_ZERO_1,19
+.set BO_ALWAYS,20; .set BO_ALWAYS_1,21; .set BO_ALWAYS_2,22
+.set BO_ALWAYS_3,23; .set BO_dCTR_NZERO_8,24; .set BO_dCTR_NZERO_9,25
+.set BO_dCTR_ZERO_8,26; .set BO_dCTR_ZERO_9,27; .set BO_ALWAYS_8,28
+.set BO_ALWAYS_9,29; .set BO_ALWAYS_10,30; .set BO_ALWAYS_11,31
+.set CR0_LT,0; .set CR0_GT,1; .set CR0_EQ,2; .set CR0_SO,3
+.set CR1_FX,4; .set CR1_FEX,5; .set CR1_VX,6; .set CR1_OX,7
+.set CR2_LT,8; .set CR2_GT,9; .set CR2_EQ,10; .set CR2_SO,11
+.set CR3_LT,12; .set CR3_GT,13; .set CR3_EQ,14; .set CR3_SO,15
+.set CR4_LT,16; .set CR4_GT,17; .set CR4_EQ,18; .set CR4_SO,19
+.set CR5_LT,20; .set CR5_GT,21; .set CR5_EQ,22; .set CR5_SO,23
+.set CR6_LT,24; .set CR6_GT,25; .set CR6_EQ,26; .set CR6_SO,27
+.set CR7_LT,28; .set CR7_GT,29; .set CR7_EQ,30; .set CR7_SO,31
+.set TO_LT,16; .set TO_GT,8; .set TO_EQ,4; .set TO_LLT,2; .set TO_LGT,1
+
+ .rename H.10.NO_SYMBOL{PR},""
+ .rename H.16..__4,".__4"
+ .rename H.18..__8,".__8"
+ .rename H.20..__3,".__3"
+ .rename H.24.NO_SYMBOL{TC},""
+ .rename H.26.NO_SYMBOL{RO},""
+ .rename E.28.__STATIC{RW},"_$STATIC"
+ .rename H.30.__STATIC{TC},"_$STATIC"
+ .rename H.34.__4{TC},"__4"
+ .rename H.38.__8{TC},"__8"
+ .rename H.42.__3{TC},"__3"
+ .rename H.46._Z4barfv{TC},"_Z4barfv"
+ .rename H.50._ZTIi{TC},"_ZTIi"
+ .rename H.54.main{TC},"main"
+
+ .lglobl H.10.NO_SYMBOL{PR}
+ .globl ._Z4barfv
+ .globl .main
+ .lglobl H.16..__4
+ .lglobl H.18..__8
+ .lglobl H.20..__3
+ .lglobl H.26.NO_SYMBOL{RO}
+ .lglobl E.28.__STATIC{RW}
+ .lglobl __4{DS}
+ .lglobl __8{DS}
+ .lglobl __3{DS}
+ .globl _Z4barfv{DS}
+ .extern _ZTIi{UA}
+ .globl main{DS}
+ .extern .__cxa_allocate_exception{PR}
+ .extern .__cxa_throw{PR}
+ .extern .wrap__xlc_exception_handle{PR}
+ .extern .__xlc_catch_matchv2{PR}
+ .extern .__cxa_begin_catch{PR}
+ .extern .printf{PR}
+ .extern .__cxa_end_catch{PR}
+ .extern ._Unwind_Resume{PR}
+ .extern .__cxa_rethrow{PR}
+ .extern ._ZSt9terminatev{PR}
+
+
+# .text section
+ .file "t.cpp","Mon Jan 30 12:53:50 2023 ","IBM XL C/C++ for AIX, Version 16.1.0.13"
+
+
+
+ .csect H.10.NO_SYMBOL{PR}, 7
+._Z4barfv: # 0x00000000 (H.10.NO_SYMBOL)
+ mfspr r0,LR
+ stu SP,-80(SP)
+ st r0,88(SP)
+ cal r3,4(r0)
+ bl .__cxa_allocate_exception{PR}
+ oril r0,r0,0x0000
+ oril r4,r3,0x0000
+ st r4,64(SP)
+ cal r3,42(r0)
+ st r3,0(r4)
+ l r3,64(SP)
+ l r4,T.50._ZTIi(RTOC)
+ cal r5,0(r0)
+ bl .__cxa_throw{PR}
+ oril r0,r0,0x0000
+ l r0,88(SP)
+ mtspr LR,r0
+ cal SP,80(SP)
+ bcr BO_ALWAYS,CR0_LT
+ .long 0x00000000
+# traceback table
+ .byte 0x00 # VERSION=0
+ .byte 0x09 # LANG=TB_CPLUSPLUS
+ .byte 0x20 # IS_GL=0,IS_EPROL=0,HAS_TBOFF=1
+ # INT_PROC=0,HAS_CTL=0,TOCLESS=0
+ # FP_PRESENT=0,LOG_ABORT=0
+ .byte 0x41 # INT_HNDL=0,NAME_PRESENT=1
+ # USES_ALLOCA=0,CL_DIS_INV=WALK_ONCOND
+ # SAVES_CR=0,SAVES_LR=1
+ .byte 0x80 # STORES_BC=1,FPR_SAVED=0
+ .byte 0x00 # GPR_SAVED=0
+ .byte 0x00 # FIXEDPARMS=0
+ .byte 0x01 # FLOATPARMS=0,PARMSONSTK=1
+ .long 0x0000004c # TB_OFFSET
+ .short 8 # NAME_LEN
+ .byte "_Z4barfv" # NAME
+
+ .byte 0 # padding
+ .byte 0 # padding
+# End of traceback table
+ .long 0x00000000 # "\0\0\0\0"
+ .long 0x00000000 # "\0\0\0\0"
+ .long 0x00000000 # "\0\0\0\0"
+ .long 0x00000000 # "\0\0\0\0"
+ .long 0x00000000 # "\0\0\0\0"
+ .long 0x00000000 # "\0\0\0\0"
+.main: # 0x00000080 (H.10.NO_SYMBOL+0x80)
+ mfspr r0,LR
+ st r31,-4(SP)
+ st r30,-8(SP)
+ st r29,-12(SP)
+ st r0,8(SP)
+ stu SP,-112(SP)
+ oril r30,SP,0x0000
+ l r31,T.30.__STATIC(RTOC)
+ l r29,T.24.NO_SYMBOL(RTOC)
+ cal r3,0(r0)
+ st r3,64(r30)
+ oril r4,r31,0x0000
+ st r4,68(r30)
+ st r3,72(r30)
+ st r3,76(r30)
+ cal r3,1(r0)
+ stb r3,67(r30)
+ bl ._Z4barfv
+ cal r3,0(r0)
+ stb r3,67(r30)
+ b __L188
+__Ld4: # 0x000000d4 (H.10.NO_SYMBOL+0xd4)
+ l r31,T.30.__STATIC(RTOC)
+ l r29,T.24.NO_SYMBOL(RTOC)
+ cal r3,2(r0)
+ stb r3,67(r30)
+ bl .wrap__xlc_exception_handle{PR}
+ oril r0,r0,0x0000
+ st r3,80(r30)
+ l r4,T.50._ZTIi(RTOC)
+ cal r5,84(r30)
+ bl .__xlc_catch_matchv2{PR}
+ oril r0,r0,0x0000
+ cmpli 0,r3,0x0000
+ bc BO_IF_NOT,CR0_EQ,__L10c
+ b __L164
+__L10c: # 0x0000010c (H.10.NO_SYMBOL+0x10c)
+ l r3,80(r30)
+ bl .__cxa_begin_catch{PR}
+ oril r0,r0,0x0000
+ oril r3,r29,0x0000
+ bl .printf{PR}
+ oril r0,r0,0x0000
+ bl .__cxa_end_catch{PR}
+ oril r0,r0,0x0000
+ cal r3,0(r0)
+ stb r3,67(r30)
+ b __L188
+__L138: # 0x00000138 (H.10.NO_SYMBOL+0x138)
+ l r31,T.30.__STATIC(RTOC)
+ l r29,T.24.NO_SYMBOL(RTOC)
+ bl .__cxa_end_catch{PR}
+ oril r0,r0,0x0000
+ cal r3,0(r0)
+ stb r3,67(r30)
+ bl .wrap__xlc_exception_handle{PR}
+ oril r0,r0,0x0000
+ st r3,88(r30)
+ bl ._Unwind_Resume{PR}
+ oril r0,r0,0x0000
+__L164: # 0x00000164 (H.10.NO_SYMBOL+0x164)
+ cal r3,2(r0)
+ stb r3,67(r30)
+ bl .wrap__xlc_exception_handle{PR}
+ oril r0,r0,0x0000
+ st r3,92(r30)
+ bl .__cxa_begin_catch{PR}
+ oril r0,r0,0x0000
+ bl .__cxa_rethrow{PR}
+ oril r0,r0,0x0000
+__L188: # 0x00000188 (H.10.NO_SYMBOL+0x188)
+ cal r3,0(r0)
+ b __L1b8
+__L190: # 0x00000190 (H.10.NO_SYMBOL+0x190)
+ bl .wrap__xlc_exception_handle{PR}
+ oril r0,r0,0x0000
+ st r3,96(r30)
+ bl ._Unwind_Resume{PR}
+ oril r0,r0,0x0000
+__L1a4: # 0x000001a4 (H.10.NO_SYMBOL+0x1a4)
+ l r31,T.30.__STATIC(RTOC)
+ l r29,T.24.NO_SYMBOL(RTOC)
+ bl ._ZSt9terminatev{PR}
+ oril r0,r0,0x0000
+ b __L190
+__L1b8: # 0x000001b8 (H.10.NO_SYMBOL+0x1b8)
+ l SP,0(SP)
+ l r29,-12(SP)
+ l r30,-8(SP)
+ l r31,-4(SP)
+ l r0,8(SP)
+ mtspr LR,r0
+ bcr BO_ALWAYS,CR0_LT
+ .long 0x00000000
+# traceback table
+ .byte 0x00 # VERSION=0
+ .byte 0x09 # LANG=TB_CPLUSPLUS
+ .byte 0x28 # IS_GL=0,IS_EPROL=0,HAS_TBOFF=1
+ # INT_PROC=0,HAS_CTL=1,TOCLESS=0
+ # FP_PRESENT=0,LOG_ABORT=0
+ .byte 0x61 # INT_HNDL=0,NAME_PRESENT=1
+ # USES_ALLOCA=1,CL_DIS_INV=WALK_ONCOND
+ # SAVES_CR=0,SAVES_LR=1
+ .byte 0x80 # STORES_BC=1,FPR_SAVED=0
+ .byte 0x03 # GPR_SAVED=3
+ .byte 0x00 # FIXEDPARMS=0
+ .byte 0x01 # FLOATPARMS=0,PARMSONSTK=1
+ .long 0x00000154 # TB_OFFSET
+ .long 0x00000001 # NUM_CTL_INFO
+ .long 0x00000040 # ctl_info_disp[0]
+ .short 4 # NAME_LEN
+ .byte "main" # NAME
+
+ .byte 30 # ALLOCA_REG
+ .byte 0 # padding
+# End of traceback table
+ .long 0x00000000 # "\0\0\0\0"
+ .long 0x00000000 # "\0\0\0\0"
+ .long 0x00000000 # "\0\0\0\0"
+H.16..__4: # 0x00000200 (H.10.NO_SYMBOL+0x200)
+ b __L1a4
+ bcr BO_ALWAYS,CR0_LT
+ .long 0x00000000
+# traceback table
+ .byte 0x00 # VERSION=0
+ .byte 0x09 # LANG=TB_CPLUSPLUS
+ .byte 0x20 # IS_GL=0,IS_EPROL=0,HAS_TBOFF=1
+ # INT_PROC=0,HAS_CTL=0,TOCLESS=0
+ # FP_PRESENT=0,LOG_ABORT=0
+ .byte 0x40 # INT_HNDL=0,NAME_PRESENT=1
+ # USES_ALLOCA=0,CL_DIS_INV=WALK_ONCOND
+ # SAVES_CR=0,SAVES_LR=0
+ .byte 0x00 # STORES_BC=0,FPR_SAVED=0
+ .byte 0x00 # GPR_SAVED=0
+ .byte 0x00 # FIXEDPARMS=0
+ .byte 0x01 # FLOATPARMS=0,PARMSONSTK=1
+ .long 0x00000008 # TB_OFFSET
+ .short 3 # NAME_LEN
+ .byte "__4" # NAME
+
+ .byte 0 # padding
+ .byte 0 # padding
+ .byte 0 # padding
+# End of traceback table
+H.18..__8: # 0x00000220 (H.10.NO_SYMBOL+0x220)
+ b __L138
+ bcr BO_ALWAYS,CR0_LT
+ .long 0x00000000
+# traceback table
+ .byte 0x00 # VERSION=0
+ .byte 0x09 # LANG=TB_CPLUSPLUS
+ .byte 0x20 # IS_GL=0,IS_EPROL=0,HAS_TBOFF=1
+ # INT_PROC=0,HAS_CTL=0,TOCLESS=0
+ # FP_PRESENT=0,LOG_ABORT=0
+ .byte 0x40 # INT_HNDL=0,NAME_PRESENT=1
+ # USES_ALLOCA=0,CL_DIS_INV=WALK_ONCOND
+ # SAVES_CR=0,SAVES_LR=0
+ .byte 0x00 # STORES_BC=0,FPR_SAVED=0
+ .byte 0x00 # GPR_SAVED=0
+ .byte 0x00 # FIXEDPARMS=0
+ .byte 0x01 # FLOATPARMS=0,PARMSONSTK=1
+ .long 0x00000008 # TB_OFFSET
+ .short 3 # NAME_LEN
+ .byte "__8" # NAME
+
+ .byte 0 # padding
+ .byte 0 # padding
+ .byte 0 # padding
+# End of traceback table
+H.20..__3: # 0x00000240 (H.10.NO_SYMBOL+0x240)
+ b __Ld4
+ bcr BO_ALWAYS,CR0_LT
+ .long 0x00000000
+# traceback table
+ .byte 0x00 # VERSION=0
+ .byte 0x09 # LANG=TB_CPLUSPLUS
+ .byte 0x20 # IS_GL=0,IS_EPROL=0,HAS_TBOFF=1
+ # INT_PROC=0,HAS_CTL=0,TOCLESS=0
+ # FP_PRESENT=0,LOG_ABORT=0
+ .byte 0x40 # INT_HNDL=0,NAME_PRESENT=1
+ # USES_ALLOCA=0,CL_DIS_INV=WALK_ONCOND
+ # SAVES_CR=0,SAVES_LR=0
+ .byte 0x00 # STORES_BC=0,FPR_SAVED=0
+ .byte 0x00 # GPR_SAVED=0
+ .byte 0x00 # FIXEDPARMS=0
+ .byte 0x01 # FLOATPARMS=0,PARMSONSTK=1
+ .long 0x00000008 # TB_OFFSET
+ .short 3 # NAME_LEN
+ .byte "__3" # NAME
+
+ .byte 0 # padding
+ .byte 0 # padding
+ .byte 0 # padding
+# End of traceback table
+ .long 0x00000000 # "\0\0\0\0"
+ .long 0x00000000 # "\0\0\0\0"
+ .long 0x00000000 # "\0\0\0\0"
+ .long 0x00000000 # "\0\0\0\0"
+ .long 0x00000000 # "\0\0\0\0"
+ .long 0x00000000 # "\0\0\0\0"
+ .long 0x00000000 # "\0\0\0\0"
+ .long 0x00000000 # "\0\0\0\0"
+# End csect H.10.NO_SYMBOL{PR}
+
+# .data section
+
+
+ .toc # 0x00000280
+T.46._Z4barfv:
+ .tc H.46._Z4barfv{TC},_Z4barfv{DS}
+T.50._ZTIi:
+ .tc H.50._ZTIi{TC},_ZTIi{UA}
+T.54.main:
+ .tc H.54.main{TC},main{DS}
+T.30.__STATIC:
+ .tc H.30.__STATIC{TC},E.28.__STATIC{RW}
+T.24.NO_SYMBOL:
+ .tc H.24.NO_SYMBOL{TC},H.26.NO_SYMBOL{RO}
+T.34.__4:
+ .tc H.34.__4{TC},__4{DS}
+T.38.__8:
+ .tc H.38.__8{TC},__8{DS}
+T.42.__3:
+ .tc H.42.__3{TC},__3{DS}
+
+
+ .csect _Z4barfv{DS}
+ .long ._Z4barfv # "\0\0\0\0"
+ .long TOC{TC0} # "\0\0\002\200"
+ .long 0x00000000 # "\0\0\0\0"
+# End csect _Z4barfv{DS}
+
+
+ .csect main{DS}
+ .long .main # "\0\0\0\200"
+ .long TOC{TC0} # "\0\0\002\200"
+ .long 0x00000000 # "\0\0\0\0"
+# End csect main{DS}
+
+
+ .csect __4{DS}
+ .long H.16..__4 # "\0\0\002\0"
+ .long TOC{TC0} # "\0\0\002\200"
+ .long 0x00000000 # "\0\0\0\0"
+# End csect __4{DS}
+
+
+ .csect __8{DS}
+ .long H.18..__8 # "\0\0\002 "
+ .long TOC{TC0} # "\0\0\002\200"
+ .long 0x00000000 # "\0\0\0\0"
+# End csect __8{DS}
+
+
+ .csect __3{DS}
+ .long H.20..__3 # "\0\0\002@"
+ .long TOC{TC0} # "\0\0\002\200"
+ .long 0x00000000 # "\0\0\0\0"
+# End csect __3{DS}
+
+
+ .csect E.28.__STATIC{RW}, 3
+ .long 0x1cedbeef # "\034\355\276\357"
+ .long 0x00000003 # "\0\0\0\003"
+ .long 0x00000000 # "\0\0\0\0"
+ .long __3{DS} # "\0\0\002\320"
+ .long 0xffffffff # "\377\377\377\377"
+ .long 0x00000000 # "\0\0\0\0"
+ .long 0x00000000 # "\0\0\0\0"
+ .long 0x00000000 # "\0\0\0\0"
+ .long __8{DS} # "\0\0\002\304"
+ .long 0xfffffffe # "\377\377\377\376"
+ .long 0x00000000 # "\0\0\0\0"
+ .long 0x00000000 # "\0\0\0\0"
+ .long 0x00000000 # "\0\0\0\0"
+ .long __4{DS} # "\0\0\002\270"
+ .long 0xfffffffc # "\377\377\377\374"
+ .long 0x00000000 # "\0\0\0\0"
+ .long 0x00000000 # "\0\0\0\0"
+# End csect E.28.__STATIC{RW}
+
+
+ .csect H.26.NO_SYMBOL{RO}, 3
+ .long 0x63617567 # "caug"
+ .long 0x68742069 # "ht i"
+ .long 0x6e740a00 # "nt\n\0"
+# End csect H.26.NO_SYMBOL{RO}
+
+
+
+# .bss section
+
+
+# dwarf sections
+
+# end dwarf sections
+#endif // defined(T1_CPP_CODE)
+
+#if defined(T2_CPP_CODE)
+#
+# This portion of assembly code is generated by IBM legacy xlclang++ compiler
+# from the following C++ source file for 64-bit mode.
+#
+# t2.cpp
+#
+#extern "C" int printf(const char *, ...);
+#
+#extern "C" unsigned int * __xlc_exception_handle();
+#
+#extern "C" unsigned int * wrap__xlc_exception_handle() {
+# printf("wrap__xlc_exception_handle called\n");
+# return __xlc_exception_handle();
+#}
+#
+
+.set r0,0; .set SP,1; .set RTOC,2; .set r3,3; .set r4,4
+.set r5,5; .set r6,6; .set r7,7; .set r8,8; .set r9,9
+.set r10,10; .set r11,11; .set r12,12; .set r13,13; .set r14,14
+.set r15,15; .set r16,16; .set r17,17; .set r18,18; .set r19,19
+.set r20,20; .set r21,21; .set r22,22; .set r23,23; .set r24,24
+.set r25,25; .set r26,26; .set r27,27; .set r28,28; .set r29,29
+.set r30,30; .set r31,31
+.set fp0,0; .set fp1,1; .set fp2,2; .set fp3,3; .set fp4,4
+.set fp5,5; .set fp6,6; .set fp7,7; .set fp8,8; .set fp9,9
+.set fp10,10; .set fp11,11; .set fp12,12; .set fp13,13; .set fp14,14
+.set fp15,15; .set fp16,16; .set fp17,17; .set fp18,18; .set fp19,19
+.set fp20,20; .set fp21,21; .set fp22,22; .set fp23,23; .set fp24,24
+.set fp25,25; .set fp26,26; .set fp27,27; .set fp28,28; .set fp29,29
+.set fp30,30; .set fp31,31
+.set v0,0; .set v1,1; .set v2,2; .set v3,3; .set v4,4
+.set v5,5; .set v6,6; .set v7,7; .set v8,8; .set v9,9
+.set v10,10; .set v11,11; .set v12,12; .set v13,13; .set v14,14
+.set v15,15; .set v16,16; .set v17,17; .set v18,18; .set v19,19
+.set v20,20; .set v21,21; .set v22,22; .set v23,23; .set v24,24
+.set v25,25; .set v26,26; .set v27,27; .set v28,28; .set v29,29
+.set v30,30; .set v31,31
+.set x0,0; .set x1,1; .set x2,2; .set x3,3; .set x4,4
+.set x5,5; .set x6,6; .set x7,7; .set x8,8; .set x9,9
+.set x10,10; .set x11,11; .set x12,12; .set x13,13; .set x14,14
+.set x15,15; .set x16,16; .set x17,17; .set x18,18; .set x19,19
+.set x20,20; .set x21,21; .set x22,22; .set x23,23; .set x24,24
+.set x25,25; .set x26,26; .set x27,27; .set x28,28; .set x29,29
+.set x30,30; .set x31,31; .set x32,32; .set x33,33; .set x34,34
+.set x35,35; .set x36,36; .set x37,37; .set x38,38; .set x39,39
+.set x40,40; .set x41,41; .set x42,42; .set x43,43; .set x44,44
+.set x45,45; .set x46,46; .set x47,47; .set x48,48; .set x49,49
+.set x50,50; .set x51,51; .set x52,52; .set x53,53; .set x54,54
+.set x55,55; .set x56,56; .set x57,57; .set x58,58; .set x59,59
+.set x60,60; .set x61,61; .set x62,62; .set x63,63
+.set q0,0; .set q1,1; .set q2,2; .set q3,3; .set q4,4
+.set q5,5; .set q6,6; .set q7,7; .set q8,8; .set q9,9
+.set q10,10; .set q11,11; .set q12,12; .set q13,13; .set q14,14
+.set q15,15; .set q16,16; .set q17,17; .set q18,18; .set q19,19
+.set q20,20; .set q21,21; .set q22,22; .set q23,23; .set q24,24
+.set q25,25; .set q26,26; .set q27,27; .set q28,28; .set q29,29
+.set q30,30; .set q31,31
+.set MQ,0; .set XER,1; .set DSCR,3; .set FROM_RTCU,4; .set FROM_RTCL,5
+.set FROM_DEC,6; .set LR,8; .set CTR,9; .set AMR,13; .set TID,17; .set DSISR,18
+.set DAR,19; .set TO_RTCU,20; .set TO_RTCL,21; .set TO_DEC,22; .set SDR_0,24
+.set SDR_1,25; .set SRR_0,26; .set SRR_1,27
+.set BO_dCTR_NZERO_AND_NOT,0; .set BO_dCTR_NZERO_AND_NOT_1,1
+.set BO_dCTR_ZERO_AND_NOT,2; .set BO_dCTR_ZERO_AND_NOT_1,3
+.set BO_IF_NOT,4; .set BO_IF_NOT_1,5; .set BO_IF_NOT_2,6
+.set BO_IF_NOT_3,7; .set BO_dCTR_NZERO_AND,8; .set BO_dCTR_NZERO_AND_1,9
+.set BO_dCTR_ZERO_AND,10; .set BO_dCTR_ZERO_AND_1,11; .set BO_IF,12
+.set BO_IF_1,13; .set BO_IF_2,14; .set BO_IF_3,15; .set BO_dCTR_NZERO,16
+.set BO_dCTR_NZERO_1,17; .set BO_dCTR_ZERO,18; .set BO_dCTR_ZERO_1,19
+.set BO_ALWAYS,20; .set BO_ALWAYS_1,21; .set BO_ALWAYS_2,22
+.set BO_ALWAYS_3,23; .set BO_dCTR_NZERO_8,24; .set BO_dCTR_NZERO_9,25
+.set BO_dCTR_ZERO_8,26; .set BO_dCTR_ZERO_9,27; .set BO_ALWAYS_8,28
+.set BO_ALWAYS_9,29; .set BO_ALWAYS_10,30; .set BO_ALWAYS_11,31
+.set CR0_LT,0; .set CR0_GT,1; .set CR0_EQ,2; .set CR0_SO,3
+.set CR1_FX,4; .set CR1_FEX,5; .set CR1_VX,6; .set CR1_OX,7
+.set CR2_LT,8; .set CR2_GT,9; .set CR2_EQ,10; .set CR2_SO,11
+.set CR3_LT,12; .set CR3_GT,13; .set CR3_EQ,14; .set CR3_SO,15
+.set CR4_LT,16; .set CR4_GT,17; .set CR4_EQ,18; .set CR4_SO,19
+.set CR5_LT,20; .set CR5_GT,21; .set CR5_EQ,22; .set CR5_SO,23
+.set CR6_LT,24; .set CR6_GT,25; .set CR6_EQ,26; .set CR6_SO,27
+.set CR7_LT,28; .set CR7_GT,29; .set CR7_EQ,30; .set CR7_SO,31
+.set TO_LT,16; .set TO_GT,8; .set TO_EQ,4; .set TO_LLT,2; .set TO_LGT,1
+
+ .rename H.10.NO_SYMBOL{PR},""
+ .rename H.16.NO_SYMBOL{TC},""
+ .rename H.18.NO_SYMBOL{RO},""
+ .rename H.22.wrap__xlc_exception_handle{TC},"wrap__xlc_exception_handle"
+
+ .lglobl H.10.NO_SYMBOL{PR}
+ .globl .wrap__xlc_exception_handle
+ .lglobl H.18.NO_SYMBOL{RO}
+ .globl wrap__xlc_exception_handle{DS}
+ .extern .printf{PR}
+ .extern .__xlc_exception_handle{PR}
+
+
+# .text section
+ .file "t2.cpp","Mon Jan 30 12:53:50 2023 ","IBM XL C/C++ for AIX, Version 16.1.0.13"
+
+
+
+ .csect H.10.NO_SYMBOL{PR}, 7
+.wrap__xlc_exception_handle: # 0x00000000 (H.10.NO_SYMBOL)
+ mfspr r0,LR
+ st r31,-4(SP)
+ st r0,8(SP)
+ stu SP,-64(SP)
+ l r31,T.16.NO_SYMBOL(RTOC)
+ oril r3,r31,0x0000
+ bl .printf{PR}
+ oril r0,r0,0x0000
+ bl .__xlc_exception_handle{PR}
+ oril r0,r0,0x0000
+ l r0,72(SP)
+ mtspr LR,r0
+ cal SP,64(SP)
+ l r31,-4(SP)
+ bcr BO_ALWAYS,CR0_LT
+ .long 0x00000000
+# traceback table
+ .byte 0x00 # VERSION=0
+ .byte 0x09 # LANG=TB_CPLUSPLUS
+ .byte 0x20 # IS_GL=0,IS_EPROL=0,HAS_TBOFF=1
+ # INT_PROC=0,HAS_CTL=0,TOCLESS=0
+ # FP_PRESENT=0,LOG_ABORT=0
+ .byte 0x41 # INT_HNDL=0,NAME_PRESENT=1
+ # USES_ALLOCA=0,CL_DIS_INV=WALK_ONCOND
+ # SAVES_CR=0,SAVES_LR=1
+ .byte 0x80 # STORES_BC=1,FPR_SAVED=0
+ .byte 0x01 # GPR_SAVED=1
+ .byte 0x00 # FIXEDPARMS=0
+ .byte 0x01 # FLOATPARMS=0,PARMSONSTK=1
+ .long 0x0000003c # TB_OFFSET
+ .short 26 # NAME_LEN
+ .byte "wrap__xlc_exception_handle" # NAME
+
+# End of traceback table
+ .long 0x00000000 # "\0\0\0\0"
+ .long 0x00000000 # "\0\0\0\0"
+ .long 0x00000000 # "\0\0\0\0"
+ .long 0x00000000 # "\0\0\0\0"
+ .long 0x00000000 # "\0\0\0\0"
+ .long 0x00000000 # "\0\0\0\0"
+# End csect H.10.NO_SYMBOL{PR}
+
+# .data section
+
+
+ .toc # 0x00000080
+T.22.wrap__xlc_exception_handle:
+ .tc H.22.wrap__xlc_exception_handle{TC},wrap__xlc_exception_handle{DS}
+T.16.NO_SYMBOL:
+ .tc H.16.NO_SYMBOL{TC},H.18.NO_SYMBOL{RO}
+
+
+ .csect wrap__xlc_exception_handle{DS}
+ .long .wrap__xlc_exception_handle# "\0\0\0\0"
+ .long TOC{TC0} # "\0\0\0\200"
+ .long 0x00000000 # "\0\0\0\0"
+# End csect wrap__xlc_exception_handle{DS}
+
+
+ .csect H.18.NO_SYMBOL{RO}, 3
+ .long 0x77726170 # "wrap"
+ .long 0x5f5f786c # "__xl"
+ .long 0x635f6578 # "c_ex"
+ .long 0x63657074 # "cept"
+ .long 0x696f6e5f # "ion_"
+ .long 0x68616e64 # "hand"
+ .long 0x6c652063 # "le c"
+ .long 0x616c6c65 # "alle"
+# End csect H.18.NO_SYMBOL{RO}
+ .long 0x640a0000 # "d\n\0\0"
+
+
+
+# .bss section
+
+
+# dwarf sections
+
+# end dwarf sections
+#endif // defined(T2_CPP_CODE)
diff --git a/libcxxabi/test/vendor/ibm/aix_xlclang_passing_excp_obj_64.pass.sh.S b/libcxxabi/test/vendor/ibm/aix_xlclang_passing_excp_obj_64.pass.sh.S
new file mode 100644
index 000000000000..011f5ff796b1
--- /dev/null
+++ b/libcxxabi/test/vendor/ibm/aix_xlclang_passing_excp_obj_64.pass.sh.S
@@ -0,0 +1,710 @@
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// Test that the exception object is passed correctly from the personality
+// to the landing pad even when there are wrappers around runtime function
+// __xlc_exception_handle. This test is only for the legacy AIX xlclang
+// compiler generated code. The test source consists of two C++ source files
+// t1.cpp and t2.cpp which are compiled into assembly code by the legacy AIX
+// xlclang++ compiler included in this file. This file tests for the 64-bit
+// mode.
+
+# REQUIRES: target=powerpc64-ibm-aix
+# UNSUPPORTED: no-exceptions
+
+// RUN: %{cxx} -c %s -o %t1_64.o -DT1_CPP_CODE %{flags} %{compile_flags}
+// RUN: %{cxx} -c %s -o %t2_64.o -DT2_CPP_CODE %{flags} %{compile_flags}
+// RUN: %{cxx} -o %t_64.exe %t1_64.o %t2_64.o %{flags} %{link_flags}
+// RUN: %{exec} %t_64.exe
+
+#if defined(T1_CPP_CODE)
+#
+# This portion of assembly code is generated by IBM legacy xlclang++ compiler
+# from the following C++ source file for 64-bit mode.
+#
+# t.cpp:
+#
+#extern "C" int printf(const char *, ...);
+#
+#extern "C" unsigned int * __xlc_exception_handle() __attribute__((weak, alias("wrap__xlc_exception_handle")));
+#
+#void barf() __attribute__((noinline));
+#
+#int main(void) {
+# try {
+# barf();
+# } catch(int) {
+# printf("caught int\n");
+# }
+# return 0;
+#}
+#
+#void barf() { throw 42; }
+
+.set r0,0; .set SP,1; .set RTOC,2; .set r3,3; .set r4,4
+.set r5,5; .set r6,6; .set r7,7; .set r8,8; .set r9,9
+.set r10,10; .set r11,11; .set r12,12; .set r13,13; .set r14,14
+.set r15,15; .set r16,16; .set r17,17; .set r18,18; .set r19,19
+.set r20,20; .set r21,21; .set r22,22; .set r23,23; .set r24,24
+.set r25,25; .set r26,26; .set r27,27; .set r28,28; .set r29,29
+.set r30,30; .set r31,31
+.set fp0,0; .set fp1,1; .set fp2,2; .set fp3,3; .set fp4,4
+.set fp5,5; .set fp6,6; .set fp7,7; .set fp8,8; .set fp9,9
+.set fp10,10; .set fp11,11; .set fp12,12; .set fp13,13; .set fp14,14
+.set fp15,15; .set fp16,16; .set fp17,17; .set fp18,18; .set fp19,19
+.set fp20,20; .set fp21,21; .set fp22,22; .set fp23,23; .set fp24,24
+.set fp25,25; .set fp26,26; .set fp27,27; .set fp28,28; .set fp29,29
+.set fp30,30; .set fp31,31
+.set v0,0; .set v1,1; .set v2,2; .set v3,3; .set v4,4
+.set v5,5; .set v6,6; .set v7,7; .set v8,8; .set v9,9
+.set v10,10; .set v11,11; .set v12,12; .set v13,13; .set v14,14
+.set v15,15; .set v16,16; .set v17,17; .set v18,18; .set v19,19
+.set v20,20; .set v21,21; .set v22,22; .set v23,23; .set v24,24
+.set v25,25; .set v26,26; .set v27,27; .set v28,28; .set v29,29
+.set v30,30; .set v31,31
+.set x0,0; .set x1,1; .set x2,2; .set x3,3; .set x4,4
+.set x5,5; .set x6,6; .set x7,7; .set x8,8; .set x9,9
+.set x10,10; .set x11,11; .set x12,12; .set x13,13; .set x14,14
+.set x15,15; .set x16,16; .set x17,17; .set x18,18; .set x19,19
+.set x20,20; .set x21,21; .set x22,22; .set x23,23; .set x24,24
+.set x25,25; .set x26,26; .set x27,27; .set x28,28; .set x29,29
+.set x30,30; .set x31,31; .set x32,32; .set x33,33; .set x34,34
+.set x35,35; .set x36,36; .set x37,37; .set x38,38; .set x39,39
+.set x40,40; .set x41,41; .set x42,42; .set x43,43; .set x44,44
+.set x45,45; .set x46,46; .set x47,47; .set x48,48; .set x49,49
+.set x50,50; .set x51,51; .set x52,52; .set x53,53; .set x54,54
+.set x55,55; .set x56,56; .set x57,57; .set x58,58; .set x59,59
+.set x60,60; .set x61,61; .set x62,62; .set x63,63
+.set q0,0; .set q1,1; .set q2,2; .set q3,3; .set q4,4
+.set q5,5; .set q6,6; .set q7,7; .set q8,8; .set q9,9
+.set q10,10; .set q11,11; .set q12,12; .set q13,13; .set q14,14
+.set q15,15; .set q16,16; .set q17,17; .set q18,18; .set q19,19
+.set q20,20; .set q21,21; .set q22,22; .set q23,23; .set q24,24
+.set q25,25; .set q26,26; .set q27,27; .set q28,28; .set q29,29
+.set q30,30; .set q31,31
+.set MQ,0; .set XER,1; .set DSCR,3; .set FROM_RTCU,4; .set FROM_RTCL,5
+.set FROM_DEC,6; .set LR,8; .set CTR,9; .set AMR,13; .set TID,17; .set DSISR,18
+.set DAR,19; .set TO_RTCU,20; .set TO_RTCL,21; .set TO_DEC,22; .set SDR_0,24
+.set SDR_1,25; .set SRR_0,26; .set SRR_1,27
+.set BO_dCTR_NZERO_AND_NOT,0; .set BO_dCTR_NZERO_AND_NOT_1,1
+.set BO_dCTR_ZERO_AND_NOT,2; .set BO_dCTR_ZERO_AND_NOT_1,3
+.set BO_IF_NOT,4; .set BO_IF_NOT_1,5; .set BO_IF_NOT_2,6
+.set BO_IF_NOT_3,7; .set BO_dCTR_NZERO_AND,8; .set BO_dCTR_NZERO_AND_1,9
+.set BO_dCTR_ZERO_AND,10; .set BO_dCTR_ZERO_AND_1,11; .set BO_IF,12
+.set BO_IF_1,13; .set BO_IF_2,14; .set BO_IF_3,15; .set BO_dCTR_NZERO,16
+.set BO_dCTR_NZERO_1,17; .set BO_dCTR_ZERO,18; .set BO_dCTR_ZERO_1,19
+.set BO_ALWAYS,20; .set BO_ALWAYS_1,21; .set BO_ALWAYS_2,22
+.set BO_ALWAYS_3,23; .set BO_dCTR_NZERO_8,24; .set BO_dCTR_NZERO_9,25
+.set BO_dCTR_ZERO_8,26; .set BO_dCTR_ZERO_9,27; .set BO_ALWAYS_8,28
+.set BO_ALWAYS_9,29; .set BO_ALWAYS_10,30; .set BO_ALWAYS_11,31
+.set CR0_LT,0; .set CR0_GT,1; .set CR0_EQ,2; .set CR0_SO,3
+.set CR1_FX,4; .set CR1_FEX,5; .set CR1_VX,6; .set CR1_OX,7
+.set CR2_LT,8; .set CR2_GT,9; .set CR2_EQ,10; .set CR2_SO,11
+.set CR3_LT,12; .set CR3_GT,13; .set CR3_EQ,14; .set CR3_SO,15
+.set CR4_LT,16; .set CR4_GT,17; .set CR4_EQ,18; .set CR4_SO,19
+.set CR5_LT,20; .set CR5_GT,21; .set CR5_EQ,22; .set CR5_SO,23
+.set CR6_LT,24; .set CR6_GT,25; .set CR6_EQ,26; .set CR6_SO,27
+.set CR7_LT,28; .set CR7_GT,29; .set CR7_EQ,30; .set CR7_SO,31
+.set TO_LT,16; .set TO_GT,8; .set TO_EQ,4; .set TO_LLT,2; .set TO_LGT,1
+
+ .rename H.4.NO_SYMBOL{PR},""
+ .rename H.10..__4,".__4"
+ .rename H.12..__8,".__8"
+ .rename H.14..__3,".__3"
+ .rename H.18.NO_SYMBOL{TC},""
+ .rename H.20.NO_SYMBOL{RO},""
+ .rename E.22.__STATIC{RW},"_$STATIC"
+ .rename H.24.__STATIC{TC},"_$STATIC"
+ .rename H.28.__4{TC},"__4"
+ .rename H.32.__8{TC},"__8"
+ .rename H.36.__3{TC},"__3"
+ .rename H.40._Z4barfv{TC},"_Z4barfv"
+ .rename H.44._ZTIi{TC},"_ZTIi"
+ .rename H.48.main{TC},"main"
+
+ .lglobl H.4.NO_SYMBOL{PR}
+ .globl ._Z4barfv
+ .globl .main
+ .lglobl H.10..__4
+ .lglobl H.12..__8
+ .lglobl H.14..__3
+ .lglobl H.20.NO_SYMBOL{RO}
+ .lglobl E.22.__STATIC{RW}
+ .lglobl __4{DS}
+ .lglobl __8{DS}
+ .lglobl __3{DS}
+ .globl _Z4barfv{DS}
+ .extern _ZTIi{UA}
+ .globl main{DS}
+ .extern .__cxa_allocate_exception{PR}
+ .extern .__cxa_throw{PR}
+ .extern .wrap__xlc_exception_handle{PR}
+ .extern .__xlc_catch_matchv2{PR}
+ .extern .__cxa_begin_catch{PR}
+ .extern .printf{PR}
+ .extern .__cxa_end_catch{PR}
+ .extern ._Unwind_Resume{PR}
+ .extern .__cxa_rethrow{PR}
+ .extern ._ZSt9terminatev{PR}
+
+
+# .text section
+ .file "t.cpp","Mon Jan 30 13:42:03 2023 ","IBM XL C/C++ for AIX, Version 16.1.0.13"
+ .machine "ppc64"
+
+
+ .csect H.4.NO_SYMBOL{PR}, 7
+._Z4barfv: # 0x0000000000000000 (H.4.NO_SYMBOL)
+ mfspr r0,LR
+ stdu SP,-128(SP)
+ std r0,144(SP)
+ addi r3,r0,4
+ bl .__cxa_allocate_exception{PR}
+ ori r0,r0,0x0000
+ ori r4,r3,0x0000
+ std r4,112(SP)
+ addi r3,r0,42
+ stw r3,0(r4)
+ ld r3,112(SP)
+ ld r4,T.44._ZTIi(RTOC)
+ addi r5,r0,0
+ bl .__cxa_throw{PR}
+ ori r0,r0,0x0000
+ ld r0,144(SP)
+ mtspr LR,r0
+ addi SP,SP,128
+ bclr BO_ALWAYS,CR0_LT
+ .long 0x00000000
+# traceback table
+ .byte 0x00 # VERSION=0
+ .byte 0x09 # LANG=TB_CPLUSPLUS
+ .byte 0x20 # IS_GL=0,IS_EPROL=0,HAS_TBOFF=1
+ # INT_PROC=0,HAS_CTL=0,TOCLESS=0
+ # FP_PRESENT=0,LOG_ABORT=0
+ .byte 0x41 # INT_HNDL=0,NAME_PRESENT=1
+ # USES_ALLOCA=0,CL_DIS_INV=WALK_ONCOND
+ # SAVES_CR=0,SAVES_LR=1
+ .byte 0x80 # STORES_BC=1,FPR_SAVED=0
+ .byte 0x00 # GPR_SAVED=0
+ .byte 0x00 # FIXEDPARMS=0
+ .byte 0x01 # FLOATPARMS=0,PARMSONSTK=1
+ .long 0x0000004c # TB_OFFSET
+ .short 8 # NAME_LEN
+ .byte "_Z4barfv" # NAME
+
+ .byte 0 # padding
+ .byte 0 # padding
+# End of traceback table
+ .long 0x00000000 # "\0\0\0\0"
+ .long 0x00000000 # "\0\0\0\0"
+ .long 0x00000000 # "\0\0\0\0"
+ .long 0x00000000 # "\0\0\0\0"
+ .long 0x00000000 # "\0\0\0\0"
+ .long 0x00000000 # "\0\0\0\0"
+.main: # 0x0000000000000080 (H.4.NO_SYMBOL+0x080)
+ mfspr r0,LR
+ std r31,-8(SP)
+ std r30,-16(SP)
+ std r29,-24(SP)
+ std r0,16(SP)
+ stdu SP,-208(SP)
+ ori r30,SP,0x0000
+ ld r31,T.24.__STATIC(RTOC)
+ ld r29,T.18.NO_SYMBOL(RTOC)
+ addi r3,r0,0
+ stw r3,112(r30)
+ ori r4,r31,0x0000
+ std r4,120(r30)
+ std r3,128(r30)
+ stw r3,136(r30)
+ addi r3,r0,1
+ stb r3,115(r30)
+ bl ._Z4barfv
+ addi r3,r0,0
+ stb r3,115(r30)
+ b __L188
+__Ld4: # 0x00000000000000d4 (H.4.NO_SYMBOL+0x0d4)
+ ld r31,T.24.__STATIC(RTOC)
+ ld r29,T.18.NO_SYMBOL(RTOC)
+ addi r3,r0,2
+ stb r3,115(r30)
+ bl .wrap__xlc_exception_handle{PR}
+ ori r0,r0,0x0000
+ std r3,144(r30)
+ ld r4,T.44._ZTIi(RTOC)
+ addi r5,r30,152
+ bl .__xlc_catch_matchv2{PR}
+ ori r0,r0,0x0000
+ cmpli 0,0,r3,0x0000
+ bc BO_IF_NOT,CR0_EQ,__L10c
+ b __L164
+__L10c: # 0x000000000000010c (H.4.NO_SYMBOL+0x010c)
+ ld r3,144(r30)
+ bl .__cxa_begin_catch{PR}
+ ori r0,r0,0x0000
+ ori r3,r29,0x0000
+ bl .printf{PR}
+ ori r0,r0,0x0000
+ bl .__cxa_end_catch{PR}
+ ori r0,r0,0x0000
+ addi r3,r0,0
+ stb r3,115(r30)
+ b __L188
+__L138: # 0x0000000000000138 (H.4.NO_SYMBOL+0x0138)
+ ld r31,T.24.__STATIC(RTOC)
+ ld r29,T.18.NO_SYMBOL(RTOC)
+ bl .__cxa_end_catch{PR}
+ ori r0,r0,0x0000
+ addi r3,r0,0
+ stb r3,115(r30)
+ bl .wrap__xlc_exception_handle{PR}
+ ori r0,r0,0x0000
+ std r3,160(r30)
+ bl ._Unwind_Resume{PR}
+ ori r0,r0,0x0000
+__L164: # 0x0000000000000164 (H.4.NO_SYMBOL+0x0164)
+ addi r3,r0,2
+ stb r3,115(r30)
+ bl .wrap__xlc_exception_handle{PR}
+ ori r0,r0,0x0000
+ std r3,168(r30)
+ bl .__cxa_begin_catch{PR}
+ ori r0,r0,0x0000
+ bl .__cxa_rethrow{PR}
+ ori r0,r0,0x0000
+__L188: # 0x0000000000000188 (H.4.NO_SYMBOL+0x0188)
+ addi r3,r0,0
+ b __L1b8
+__L190: # 0x0000000000000190 (H.4.NO_SYMBOL+0x0190)
+ bl .wrap__xlc_exception_handle{PR}
+ ori r0,r0,0x0000
+ std r3,176(r30)
+ bl ._Unwind_Resume{PR}
+ ori r0,r0,0x0000
+__L1a4: # 0x00000000000001a4 (H.4.NO_SYMBOL+0x01a4)
+ ld r31,T.24.__STATIC(RTOC)
+ ld r29,T.18.NO_SYMBOL(RTOC)
+ bl ._ZSt9terminatev{PR}
+ ori r0,r0,0x0000
+ b __L190
+__L1b8: # 0x00000000000001b8 (H.4.NO_SYMBOL+0x01b8)
+ ld SP,0(SP)
+ ld r29,-24(SP)
+ ld r30,-16(SP)
+ ld r31,-8(SP)
+ ld r0,16(SP)
+ mtspr LR,r0
+ bclr BO_ALWAYS,CR0_LT
+ .long 0x00000000
+# traceback table
+ .byte 0x00 # VERSION=0
+ .byte 0x09 # LANG=TB_CPLUSPLUS
+ .byte 0x28 # IS_GL=0,IS_EPROL=0,HAS_TBOFF=1
+ # INT_PROC=0,HAS_CTL=1,TOCLESS=0
+ # FP_PRESENT=0,LOG_ABORT=0
+ .byte 0x61 # INT_HNDL=0,NAME_PRESENT=1
+ # USES_ALLOCA=1,CL_DIS_INV=WALK_ONCOND
+ # SAVES_CR=0,SAVES_LR=1
+ .byte 0x80 # STORES_BC=1,FPR_SAVED=0
+ .byte 0x03 # GPR_SAVED=3
+ .byte 0x00 # FIXEDPARMS=0
+ .byte 0x01 # FLOATPARMS=0,PARMSONSTK=1
+ .long 0x00000154 # TB_OFFSET
+ .long 0x00000001 # NUM_CTL_INFO
+ .long 0x00000070 # ctl_info_disp[0]
+ .short 4 # NAME_LEN
+ .byte "main" # NAME
+
+ .byte 30 # ALLOCA_REG
+ .byte 0 # padding
+# End of traceback table
+ .long 0x00000000 # "\0\0\0\0"
+ .long 0x00000000 # "\0\0\0\0"
+ .long 0x00000000 # "\0\0\0\0"
+H.10..__4: # 0x0000000000000200 (H.4.NO_SYMBOL+0x0200)
+ b __L1a4
+ bclr BO_ALWAYS,CR0_LT
+ .long 0x00000000
+# traceback table
+ .byte 0x00 # VERSION=0
+ .byte 0x09 # LANG=TB_CPLUSPLUS
+ .byte 0x20 # IS_GL=0,IS_EPROL=0,HAS_TBOFF=1
+ # INT_PROC=0,HAS_CTL=0,TOCLESS=0
+ # FP_PRESENT=0,LOG_ABORT=0
+ .byte 0x40 # INT_HNDL=0,NAME_PRESENT=1
+ # USES_ALLOCA=0,CL_DIS_INV=WALK_ONCOND
+ # SAVES_CR=0,SAVES_LR=0
+ .byte 0x00 # STORES_BC=0,FPR_SAVED=0
+ .byte 0x00 # GPR_SAVED=0
+ .byte 0x00 # FIXEDPARMS=0
+ .byte 0x01 # FLOATPARMS=0,PARMSONSTK=1
+ .long 0x00000008 # TB_OFFSET
+ .short 3 # NAME_LEN
+ .byte "__4" # NAME
+
+ .byte 0 # padding
+ .byte 0 # padding
+ .byte 0 # padding
+# End of traceback table
+H.12..__8: # 0x0000000000000220 (H.4.NO_SYMBOL+0x0220)
+ b __L138
+ bclr BO_ALWAYS,CR0_LT
+ .long 0x00000000
+# traceback table
+ .byte 0x00 # VERSION=0
+ .byte 0x09 # LANG=TB_CPLUSPLUS
+ .byte 0x20 # IS_GL=0,IS_EPROL=0,HAS_TBOFF=1
+ # INT_PROC=0,HAS_CTL=0,TOCLESS=0
+ # FP_PRESENT=0,LOG_ABORT=0
+ .byte 0x40 # INT_HNDL=0,NAME_PRESENT=1
+ # USES_ALLOCA=0,CL_DIS_INV=WALK_ONCOND
+ # SAVES_CR=0,SAVES_LR=0
+ .byte 0x00 # STORES_BC=0,FPR_SAVED=0
+ .byte 0x00 # GPR_SAVED=0
+ .byte 0x00 # FIXEDPARMS=0
+ .byte 0x01 # FLOATPARMS=0,PARMSONSTK=1
+ .long 0x00000008 # TB_OFFSET
+ .short 3 # NAME_LEN
+ .byte "__8" # NAME
+
+ .byte 0 # padding
+ .byte 0 # padding
+ .byte 0 # padding
+# End of traceback table
+H.14..__3: # 0x0000000000000240 (H.4.NO_SYMBOL+0x0240)
+ b __Ld4
+ bclr BO_ALWAYS,CR0_LT
+ .long 0x00000000
+# traceback table
+ .byte 0x00 # VERSION=0
+ .byte 0x09 # LANG=TB_CPLUSPLUS
+ .byte 0x20 # IS_GL=0,IS_EPROL=0,HAS_TBOFF=1
+ # INT_PROC=0,HAS_CTL=0,TOCLESS=0
+ # FP_PRESENT=0,LOG_ABORT=0
+ .byte 0x40 # INT_HNDL=0,NAME_PRESENT=1
+ # USES_ALLOCA=0,CL_DIS_INV=WALK_ONCOND
+ # SAVES_CR=0,SAVES_LR=0
+ .byte 0x00 # STORES_BC=0,FPR_SAVED=0
+ .byte 0x00 # GPR_SAVED=0
+ .byte 0x00 # FIXEDPARMS=0
+ .byte 0x01 # FLOATPARMS=0,PARMSONSTK=1
+ .long 0x00000008 # TB_OFFSET
+ .short 3 # NAME_LEN
+ .byte "__3" # NAME
+
+ .byte 0 # padding
+ .byte 0 # padding
+ .byte 0 # padding
+# End of traceback table
+ .long 0x00000000 # "\0\0\0\0"
+ .long 0x00000000 # "\0\0\0\0"
+ .long 0x00000000 # "\0\0\0\0"
+ .long 0x00000000 # "\0\0\0\0"
+ .long 0x00000000 # "\0\0\0\0"
+ .long 0x00000000 # "\0\0\0\0"
+ .long 0x00000000 # "\0\0\0\0"
+ .long 0x00000000 # "\0\0\0\0"
+# End csect H.4.NO_SYMBOL{PR}
+
+# .data section
+
+
+ .toc # 0x0000000000000280
+T.40._Z4barfv:
+ .tc H.40._Z4barfv{TC},_Z4barfv{DS}
+T.44._ZTIi:
+ .tc H.44._ZTIi{TC},_ZTIi{UA}
+T.48.main:
+ .tc H.48.main{TC},main{DS}
+T.24.__STATIC:
+ .tc H.24.__STATIC{TC},E.22.__STATIC{RW}
+T.18.NO_SYMBOL:
+ .tc H.18.NO_SYMBOL{TC},H.20.NO_SYMBOL{RO}
+T.28.__4:
+ .tc H.28.__4{TC},__4{DS}
+T.32.__8:
+ .tc H.32.__8{TC},__8{DS}
+T.36.__3:
+ .tc H.36.__3{TC},__3{DS}
+
+
+ .csect _Z4barfv{DS}, 3
+ .llong ._Z4barfv # "\0\0\0\0\0\0\0\0"
+ .llong TOC{TC0} # "\0\0\0\0\0\0\002\200"
+ .long 0x00000000 # "\0\0\0\0"
+ .long 0x00000000 # "\0\0\0\0"
+# End csect _Z4barfv{DS}
+
+
+ .csect main{DS}, 3
+ .llong .main # "\0\0\0\0\0\0\0\200"
+ .llong TOC{TC0} # "\0\0\0\0\0\0\002\200"
+ .long 0x00000000 # "\0\0\0\0"
+ .long 0x00000000 # "\0\0\0\0"
+# End csect main{DS}
+
+
+ .csect __4{DS}, 3
+ .llong H.10..__4 # "\0\0\0\0\0\0\002\0"
+ .llong TOC{TC0} # "\0\0\0\0\0\0\002\200"
+ .long 0x00000000 # "\0\0\0\0"
+ .long 0x00000000 # "\0\0\0\0"
+# End csect __4{DS}
+
+
+ .csect __8{DS}, 3
+ .llong H.12..__8 # "\0\0\0\0\0\0\002 "
+ .llong TOC{TC0} # "\0\0\0\0\0\0\002\200"
+ .long 0x00000000 # "\0\0\0\0"
+ .long 0x00000000 # "\0\0\0\0"
+# End csect __8{DS}
+
+
+ .csect __3{DS}, 3
+ .llong H.14..__3 # "\0\0\0\0\0\0\002@"
+ .llong TOC{TC0} # "\0\0\0\0\0\0\002\200"
+ .long 0x00000000 # "\0\0\0\0"
+ .long 0x00000000 # "\0\0\0\0"
+# End csect __3{DS}
+
+
+ .csect E.22.__STATIC{RW}, 3
+ .long 0x1cedbeef # "\034\355\276\357"
+ .long 0x00000003 # "\0\0\0\003"
+ .long 0x00000000 # "\0\0\0\0"
+ .long 0x00000000 # "\0\0\0\0"
+ .llong __3{DS} # "\0\0\0\0\0\0\003 "
+ .long 0xffffffff # "\377\377\377\377"
+ .long 0xffffffff # "\377\377\377\377"
+ .long 0x00000000 # "\0\0\0\0"
+ .long 0x00000000 # "\0\0\0\0"
+ .long 0x00000000 # "\0\0\0\0"
+ .long 0x00000000 # "\0\0\0\0"
+ .long 0x00000000 # "\0\0\0\0"
+ .long 0x00000000 # "\0\0\0\0"
+ .llong __8{DS} # "\0\0\0\0\0\0\003\b"
+ .long 0xffffffff # "\377\377\377\377"
+ .long 0xfffffffe # "\377\377\377\376"
+ .long 0x00000000 # "\0\0\0\0"
+ .long 0x00000000 # "\0\0\0\0"
+ .long 0x00000000 # "\0\0\0\0"
+ .long 0x00000000 # "\0\0\0\0"
+ .long 0x00000000 # "\0\0\0\0"
+ .long 0x00000000 # "\0\0\0\0"
+ .llong __4{DS} # "\0\0\0\0\0\0\002\360"
+ .long 0xffffffff # "\377\377\377\377"
+ .long 0xfffffffc # "\377\377\377\374"
+ .long 0x00000000 # "\0\0\0\0"
+ .long 0x00000000 # "\0\0\0\0"
+ .long 0x00000000 # "\0\0\0\0"
+ .long 0x00000000 # "\0\0\0\0"
+# End csect E.22.__STATIC{RW}
+
+
+ .csect H.20.NO_SYMBOL{RO}, 3
+ .long 0x63617567 # "caug"
+ .long 0x68742069 # "ht i"
+ .long 0x6e740a00 # "nt\n\0"
+# End csect H.20.NO_SYMBOL{RO}
+ .long 0x00000000 # "\0\0\0\0"
+
+
+
+# .bss section
+
+
+# dwarf sections
+
+# end dwarf sections
+#endif // defined(T1_CPP_CODE)
+
+#if defined(T2_CPP_CODE)
+#
+# This portion of assembly code is generated by IBM legacy xlclang++ compiler
+# from the following C++ source file for 64-bit mode.
+#
+# t2.cpp
+#
+#extern "C" int printf(const char *, ...);
+#
+#extern "C" unsigned int * __xlc_exception_handle();
+#
+#extern "C" unsigned int * wrap__xlc_exception_handle() {
+# printf("wrap__xlc_exception_handle called\n");
+# return __xlc_exception_handle();
+#}
+#
+.set r0,0; .set SP,1; .set RTOC,2; .set r3,3; .set r4,4
+.set r5,5; .set r6,6; .set r7,7; .set r8,8; .set r9,9
+.set r10,10; .set r11,11; .set r12,12; .set r13,13; .set r14,14
+.set r15,15; .set r16,16; .set r17,17; .set r18,18; .set r19,19
+.set r20,20; .set r21,21; .set r22,22; .set r23,23; .set r24,24
+.set r25,25; .set r26,26; .set r27,27; .set r28,28; .set r29,29
+.set r30,30; .set r31,31
+.set fp0,0; .set fp1,1; .set fp2,2; .set fp3,3; .set fp4,4
+.set fp5,5; .set fp6,6; .set fp7,7; .set fp8,8; .set fp9,9
+.set fp10,10; .set fp11,11; .set fp12,12; .set fp13,13; .set fp14,14
+.set fp15,15; .set fp16,16; .set fp17,17; .set fp18,18; .set fp19,19
+.set fp20,20; .set fp21,21; .set fp22,22; .set fp23,23; .set fp24,24
+.set fp25,25; .set fp26,26; .set fp27,27; .set fp28,28; .set fp29,29
+.set fp30,30; .set fp31,31
+.set v0,0; .set v1,1; .set v2,2; .set v3,3; .set v4,4
+.set v5,5; .set v6,6; .set v7,7; .set v8,8; .set v9,9
+.set v10,10; .set v11,11; .set v12,12; .set v13,13; .set v14,14
+.set v15,15; .set v16,16; .set v17,17; .set v18,18; .set v19,19
+.set v20,20; .set v21,21; .set v22,22; .set v23,23; .set v24,24
+.set v25,25; .set v26,26; .set v27,27; .set v28,28; .set v29,29
+.set v30,30; .set v31,31
+.set x0,0; .set x1,1; .set x2,2; .set x3,3; .set x4,4
+.set x5,5; .set x6,6; .set x7,7; .set x8,8; .set x9,9
+.set x10,10; .set x11,11; .set x12,12; .set x13,13; .set x14,14
+.set x15,15; .set x16,16; .set x17,17; .set x18,18; .set x19,19
+.set x20,20; .set x21,21; .set x22,22; .set x23,23; .set x24,24
+.set x25,25; .set x26,26; .set x27,27; .set x28,28; .set x29,29
+.set x30,30; .set x31,31; .set x32,32; .set x33,33; .set x34,34
+.set x35,35; .set x36,36; .set x37,37; .set x38,38; .set x39,39
+.set x40,40; .set x41,41; .set x42,42; .set x43,43; .set x44,44
+.set x45,45; .set x46,46; .set x47,47; .set x48,48; .set x49,49
+.set x50,50; .set x51,51; .set x52,52; .set x53,53; .set x54,54
+.set x55,55; .set x56,56; .set x57,57; .set x58,58; .set x59,59
+.set x60,60; .set x61,61; .set x62,62; .set x63,63
+.set q0,0; .set q1,1; .set q2,2; .set q3,3; .set q4,4
+.set q5,5; .set q6,6; .set q7,7; .set q8,8; .set q9,9
+.set q10,10; .set q11,11; .set q12,12; .set q13,13; .set q14,14
+.set q15,15; .set q16,16; .set q17,17; .set q18,18; .set q19,19
+.set q20,20; .set q21,21; .set q22,22; .set q23,23; .set q24,24
+.set q25,25; .set q26,26; .set q27,27; .set q28,28; .set q29,29
+.set q30,30; .set q31,31
+.set MQ,0; .set XER,1; .set DSCR,3; .set FROM_RTCU,4; .set FROM_RTCL,5
+.set FROM_DEC,6; .set LR,8; .set CTR,9; .set AMR,13; .set TID,17; .set DSISR,18
+.set DAR,19; .set TO_RTCU,20; .set TO_RTCL,21; .set TO_DEC,22; .set SDR_0,24
+.set SDR_1,25; .set SRR_0,26; .set SRR_1,27
+.set BO_dCTR_NZERO_AND_NOT,0; .set BO_dCTR_NZERO_AND_NOT_1,1
+.set BO_dCTR_ZERO_AND_NOT,2; .set BO_dCTR_ZERO_AND_NOT_1,3
+.set BO_IF_NOT,4; .set BO_IF_NOT_1,5; .set BO_IF_NOT_2,6
+.set BO_IF_NOT_3,7; .set BO_dCTR_NZERO_AND,8; .set BO_dCTR_NZERO_AND_1,9
+.set BO_dCTR_ZERO_AND,10; .set BO_dCTR_ZERO_AND_1,11; .set BO_IF,12
+.set BO_IF_1,13; .set BO_IF_2,14; .set BO_IF_3,15; .set BO_dCTR_NZERO,16
+.set BO_dCTR_NZERO_1,17; .set BO_dCTR_ZERO,18; .set BO_dCTR_ZERO_1,19
+.set BO_ALWAYS,20; .set BO_ALWAYS_1,21; .set BO_ALWAYS_2,22
+.set BO_ALWAYS_3,23; .set BO_dCTR_NZERO_8,24; .set BO_dCTR_NZERO_9,25
+.set BO_dCTR_ZERO_8,26; .set BO_dCTR_ZERO_9,27; .set BO_ALWAYS_8,28
+.set BO_ALWAYS_9,29; .set BO_ALWAYS_10,30; .set BO_ALWAYS_11,31
+.set CR0_LT,0; .set CR0_GT,1; .set CR0_EQ,2; .set CR0_SO,3
+.set CR1_FX,4; .set CR1_FEX,5; .set CR1_VX,6; .set CR1_OX,7
+.set CR2_LT,8; .set CR2_GT,9; .set CR2_EQ,10; .set CR2_SO,11
+.set CR3_LT,12; .set CR3_GT,13; .set CR3_EQ,14; .set CR3_SO,15
+.set CR4_LT,16; .set CR4_GT,17; .set CR4_EQ,18; .set CR4_SO,19
+.set CR5_LT,20; .set CR5_GT,21; .set CR5_EQ,22; .set CR5_SO,23
+.set CR6_LT,24; .set CR6_GT,25; .set CR6_EQ,26; .set CR6_SO,27
+.set CR7_LT,28; .set CR7_GT,29; .set CR7_EQ,30; .set CR7_SO,31
+.set TO_LT,16; .set TO_GT,8; .set TO_EQ,4; .set TO_LLT,2; .set TO_LGT,1
+
+ .rename H.4.NO_SYMBOL{PR},""
+ .rename H.10.NO_SYMBOL{TC},""
+ .rename H.12.NO_SYMBOL{RO},""
+ .rename H.16.wrap__xlc_exception_handle{TC},"wrap__xlc_exception_handle"
+
+ .lglobl H.4.NO_SYMBOL{PR}
+ .globl .wrap__xlc_exception_handle
+ .lglobl H.12.NO_SYMBOL{RO}
+ .globl wrap__xlc_exception_handle{DS}
+ .extern .printf{PR}
+ .extern .__xlc_exception_handle{PR}
+
+
+# .text section
+ .file "t2.cpp","Mon Jan 30 13:41:54 2023 ","IBM XL C/C++ for AIX, Version 16.1.0.13"
+ .machine "ppc64"
+
+
+ .csect H.4.NO_SYMBOL{PR}, 7
+.wrap__xlc_exception_handle: # 0x0000000000000000 (H.4.NO_SYMBOL)
+ mfspr r0,LR
+ std r31,-8(SP)
+ std r0,16(SP)
+ stdu SP,-128(SP)
+ ld r31,T.10.NO_SYMBOL(RTOC)
+ ori r3,r31,0x0000
+ bl .printf{PR}
+ ori r0,r0,0x0000
+ bl .__xlc_exception_handle{PR}
+ ori r0,r0,0x0000
+ ld r0,144(SP)
+ mtspr LR,r0
+ addi SP,SP,128
+ ld r31,-8(SP)
+ bclr BO_ALWAYS,CR0_LT
+ .long 0x00000000
+# traceback table
+ .byte 0x00 # VERSION=0
+ .byte 0x09 # LANG=TB_CPLUSPLUS
+ .byte 0x20 # IS_GL=0,IS_EPROL=0,HAS_TBOFF=1
+ # INT_PROC=0,HAS_CTL=0,TOCLESS=0
+ # FP_PRESENT=0,LOG_ABORT=0
+ .byte 0x41 # INT_HNDL=0,NAME_PRESENT=1
+ # USES_ALLOCA=0,CL_DIS_INV=WALK_ONCOND
+ # SAVES_CR=0,SAVES_LR=1
+ .byte 0x80 # STORES_BC=1,FPR_SAVED=0
+ .byte 0x01 # GPR_SAVED=1
+ .byte 0x00 # FIXEDPARMS=0
+ .byte 0x01 # FLOATPARMS=0,PARMSONSTK=1
+ .long 0x0000003c # TB_OFFSET
+ .short 26 # NAME_LEN
+ .byte "wrap__xlc_exception_handle" # NAME
+
+# End of traceback table
+ .long 0x00000000 # "\0\0\0\0"
+ .long 0x00000000 # "\0\0\0\0"
+ .long 0x00000000 # "\0\0\0\0"
+ .long 0x00000000 # "\0\0\0\0"
+ .long 0x00000000 # "\0\0\0\0"
+ .long 0x00000000 # "\0\0\0\0"
+# End csect H.4.NO_SYMBOL{PR}
+
+# .data section
+
+
+ .toc # 0x0000000000000080
+T.16.wrap__xlc_exception_handle:
+ .tc H.16.wrap__xlc_exception_handle{TC},wrap__xlc_exception_handle{DS}
+T.10.NO_SYMBOL:
+ .tc H.10.NO_SYMBOL{TC},H.12.NO_SYMBOL{RO}
+
+
+ .csect wrap__xlc_exception_handle{DS}, 3
+ .llong .wrap__xlc_exception_handle# "\0\0\0\0\0\0\0\0"
+ .llong TOC{TC0} # "\0\0\0\0\0\0\0\200"
+ .long 0x00000000 # "\0\0\0\0"
+ .long 0x00000000 # "\0\0\0\0"
+# End csect wrap__xlc_exception_handle{DS}
+
+
+ .csect H.12.NO_SYMBOL{RO}, 3
+ .long 0x77726170 # "wrap"
+ .long 0x5f5f786c # "__xl"
+ .long 0x635f6578 # "c_ex"
+ .long 0x63657074 # "cept"
+ .long 0x696f6e5f # "ion_"
+ .long 0x68616e64 # "hand"
+ .long 0x6c652063 # "le c"
+ .long 0x616c6c65 # "alle"
+# End csect H.12.NO_SYMBOL{RO}
+ .long 0x640a0000 # "d\n\0\0"
+ .long 0x00000000 # "\0\0\0\0"
+
+
+
+# .bss section
+
+
+# dwarf sections
+
+# end dwarf sections
+
+#endif // defined(T2_CPP_CODE)