This is the mail archive of the crossgcc@sourceware.org mailing list for the crossgcc project.
See crosstool-NG for lots more information.
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
Other format: | [Raw text] |
On 05/19/2016 12:15 AM, Thomas De Schampheleire wrote:
I don't have your buildroot tree; I tried creating the wrapper with just -mcpu=e6500 added. But it fails in U-Boot build for T2080_RDB even before linking built-in.o:On Thu, May 19, 2016 at 8:13 AM, Alexey Neyman <stilor@att.net> wrote: [..]I created a toolchain based on that PR with the following configuration: CT_PREFIX_DIR="${CT_TOP_DIR}/targets/${CT_TARGET}" CT_ARCH_CPU="e6500" CT_ARCH_64=y CT_ARCH_powerpc=y CT_MULTILIB=y CT_KERNEL_linux=y CT_KERNEL_V_3_18=y CT_BINUTILS_EXTRA_CONFIG_ARRAY="--enable-targets=powerpc-linux,powerpc64-linux" CT_CC_GCC_V_4_9_3=y CT_CC_GCC_CORE_EXTRA_CONFIG_ARRAY="--enable-targets=powerpc-linux,powerpc64-linux" CT_CC_GCC_EXTRA_CONFIG_ARRAY="--enable-targets=powerpc-linux,powerpc64-linux" CT_CC_GCC_MULTILIB_LIST="powerpc-linux,powerpc64-linux" CT_CC_LANG_CXX=y The idea is that 32-bit should be the default, without requiring additional options on the compiler command-line. When passing this toolchain to buildroot, applications seems to build fine in 32-bit (I did not try to run them yet). The kernel is also correctly built in 64-bit. However, there is something wrong for u-boot. I get errors like:The fact that both 32- and 64-bit applications compile fine indicate that gcc indeed is passing the options to ld correctly. I tried building a simple app in 32- and 64-bit modes, with -v, and the output shows that in 64-bit mode, -m64 is added to the arguments - as expected./foo/output/host/usr/bin/powerpc64-unknown-linux-gnu-ld.bfd: Relocatable linking with relocations from format elf32-powerpc (arch/powerpc/cpu/mpc8xxx/cpu.o) to format elf64-powerpc (arch/powerpc/cpu/mpc8xxx/built-in.o) is not supportedWhich target are you building? I tried some random powerpc target (xpedite517x_defconfig) and the build failed due to some invalid assembly but went past mpc8xxx/built-in.o: CC arch/powerpc/cpu/mpc8xxx/cpu.o CC arch/powerpc/cpu/mpc8xxx/fdt.o CC arch/powerpc/cpu/mpc8xxx/fsl_lbc.o CC arch/powerpc/cpu/mpc8xxx/law.o LD arch/powerpc/cpu/mpc8xxx/built-in.o LD arch/powerpc/cpu/built-in.o AS arch/powerpc/cpu/mpc86xx/cache.o CC arch/powerpc/cpu/mpc86xx/cpu.o CC arch/powerpc/cpu/mpc86xx/cpu_init.o CC arch/powerpc/cpu/mpc86xx/fdt.o CC arch/powerpc/cpu/mpc86xx/interrupts.o CC arch/powerpc/cpu/mpc86xx/mpc8641_serdes.o CC arch/powerpc/cpu/mpc86xx/speed.o LD arch/powerpc/cpu/mpc86xx/built-in.o AS arch/powerpc/cpu/mpc86xx/start.o arch/powerpc/cpu/mpc86xx/start.S: Assembler messages: arch/powerpc/cpu/mpc86xx/start.S:466: Error: missing operand Hard to say what went wrong without the name of the target that failed for you. It looks, however, like U-Boot's build system expects binutils/gcc to default to exact CPU for the target - not surprising given the variety of PowerPC assembly dialects...The target is a custom board not available in upstream uboot. It is based on Freescale T2080. I don't have the repo at hand, I can check later if there is a similar upstream target that shows the same problem... If you cannot find a similar board, at least capture the commands that compiled the objects that went into linking, and the link command itself. With a bit of luck that may be sufficient to reproduce the issue :)I can reproduce the issue with the upstream config called 'T2080RDB'. Excerpt from the log: /foo/output/host/usr/bin/powerpc64-unknown-linux-gnu-gcc -Wp,-MD,board/freescale/common/.fman.o.d -nostdinc -isystem /foo/output/host/opt/ext-toolchain/bin/../lib/gcc/powerpc64-unknown-linux-gnu/4.9.3/include -Iinclude -I./arch/powerpc/include -I./board/isam_common -I./board/freescale/t208xrdb -include ./include/linux/kconfig.h -D__KERNEL__ -D__UBOOT__ -DCONFIG_SYS_TEXT_BASE=0xeff40000 -Wall -Wstrict-prototypes -Wno-format-security -fno-builtin -ffreestanding -Os -fno-stack-protector -g -fstack-usage -Wno-format-nonliteral -Werror=date-time -D__powerpc__ -ffixed-r2 -Wa,-me500 -msoft-float -mno-string -fno-delete-null-pointer-checks -mno-spe -fpic -mrelocatable -ffunction-sections -fdata-sections -meabi -pipe -D"KBUILD_STR(s)=#s" -D"KBUILD_BASENAME=KBUILD_STR(fman)" -D"KBUILD_MODNAME=KBUILD_STR(fman)" -c -o board/freescale/common/fman.o board/freescale/common/fman.c /foo/output/host/usr/bin/powerpc64-unknown-linux-gnu-ld.bfd -n -r -o board/freescale/common/built-in.o board/freescale/common/fman.o board/freescale/common/vid.o board/freescale/common/sys_eeprom.o /foo/output/host/usr/bin/powerpc64-unknown-linux-gnu-ld.bfd: Relocatable linking with relocations from format elf32-powerpc (board/freescale/common/fman.o) to format elf64-powerpc (board/freescale/common/built-in.o) is not supported s Be aware that I'm building with Buildroot, meaning that the compiler (not linker) is wrapped. When calling that wrapper, the real compiler is called with following extra options: --sysroot' '/home/tdescham/repo/isam/buildroot-fantg/output/host/usr/powerpc-buildroot-linux-gnu/sysroot' '-mcpu=e6500'
CC arch/powerpc/cpu/mpc8xxx/cpu.o {standard input}: Assembler messages: {standard input}:512: Error: junk at end of line: `128'scripts/Makefile.build:280: recipe for target 'arch/powerpc/cpu/mpc8xxx/cpu.o' failed
make[2]: *** [arch/powerpc/cpu/mpc8xxx/cpu.o] Error 1Using U-Boot 2016.05. Which version are you using? Is it possible that the sysroot contains something that changes GCC options (e.g. a gcc spec file)?
I did reproduce your issue, though, by running the commands you quoted above, manually.
The problem is that U-boot invokes ld directly, not through gcc; and ld is indeed defaulting to 64-bit. You toolchain config supplies --enable-targets to binutils configure, but binutils configure does not handle this option; the preferred mode is established by the supplied target.
Hence, you should build for powerpc, not for powerpc64 - that still allows --enable-targets option to gcc configure, so you'll still be able to build 64-bit binaries:
--- email-defconfig 2016-05-18 20:02:57.565718947 -0700 +++ email-defconfig.mod 2016-05-20 20:34:22.566050597 -0700 @@ -1,11 +1,9 @@ CT_PREFIX_DIR="${CT_TOP_DIR}/targets/${CT_TARGET}" CT_ARCH_CPU="e6500" -CT_ARCH_64=y CT_ARCH_powerpc=y CT_MULTILIB=y CT_KERNEL_linux=y CT_KERNEL_V_3_18=y -CT_BINUTILS_EXTRA_CONFIG_ARRAY="--enable-targets=powerpc-linux,powerpc64-linux" CT_CC_GCC_V_4_9_3=y CT_CC_GCC_CORE_EXTRA_CONFIG_ARRAY="--enable-targets=powerpc-linux,powerpc64-linux" CT_CC_GCC_EXTRA_CONFIG_ARRAY="--enable-targets=powerpc-linux,powerpc64-linux" Alexey.
Thanks, Thomas
-- For unsubscribe information see http://sourceware.org/lists.html#faq
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |