There is some recent code added to Linux 4.2, that relies on disabled
optimization.
This might be an interesting case of unclear interpretation/misuse of
the C language.

#ifdef __OPTIMIZE__
 #error "The CPU Jitter random number generator must not be compiled
with optimizations.
See documentation. Use the compiler switch -O0 for compiling jitterentropy.c."
#endif

https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/crypto/jitterentropy.c

Documentation: http://www.chronox.de/jent/doc/CPU-Jitter-NPTRNG.html

2015-06-27 1:48 GMT+02:00 Peter Sewell <peter.sew...@cl.cam.ac.uk>:
> On 26 June 2015 at 20:27, Joseph Myers <jos...@codesourcery.com> wrote:
>> On Fri, 26 Jun 2015, Peter Sewell wrote:
>>
>>> > It's s simple matter of points-to analysis.  &foo + anything may be
>>> > assumed (in practice) to point to something within foo (or just past the
>>> > end) and not to alias anything accessed through a pointer based on &bar.
>>> > If the compiler can see something like &foo + (&bar - &foo) there is no
>>> > guarantee of whether it will assume it to point within foo or bar and that
>>> > may not be consistent for different uses (so it may end up concluding the
>>> > pointer compares unequal to itself).
>>>
>>> Ok, that's fine in some (perhaps most) situations, but it's not
>>> compatible with what seems to be a significant body of systems code
>>> out there - people mentioned important usages in FreeBSD, Linux, QEMU,
>>> and other places. How can these be reconciled?  We imagine:
>>
>> Does that code actually access the same object via both routes in code
>> that might get moved past each other (or values get reused because the
>> compiler didn't think they could have changed) as a consequence of the
>> points-to analysis?  If the aliasing isn't visible, it's less likely to
>> cause problems.
>
> It's a good question - quite possibly not, though it's hard to
> investigate; really we have no idea.   But I'm not sure how we could
> state a condition like that precisely in some reasonable way, and if
> the conditions under which this is safe become too complex, that in
> itself becomes a failing in the language definition - at the end of
> the day, it has to be comprehensible.
>
> More generally, the programming-language design tradeoff between
> simplicity on the one hand and performance and expressivity on the
> other is always a difficult thing to manage.  The wide range of
> opinions out there about what C behaviour can be relied on suggests
> that C may have veered too far to the latter in some respects.
>
>>> a) Compilation of that systems code could turn off this analysis (and
>>> whatever optimisation depends on it) entirely.  What's the cheapest
>>> way to do that?
>>
>> I think -fno-tree-pta should disable it (I don't know what the cost of
>> that is).
>
> thanks,
> Peter
>
>
>> --
>> Joseph S. Myers
>> jos...@codesourcery.com

Reply via email to