unwind: repair register restoration for OR1K
authorSaleem Abdulrasool <compnerd@compnerd.org>
Mon, 2 Aug 2021 16:34:56 +0000 (16:34 +0000)
committerSaleem Abdulrasool <compnerd@compnerd.org>
Mon, 2 Aug 2021 16:36:37 +0000 (16:36 +0000)
commitd6d0b6559e97a3d0b258814e870d3e19f3a7ffcc
tree189077b5963c637e685da50ad0364bc3a5970df4
parent9e02f58780ab8734e5d27a0138bd477d18ae64a1
unwind: repair register restoration for OR1K

Currently, OR1K architecture put the program counter at offset 0x128 of
the current `or1k_thread_state_t`. However, the PC is restored after
updating the thread pointer in `r3`, which causes the PC to be fetched
incorrectly.

This patch swaps the order of restoration of `r9` and `r3`, such that
the PC is restored to `r9` using the current thread state.

Patch by Oi Chee Cheung!

Reviewed By: whitequark, compnerd

Differential Revision: https://reviews.llvm.org/D107042
libunwind/src/UnwindRegistersRestore.S