public inbox for crossgcc@sourceware.org
 help / color / mirror / Atom feed
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

  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).