[libunwind][AIX] Fix the wrong traceback from signal handler (#101069)
Patch [llvm#92291](https://github.com/llvm/llvm-project/pull/92291) causes wrong traceback from a signal handler for AIX because the AIX unwinder uses the traceback table at the end of each function instead of FDE/CIE for unwinding. This patch adds a condition to exclude traceback table based unwinding from the code added by the patch.
This commit is contained in:
parent
95e9afff30
commit
d90fa61260
@ -2589,7 +2589,8 @@ void UnwindCursor<A, R>::setInfoBasedOnIPRegister(bool isReturnAddress) {
|
||||
--pc;
|
||||
#endif
|
||||
|
||||
#if !(defined(_LIBUNWIND_SUPPORT_SEH_UNWIND) && defined(_WIN32))
|
||||
#if !(defined(_LIBUNWIND_SUPPORT_SEH_UNWIND) && defined(_WIN32)) && \
|
||||
!defined(_LIBUNWIND_SUPPORT_TBTAB_UNWIND)
|
||||
// In case of this is frame of signal handler, the IP saved in the signal
|
||||
// handler points to first non-executed instruction, while FDE/CIE expects IP
|
||||
// to be after the first non-executed instruction.
|
||||
|
@ -10,7 +10,7 @@
|
||||
// a correct traceback when the function raising the signal does not save
|
||||
// the link register or does not store the stack back chain.
|
||||
|
||||
// REQUIRES: target=powerpc{{(64)?}}-ibm-aix
|
||||
// REQUIRES: target=powerpc{{(64)?}}-ibm-aix{{.*}}
|
||||
|
||||
// Test when the function raising the signal does not save the link register
|
||||
// RUN: %{cxx} -x c++ %s -o %t.exe -DCXX_CODE %{flags} %{compile_flags}
|
||||
|
Loading…
x
Reference in New Issue
Block a user