From: Keith Owens <kaos@ocs.com.au>
To: linux-ia64@vger.kernel.org
Subject: Re: [Linux-ia64] Unwind problem for __attribute__ noreturn
Date: Wed, 21 Mar 2001 08:54:20 +0000 [thread overview]
Message-ID: <marc-linux-ia64-105590693005314@msgid-missing> (raw)
In-Reply-To: <marc-linux-ia64-105590693005303@msgid-missing>
On Tue, 20 Mar 2001 23:54:44 -0800,
David Mosberger <davidm@hpl.hp.com> wrote:
>I also doubt that adding "nop"s in the compiler is the right solution.
After more thought, the problem of attribute ((noreturn)) affects all
architectures, all debuggers and all programs. It is not just ia64 +
kdb + kernel that has this problem. An unconditional call to function
F which is declared noreturn is converted by gcc into this
A:
...
call F
X:
...
which will cause problems for all debuggers on all architectures. The
return address is pointing at the start of X but F was really called by
A.
It is not valid to always subtract 1 from the return address because
programmers are allowed to do this in assembler.
A:
ret = B
goto F
X:
...
B:
...
F cannot assume that it was entered via call, it can be entered by any
hand coded construct that gives the same environment as a call, even if
the return is not to the code that branched to F. Subtracting 1 from
ret in this case would give B-1 which appears to be in X and is wrong.
Given these two methods of entering a function there is no way for a
debugger to adjust the return address correctly in all cases. Because
the problem case only occurs in C when function F is declared noreturn,
a change to gcc to emit
A:
...
call F
nop
X:
...
if and only if
(1) F is declared noreturn and
(2) gcc is discarding the rest of the function that calls F
will fix the problem. The extra nop is only required to avoid a call
as the very last instruction of a function so it has very little impact
on the size of most programs. It has zero impact on the speed of the
programs because the nop is never executed, it is just a padding code.
next prev parent reply other threads:[~2001-03-21 8:54 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2001-03-20 2:10 [Linux-ia64] Unwind problem for __attribute__ noreturn Keith Owens
2001-03-21 0:24 ` Jim Wilson
2001-03-21 6:03 ` Keith Owens
2001-03-21 6:53 ` David Mosberger
2001-03-21 7:12 ` Jim Wilson
2001-03-21 7:54 ` David Mosberger
2001-03-21 8:54 ` Keith Owens [this message]
2001-03-21 17:54 ` David Mosberger
2001-03-21 18:48 ` Cary Coutant
2001-03-21 19:07 ` Jim Wilson
2001-03-21 19:13 ` David Mosberger
2001-03-21 19:13 ` Jim Wilson
2001-03-21 19:26 ` Cary Coutant
2001-03-21 19:40 ` Jim Wilson
2001-03-21 19:58 ` David Mosberger
2001-03-21 20:00 ` Jim Wilson
2001-03-21 20:38 ` Jim Wilson
2001-03-21 22:54 ` David Mosberger
2001-03-21 23:42 ` Cary Coutant
2001-03-22 17:00 ` Rich Altmaier
2001-03-23 20:28 ` Jim Wilson
2001-03-24 0:58 ` Cary Coutant
2001-03-24 1:27 ` Keith Owens
2001-03-24 1:37 ` Jim Wilson
2001-03-26 22:06 ` DE-DINECHIN,CHRISTOPHE (HP-Cupertino,ex1)
2001-03-26 22:58 ` Cary Coutant
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=marc-linux-ia64-105590693005314@msgid-missing \
--to=kaos@ocs.com.au \
--cc=linux-ia64@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox