From 7d8ac2930bce171807333f4d4aa6839e0120c16c Mon Sep 17 00:00:00 2001 From: Jason Merrill Date: Mon, 7 Jan 2002 17:41:42 -0500 Subject: [PATCH] * unwind-dw2.c (execute_cfa_program): Use < again. From-SVN: r48617 --- gcc/ChangeLog | 4 ++++ gcc/unwind-dw2.c | 9 ++++++++- 2 files changed, 12 insertions(+), 1 deletion(-) 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 + + * unwind-dw2.c (execute_cfa_program): Use < again. + 2002-01-07 Jakub Jelinek * 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; -- 2.30.2