From: Alexey Neyman <stilor@att.net>
To: Thomas De Schampheleire <patrickdepinguin@gmail.com>
Cc: Cody P Schafer <dev@codyps.com>,
"Yann E. MORIN" <yann.morin.1998@free.fr>,
Ray Donnelly <mingw.android@gmail.com>,
crossgcc maillist <crossgcc@sourceware.org>,
Bryan Hundven <bryanhundven@gmail.com>
Subject: Re: Current state of multilib support (powerpc)
Date: Sat, 21 May 2016 05:22:00 -0000 [thread overview]
Message-ID: <573FF08B.5060209@att.net> (raw)
In-Reply-To: <CAAXf6LXevhRVqoKrS-dZVhtD=yhHEMxAddXcdvY8b9BAQXVQnQ@mail.gmail.com>
On 05/19/2016 12:15 AM, Thomas De Schampheleire wrote:
> 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 supported
>>> Which 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'
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:
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 1
Using 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
next prev parent reply other threads:[~2016-05-21 5:22 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-05-17 13:20 Thomas De Schampheleire
2016-05-17 13:50 ` Bryan Hundven
2016-05-18 12:34 ` Thomas De Schampheleire
2016-05-18 21:11 ` Bryan Hundven
2016-05-19 4:46 ` Alexey Neyman
2016-05-19 4:55 ` Alexey Neyman
[not found] ` <CAAXf6LX3cPe2eF2BDfGiLDdCMbBq8TxPFGCWYawB8wCZ-yj-Xg@mail.gmail.com>
[not found] ` <573D596D.9020505@att.net>
2016-05-19 7:15 ` Thomas De Schampheleire
2016-05-21 5:22 ` Alexey Neyman [this message]
2016-05-21 19:46 ` Thomas De Schampheleire
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=573FF08B.5060209@att.net \
--to=stilor@att.net \
--cc=bryanhundven@gmail.com \
--cc=crossgcc@sourceware.org \
--cc=dev@codyps.com \
--cc=mingw.android@gmail.com \
--cc=patrickdepinguin@gmail.com \
--cc=yann.morin.1998@free.fr \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).