mirror of
https://github.com/tobast/libunwind-eh_elf.git
synced 2024-11-17 13:47:37 +01:00
36b46f1921
We should update locations of the registers after all of them will be restored. Otherwise some locations will be incorrect. For example if function stores ebp, edi, esi and ebx registers on stack in its prologue, compiler can generate following unwind info: DW_CFA_expression: r5 (ebp) (DW_OP_breg5 (ebp): 0) DW_CFA_expression: r7 (edi) (DW_OP_breg5 (ebp): -4) DW_CFA_expression: r6 (esi) (DW_OP_breg5 (ebp): -8) DW_CFA_expression: r3 (ebx) (DW_OP_breg5 (ebp): -12) In this case locations of the ebx and ebp will be calculated using current ebp but locations of the esi and edi will be calculated using previous (restored) one. Due to it their locations will be incorrect and it could lead to crash if we will try to get esi or edi value. This patch fixes this problem. |
||
---|---|---|
.. | ||
Gexpr.c | ||
Gfde.c | ||
Gfind_proc_info-lsb.c | ||
Gfind_unwind_table.c | ||
global.c | ||
Gparser.c | ||
Gpe.c | ||
Lexpr.c | ||
Lfde.c | ||
Lfind_proc_info-lsb.c | ||
Lfind_unwind_table.c | ||
Lparser.c | ||
Lpe.c |