Skip to content

Commit

Permalink
[libunwind][AIX] Fix the wrong traceback from signal handler (llvm#10…
Browse files Browse the repository at this point in the history
…1069)

Patch [llvm#92291](llvm#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.

(cherry picked from commit d90fa61)
  • Loading branch information
xingxue-ibm authored and llvmbot committed Jul 30, 2024
1 parent 67f509a commit 8a8a4a3
Show file tree
Hide file tree
Showing 2 changed files with 3 additions and 2 deletions.
3 changes: 2 additions & 1 deletion libunwind/src/UnwindCursor.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down
2 changes: 1 addition & 1 deletion libunwind/test/aix_signal_unwind.pass.sh.S
Original file line number Diff line number Diff line change
Expand Up @@ -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}
Expand Down

0 comments on commit 8a8a4a3

Please sign in to comment.