From: Ulrich Drepper Date: Tue, 8 Jan 2002 06:30:43 +0000 (+0000) Subject: (execute_cfa_program): Fix DW_CFA_restore handling. X-Git-Tag: cvs/glibc-2-2-5~59 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=03f7b19e08062e0651180275239a4960813dd677;p=thirdparty%2Fglibc.git (execute_cfa_program): Fix DW_CFA_restore handling. --- diff --git a/sysdeps/generic/unwind-dw2.c b/sysdeps/generic/unwind-dw2.c index ac56e7c35c1..ca0299468f7 100644 --- a/sysdeps/generic/unwind-dw2.c +++ b/sysdeps/generic/unwind-dw2.c @@ -721,9 +721,9 @@ execute_cfa_program (const unsigned char *insn_ptr, _Unwind_Sword offset; _Unwind_Ptr ptrtmp; - 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, &ptrtmp); @@ -731,7 +731,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;