Commit c0467ce
committed
Don't assume we can restore every register.
We only deal with a limited subset of DWARF registers - namely the
"general purpose" registers, or those in the user_regs_struct. for
i386/x86_64, that's pretty much the only thing that appears in unwind
info - the floating point and SIMD registers are all caller-saved, so
the unwind info never includes info about how to restore them on unwind.
That is not true for ARM, so we need to be careful when we get
instructed to restore a register from a saved blob - we may not have
existing state for that register.
I have a proper fix for this in the main branch - it revamps the way we
handle registers entirely, so we can deal properly with floating point
and SIMD registers, but it's not finished, so doing this quick hack for
now.1 parent 5485635 commit c0467ce
1 file changed
+11
-3
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
982 | 982 | | |
983 | 983 | | |
984 | 984 | | |
985 | | - | |
| 985 | + | |
| 986 | + | |
| 987 | + | |
| 988 | + | |
| 989 | + | |
986 | 990 | | |
987 | 991 | | |
988 | 992 | | |
| |||
1024 | 1028 | | |
1025 | 1029 | | |
1026 | 1030 | | |
1027 | | - | |
| 1031 | + | |
1028 | 1032 | | |
1029 | | - | |
| 1033 | + | |
| 1034 | + | |
| 1035 | + | |
| 1036 | + | |
1030 | 1037 | | |
| 1038 | + | |
1031 | 1039 | | |
1032 | 1040 | | |
1033 | 1041 | | |
| |||
0 commit comments