From f0451e26f99676ad8fc7069b8788446e9eec2c3b Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Tue, 11 Dec 2001 18:27:14 +0100 Subject: [PATCH] * unwind-dw2.c (execute_cfa_program): Fix DW_CFA_restore handling. From-SVN: r47881 --- gcc/ChangeLog | 4 ++++ gcc/unwind-dw2.c | 6 +++--- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index a2ec53c9005..4fe21250d76 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,7 @@ +2001-12-11 Jakub Jelinek + + * unwind-dw2.c (execute_cfa_program): Fix DW_CFA_restore handling. + 2001-12-10 Roger Sayle * builtins.c (expand_builtin): Use a switch statement to list diff --git a/gcc/unwind-dw2.c b/gcc/unwind-dw2.c index a5ac3683030..c2619bd8898 100644 --- a/gcc/unwind-dw2.c +++ b/gcc/unwind-dw2.c @@ -711,9 +711,9 @@ execute_cfa_program (const unsigned char *insn_ptr, _Unwind_Word reg, utmp; _Unwind_Sword offset, stmp; - if (insn & DW_CFA_advance_loc) + if ((insn & 0xc0) == DW_CFA_advance_loc) fs->pc += (insn & 0x3f) * fs->code_align; - else if (insn & DW_CFA_offset) + else if ((insn & 0xc0) == DW_CFA_offset) { reg = insn & 0x3f; insn_ptr = read_uleb128 (insn_ptr, &utmp); @@ -721,7 +721,7 @@ execute_cfa_program (const unsigned char *insn_ptr, fs->regs.reg[reg].how = REG_SAVED_OFFSET; fs->regs.reg[reg].loc.offset = offset; } - else if (insn & DW_CFA_restore) + else if ((insn & 0xc0) == DW_CFA_restore) { reg = insn & 0x3f; fs->regs.reg[reg].how = REG_UNSAVED; -- 2.30.2