aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2001-12-11 18:27:14 +0100
committerJakub Jelinek <jakub@gcc.gnu.org>2001-12-11 18:27:14 +0100
commitf0451e26f99676ad8fc7069b8788446e9eec2c3b (patch)
tree8acf041d6ed2ebb46793ee00cf66d828723aa28b
parenta3bcfa679bd4602b817c356b96005263f2ad00f4 (diff)
downloadgcc-f0451e26f99676ad8fc7069b8788446e9eec2c3b.zip
gcc-f0451e26f99676ad8fc7069b8788446e9eec2c3b.tar.gz
gcc-f0451e26f99676ad8fc7069b8788446e9eec2c3b.tar.bz2
* unwind-dw2.c (execute_cfa_program): Fix DW_CFA_restore handling.
From-SVN: r47881
-rw-r--r--gcc/ChangeLog4
-rw-r--r--gcc/unwind-dw2.c6
2 files changed, 7 insertions, 3 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index a2ec53c..4fe21250 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,7 @@
+2001-12-11 Jakub Jelinek <jakub@redhat.com>
+
+ * unwind-dw2.c (execute_cfa_program): Fix DW_CFA_restore handling.
+
2001-12-10 Roger Sayle <roger@eyesopen.com>
* builtins.c (expand_builtin): Use a switch statement to list
diff --git a/gcc/unwind-dw2.c b/gcc/unwind-dw2.c
index a5ac3683..c2619bd 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;