forked from OSchip/llvm-project
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
This commit is contained in:
parent
9e02f58780
commit
d6d0b6559e
|
@ -800,11 +800,12 @@ DEFINE_LIBUNWIND_FUNCTION(_ZN9libunwind14Registers_or1k6jumptoEv)
|
|||
l.lwz r30,120(r3)
|
||||
l.lwz r31,124(r3)
|
||||
|
||||
# load new pc into ra
|
||||
l.lwz r9, 128(r3)
|
||||
|
||||
# at last, restore r3
|
||||
l.lwz r3, 12(r3)
|
||||
|
||||
# load new pc into ra
|
||||
l.lwz r9, 128(r3)
|
||||
# jump to pc
|
||||
l.jr r9
|
||||
l.nop
|
||||
|
|
Loading…
Reference in New Issue