diff options
author | jakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4> | 2001-12-11 17:27:14 +0000 |
---|---|---|
committer | jakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4> | 2001-12-11 17:27:14 +0000 |
commit | fc8b707bfb4d1204c1c5e68b309bdb04dabf71b8 (patch) | |
tree | 8acf041d6ed2ebb46793ee00cf66d828723aa28b /gcc/unwind-dw2.c | |
parent | 2af77e7909cca0ded9fdb11d7474afebfa6c2694 (diff) | |
download | gcc-fc8b707bfb4d1204c1c5e68b309bdb04dabf71b8.tar.gz |
* unwind-dw2.c (execute_cfa_program): Fix DW_CFA_restore handling.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@47881 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/unwind-dw2.c')
-rw-r--r-- | gcc/unwind-dw2.c | 6 |
1 files changed, 3 insertions, 3 deletions
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; |