diff options
author | jason <jason@138bc75d-0d04-0410-961f-82ee72b054a4> | 2002-01-07 22:41:42 +0000 |
---|---|---|
committer | jason <jason@138bc75d-0d04-0410-961f-82ee72b054a4> | 2002-01-07 22:41:42 +0000 |
commit | f2c8b8e7ab52f67f6a1d761540df80648b9817a3 (patch) | |
tree | e33eeef40fdd9893e09f089b42483a89dea6e375 /gcc/unwind-dw2.c | |
parent | d198495113effcccb968f1d32d6ff92105b7010d (diff) | |
download | gcc-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
Diffstat (limited to 'gcc/unwind-dw2.c')
-rw-r--r-- | gcc/unwind-dw2.c | 9 |
1 files changed, 8 insertions, 1 deletions
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; |