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>