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

Reply via email to