Date: Thu, 13 Jan 2000 17:00:33 +0200 From: Giorgos Keramidas <charon@hades.hell.gr> To: Mikhail Evstiounin <evstiounin@adelphia.net> Cc: freebsd-questions@freebsd.org Subject: Re: Volatile variables Message-ID: <20000113170033.F2590@hades.hell.gr> In-Reply-To: <00f401bf5dc7$1bb3b360$fc353018@evstiouninadelphia.net.pit.adelphia.net> References: <00f401bf5dc7$1bb3b360$fc353018@evstiouninadelphia.net.pit.adelphia.net>
next in thread | previous in thread | raw e-mail | index | archive | help
On Thu, Jan 13, 2000 at 08:07:12AM -0500, Mikhail Evstiounin wrote:
>
> -----Original Message-----
> From: Oliver Fromme <olli@dorifer.heim3.tu-clausthal.de>
>
> Could you explain me how it helps in your example? I pointed, that
> you can get signal between two assembler commands and it does
> destroys all your assumptions.
As I said in a previous posting a few minutes ago, Oliver did not use
that example of mine for supporting his notion of `volatile'. Not only
because it was not his example, but because the example was ill
fortuned since I did not use `cc -O2 -S hello.c' when converting the C
source to assembler. When I tried this a few seconds ago it gave:
% cat hello.c
volatile int k;
int main (void)
{
k = 0;
k = 1;
return 0;
}
% cc -O2 -S hello.c
% cat hello.s
.text
.p2align 2
.globl main
.type main,@function
main:
pushl %ebp
movl %esp,%ebp
movl $0,k
movl $1,k
xorl %eax,%eax
leave
ret
.Lfe1:
.size main,.Lfe1-main
.comm k,4,4
which does in fact use what you suggested in a previous posting, the
instructions that set `k' to 1 are converted to `movl $1,k' which I can
assume that executes atomically as far as signals are concerned.
It seems that `volatile' is effective in GNU C only when optimizations
are enabled, because without optimizations the code is, well...,
unoptimal, and can cause great troubles when used with signals ;)
--
Giorgos Keramidas, < keramida @ ceid . upatras . gr >
"What we have to learn to do, we learn by doing." [Aristotle]
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-questions" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20000113170033.F2590>
