Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 3 Jan 2016 10:24:43 -0800
From:      NGie Cooper <yaneurabeya@gmail.com>
To:        Joerg Sonnenberger <joerg@britannica.bec.de>
Cc:        freebsd-hackers@freebsd.org
Subject:   Re: variables optimized out
Message-ID:  <51901B1D-BCB2-4C9B-977C-C69E56C60A4D@gmail.com>
In-Reply-To: <20160103181139.GA16659@britannica.bec.de>
References:  <CAA99N-OKyxzVaJ4ayXRUGAoovNtHFXTpOXPkwhdw9k3LEMnOtw@mail.gmail.com> <20160103145923.GA16970@becker.bs.l> <20160103181139.GA16659@britannica.bec.de>

next in thread | previous in thread | raw e-mail | index | archive | help

> On Jan 3, 2016, at 10:11, Joerg Sonnenberger <joerg@britannica.bec.de> =
wrote:
>=20
> On Sun, Jan 03, 2016 at 03:59:23PM +0100, Bertram Scharpf wrote:
>> Hi,
>>=20
>> On Sunday, 03. Jan 2016, 14:38:33 +0100, robbinson defau wrote:
>>> Im debugging some issues in the kernel and as the kernel is compiled =
by
>>> default with -O2, a lot of variables are optimized out. So i made =
changes
>>> to make.conf (CFLAGS and COPTFLAGS).\
>>>=20
>>> All builds fine, but I get the weirdest of panics that most =
certainly not
>>> happen with -O2. [...]
>>=20
>> I just had a look at "man make.conf" and that says:
>>=20
>>     CFLAGS	   (str) Controls the compiler setting when compiling C =
code.
>> 		   Optimization levels other than -O and -O2 are not =
sup=E2=80=90
>> 		   ported.
>>=20
>> At least to me this is a surprise. I'm really disappointed
>> about what programming style has become common.
>=20
> There are two strong historical reasons from GCC behavior:
> - a lot of the -O3 optimisations has been known to break questionable
> code
> - a lot of the warnings significantly change behavior depending on the
> optmizer.
>=20
> While the former is not a big problem for disabling optimisation, the
> latter certainly is. Note that with clang there is no difference =
between
> -O and -O2.

Hi Joerg,
	We had some discussion on this a while ago internally at $work. =
clang optimizes a lot of variables away and doesn=E2=80=99t track them =
like later versions of gcc does (unfortunately 4.2.1 in base also lacks =
this capability): https://llvm.org/bugs/show_bug.cgi?id=3D23636 (clang =
lacks -ftracking[-assignments]). The only way you can reliably debug a =
program today is to compile code with `DEBUG_FLAGS=3D"-g -O0=E2=80=9D`, =
but that might change behavior of the code due to how it was optimized =
(and it might make things less efficient), so caveat emptor. You will =
definitely need to increase your stack space with the kernel for =
instance.
Hope this helps!
-NGie=



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?51901B1D-BCB2-4C9B-977C-C69E56C60A4D>