Date: Thu, 4 Jun 2015 20:10:41 +0200 From: Joerg Sonnenberger <joerg@britannica.bec.de> To: freebsd-hackers@freebsd.org Subject: Re: [PATCH] timecounters: Fix timehand generation read/write Message-ID: <20150604181041.GC11630@britannica.bec.de> In-Reply-To: <2023236942.13088.1433365253885.JavaMail.zimbra@embedded-brains.de> References: <1433331966-27548-1-git-send-email-sebastian.huber@embedded-brains.de> <20150603203228.GA9774@britannica.bec.de> <2023236942.13088.1433365253885.JavaMail.zimbra@embedded-brains.de>
next in thread | previous in thread | raw e-mail | index | archive | help
On Wed, Jun 03, 2015 at 11:00:53PM +0200, Sebastian Huber wrote: > In my interpretation of the C standard this is implementation defined behaviour. See also: > > https://gcc.gnu.org/onlinedocs/gcc/Volatiles.html I don't think that is nearly correct as far as any data accessibly from global objects is concerned beside the volatile. C11 5.1.2.3 (2) and (3) are the relevant clauses. An assignment to a volatile object is a sequence point with side effects. All assignments before that sequence point must be visible to whatever possible side effect the volatile has. Similar, it can implicitly change all globals, so no read can be moved from after the sequence point to before. This is much stricter than the normal as-if rule, since a sequence of side-effect-free operations can be implemented anyway the compiler likes. A different interpretation would be quite questionable. Note that this is all just about the rules of the C abstract machine. It is not about the observable behavior of a multi-processor machine. Whether or not TSO is enough for this purpose is a completely different question. Joerg
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20150604181041.GC11630>