Messages in this thread | | | Date | Fri, 16 Aug 2013 08:43:35 -0700 | From | Guenter Roeck <> | Subject | Re: Linux kernel cross-compilers |
| |
On 08/16/2013 02:45 AM, Max Filippov wrote: >>> Guenter, >>> can you share a complete build log with V=1? >>> >> >> http://roeck-us.net/linux/logs/make.xtensa.log.bad >> http://roeck-us.net/linux/logs/make.xtensa.log.ok >> >> Key difference: the failing command in the bad case is >> xtensa-linux-objcopy -O elf32-xtensa-le >> and in the good case >> xtensa-linux-objcopy -O elf32-xtensa-be >> >> Same compiler (4.6.3 from kernel.org), same configuration file, same command >> line. >> Configuration file is generated from defconfig, and the resulting .config >> file >> is the same in both cases. >> >> If I execute make and expicitly set BIG_ENDIAN=1 on the failing system as >> parameter to it, >> it works fine. If I set BIG_ENDIAN=0 on the passing system, it fails. >> >> I am puzzled. Guess there must be something different, but I have no idea >> what it might be. > > What is the output of > > echo -e __XTENSA_EB__ | xtensa-linux-gcc -E - > > on the failing system? > It is "1", but that let me pinpoint the problem.
On the failing system, the version of echo executed by make does not understand the "-e" option. Thus, when running arch/xtensa/boot/Makefile, "echo -e __XTENSA_EB__" returns "-e __XTENSA_EB__", which doesn't compile, and BIG_ENDIAN ends up being 0. So the compiler is completely innocent.
I found out the root source: SHELL is set the /bin/sh, which on the failing system points to /bin/dash (default in Ubuntu, or at least it used to be). dash apparently has a built-in version of echo which does not understand '-e'. Oh well.
Thanks a lot for helping me to track this down!
Guenter
| |