A bug in the -02 optimisation of GCC 5.4 6.1 and 6.2 causes setup_command_line() to not pass the correct first argument to strcpy and therefore not actually copy the command_line.
A workaround patch was proposed: http://patchwork.ozlabs.org/patch/673130/ some discussion ensued. A GCC bug was raised: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=71709 The bug has been fixed in 7.0 and backported to GCC 5 and GCC 6. At the time of writing GCC 5.4 is the most recent and is affected. GCC 6.3 contains the backported fix, has been tested and appears safe to use. Heavy-lifting-by: Akshay Adiga <akshay.ad...@linux.vnet.ibm.com> Signed-off-by: Cyril Bur <cyril...@gmail.com> --- v2: Added check to only blacklist compilers on little-endian arch/powerpc/Makefile | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/arch/powerpc/Makefile b/arch/powerpc/Makefile index 31286fa7873c..db5d8dabf1ca 100644 --- a/arch/powerpc/Makefile +++ b/arch/powerpc/Makefile @@ -381,6 +381,7 @@ TOUT := .tmp_gas_check # - gcc-3.4 and binutils-2.14 are a fatal combination # - Require gcc 4.0 or above on 64-bit # - gcc-4.2.0 has issues compiling modules on 64-bit +# - gcc-5.4, 6.1, 6.2 don't copy the command_line around correctly checkbin: @if test "$(cc-name)" != "clang" \ && test "$(cc-version)" = "0304" ; then \ @@ -414,6 +415,16 @@ checkbin: echo -n '*** Please use a different binutils version.' ; \ false ; \ fi + @if test "x${CONFIG_CPU_LITTLE_ENDIAN}" = "xy" \ + && { test "$(cc-version)" = "0504" \ + || test "$(cc-version)" = "0601" \ + || test "$(cc-version)" = "0602" ; } ; then \ + echo -n '*** GCC-5.4 6.1 6.2 have a bad -O2 optimisation ' ; \ + echo 'which will cause lost command_line options (at least).' ; \ + echo '*** Please use a different GCC version.' ; \ + false ; \ + fi + CLEAN_FILES += $(TOUT) -- 2.11.1