summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjason <jason@138bc75d-0d04-0410-961f-82ee72b054a4>2002-01-07 22:41:42 +0000
committerjason <jason@138bc75d-0d04-0410-961f-82ee72b054a4>2002-01-07 22:41:42 +0000
commitf2c8b8e7ab52f67f6a1d761540df80648b9817a3 (patch)
treee33eeef40fdd9893e09f089b42483a89dea6e375
parentd198495113effcccb968f1d32d6ff92105b7010d (diff)
downloadgcc-f2c8b8e7ab52f67f6a1d761540df80648b9817a3.tar.gz
* unwind-dw2.c (execute_cfa_program): Use < again.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@48617 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--gcc/ChangeLog4
-rw-r--r--gcc/unwind-dw2.c9
2 files changed, 12 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 6f8967fe617..a13b5b2adac 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,7 @@
+2002-01-07 Jason Merrill <jason@redhat.com>
+
+ * unwind-dw2.c (execute_cfa_program): Use < again.
+
2002-01-07 Jakub Jelinek <jakub@redhat.com>
* predict.c (combine_predictions_for_insn): Avoid division by zero.
diff --git a/gcc/unwind-dw2.c b/gcc/unwind-dw2.c
index c2619bd8898..ef9b33bddbf 100644
--- a/gcc/unwind-dw2.c
+++ b/gcc/unwind-dw2.c
@@ -705,7 +705,14 @@ execute_cfa_program (const unsigned char *insn_ptr,
/* Don't allow remember/restore between CIE and FDE programs. */
fs->regs.prev = NULL;
- while (insn_ptr < insn_end && fs->pc <= context->ra)
+ /* The comparison with the return address uses < rather than <= because
+ we are only interested in the effects of code before the call; for a
+ noreturn function, the return address may point to unrelated code with
+ a different stack configuration that we are not interested in. We
+ assume that the call itself is unwind info-neutral; if not, or if
+ there are delay instructions that adjust the stack, these must be
+ reflected at the point immediately before the call insn. */
+ while (insn_ptr < insn_end && fs->pc < context->ra)
{
unsigned char insn = *insn_ptr++;
_Unwind_Word reg, utmp;