llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT--> @llvm/pr-subscribers-libunwind Author: Azat Khuzhin (azat) <details> <summary>Changes</summary> In case of this is frame of signal handler, the IP should be incremented, because 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. Refs: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=26208 --- Full diff: https://github.com/llvm/llvm-project/pull/92291.diff 1 Files Affected: - (modified) libunwind/src/DwarfInstructions.hpp (+6-1) ``````````diff diff --git a/libunwind/src/DwarfInstructions.hpp b/libunwind/src/DwarfInstructions.hpp index bd9ece60ee588..5ea535be4b974 100644 --- a/libunwind/src/DwarfInstructions.hpp +++ b/libunwind/src/DwarfInstructions.hpp @@ -365,7 +365,12 @@ int DwarfInstructions<A, R>::stepWithDwarf(A &addressSpace, pint_t pc, // Return address is address after call site instruction, so setting IP to // that does simulates a return. - newRegisters.setIP(returnAddress); + // + // In case of this is frame of signal handler, the IP should be + // incremented, because 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. + newRegisters.setIP(returnAddress + cieInfo.isSignalFrame); // Simulate the step by replacing the register set with the new ones. registers = newRegisters; `````````` </details> https://github.com/llvm/llvm-project/pull/92291 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits