On June 10, 2014 8:04:13 PM CEST, Steven Noonan <ste...@uplinklabs.net> wrote: >On Tue, Jun 10, 2014 at 10:46 AM, Linus Torvalds ><torva...@linux-foundation.org> wrote: >> On Tue, Jun 10, 2014 at 6:23 AM, Jiri Kosina <jkos...@suse.cz> wrote: >>> We have been chasing a memory corruption bug, which turned out to be >>> caused by very old gcc (4.3.4), which happily turned conditional >load into >>> a non-conditional one, and that broke correctness (the condition was >met >>> only if lock was held) and corrupted memory. >> >> Just out of interest, can you point to the particular kernel code >that >> caused this? I think that's more interesting than the example program >> you show - which I'm sure is really nice for gcc developers as an >> example, but from a kernel standpoint I think it's more important to >> show the particular problems this caused for the kernel? >> > >Jiri, is there a workaround for compilers that don't support '--param >allow-store-data-races=0'? For example:
The optimization that purposely performs the undesired transform is loop store motion which is part of the tree loop invariant motion optimization. You can disable that with -fno-tree-loop-im. That the bug didn't appear with newer compilers was due to lucky decisions to not inline a particular function. Richard. >$ gcc-4.5 -O2 -o cond_store cond_store.c && ./cond_store >Segmentation fault (core dumped) > >$ gcc-4.5 -O2 --param allow-store-data-races=0 -o cond_store >cond_store.c && ./cond_store >cc1: error: invalid parameter ‘allow-store-data-races’ > >$ gcc-4.5 -v >Using built-in specs. >COLLECT_GCC=gcc-4.5 >COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-unknown-linux-gnu/4.5.4/lto-wrapper >Target: x86_64-unknown-linux-gnu >Configured with: ../configure --prefix=/usr --mandir=/usr/share/man >--infodir=/usr/share/info --libdir=/usr/lib --libexecdir=/usr/lib >--program-suffix=-4.5 --enable-shared >--enable-languages=c,c++,fortran,objc,obj-c++ --enable-__cxa_atexit >--disable-libstdcxx-pch --disable-multilib --disable-libgomp >--disable-libmudflap --disable-libssp --enable-clocale=gnu >--with-tune=generic --with-cloog --with-ppl --with-system-zlib >Thread model: posix >gcc version 4.5.4 (GCC) -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/