[libc++abi][AIX] Use reserved slot in stack to pass the address of exception object
authorXing Xue <xingxue@outlook.com>
Thu, 27 Oct 2022 19:11:06 +0000 (15:11 -0400)
committerXing Xue <xingxue@outlook.com>
Thu, 27 Oct 2022 19:11:06 +0000 (15:11 -0400)
commita499051f10a2d0150b60c14493558476039f701a
tree74aa173c914a217a8a00554648bf8bc18c4dc727
parentc0095050dacff8a7b0e9066cfd1c37c684bc4fa3
[libc++abi][AIX] Use reserved slot in stack to pass the address of exception object

Summary:
The existing implementation of the personality for legacy IBM xlclang++ compiler generated code passes the address of exception object in r14 for the landing pad to retrieve with a call to __xlc_exception_handle(). This clobbers the content of r14 in user code (and potentially, when running cleanup actions, the address of another exception object being passed). This patch changes to use the stack slot reserved for compilers to pass the address. It has been confirmed that xlclang++-generated code does not use this slot.

Reviewed by: hubert.reinterpretcast, cebowleratibm
libcxxabi/src/aix_state_tab_eh.inc
libcxxabi/test/vendor/ibm/aix_xlclang_nested_excp_32.pass.sh.s [new file with mode: 0644]
libcxxabi/test/vendor/ibm/aix_xlclang_nested_excp_64.pass.sh.s [new file with mode: 0644]