* Re: [Linux-ia64] Trouble building cross compilers
2002-03-21 2:30 [Linux-ia64] Trouble building cross compilers Jesse Barnes
@ 2002-03-21 10:28 ` Andreas Schwab
2002-03-21 20:02 ` Steve Christiansen
` (5 subsequent siblings)
6 siblings, 0 replies; 8+ messages in thread
From: Andreas Schwab @ 2002-03-21 10:28 UTC (permalink / raw)
To: linux-ia64
Jesse Barnes <jbarnes@sgi.com> writes:
|> a) built and installed binutils 2.12 (configured with
|> --target=ia64-gnu-linux --prefix=/tmp/ia64-cross-3.0)
|> b) tried to build and install gcc 3.0 (configured with the same options
|> as above), but with 'make LANGUAGES=c' instead of just 'make'
LANGUAGES=c is obsolete, configure with --enable-languages=c instead.
|> Unfortunately, I got hung up in the middle of step (b) with the errors
|> shown below. IIRC, the Cygnus snapshot tarballs were 'cross-compile
|> ready' in that they had all the necessary header files and utilities
|> needed for a full cross development environment. Any notes on how
|> those trees were built would be appreciated.
You need to have the target headers installed somewhere and use
--with-headers=/place/of/target/headers when configuring the cross
compiler.
Andreas.
--
Andreas Schwab, SuSE Labs, schwab@suse.de
SuSE GmbH, Deutschherrnstr. 15-19, D-90429 Nürnberg
Key fingerprint = 58CA 54C7 6D53 942B 1756 01D3 44D5 214B 8276 4ED5
"And now for something completely different."
^ permalink raw reply [flat|nested] 8+ messages in thread* Re: [Linux-ia64] Trouble building cross compilers
2002-03-21 2:30 [Linux-ia64] Trouble building cross compilers Jesse Barnes
2002-03-21 10:28 ` Andreas Schwab
@ 2002-03-21 20:02 ` Steve Christiansen
2002-03-21 20:48 ` Jim Wilson
` (4 subsequent siblings)
6 siblings, 0 replies; 8+ messages in thread
From: Steve Christiansen @ 2002-03-21 20:02 UTC (permalink / raw)
To: linux-ia64
On Wed, Mar 20, 2002 at 06:30:47PM -0800, Jesse Barnes wrote:
> I have a couple of questions about cross compiling with gcc 3.0:
>
> 1) is it possible to build an x86 hosted gcc 3.0 ia64 cross compiler
> without nue? Or, which packages do I need to build a gcc cross
> compiler?
I've not been able to build an x86 to ia64 cross compiler using 3.0
"out of the box". I have a patch for 3.0.4 in the tarball at
http://www.ibm.com/developerworks/oss/linux/tools/
which seems to work. It's a hack, so no guarantees.
The 3.1 pre-release branch works fine, so you might consider using CVS
or a pre-release snapshot. See http://gcc.gnu.org
The gcc mailing list thread beginning with the following may also
be helpful.
http://gcc.gnu.org/ml/gcc/2002-02/msg00585.html
And here's another useful resource, if you haven't already discovered it:
http://www.objsw.com/CrossGCC/
--
Steve Christiansen <smc@us.ibm.com>
IBM Linux Technology Center
503-578-4177 IBM T/L: 775-4177
http://www.ibm.com/linux/ltc
^ permalink raw reply [flat|nested] 8+ messages in thread* Re: [Linux-ia64] Trouble building cross compilers
2002-03-21 2:30 [Linux-ia64] Trouble building cross compilers Jesse Barnes
2002-03-21 10:28 ` Andreas Schwab
2002-03-21 20:02 ` Steve Christiansen
@ 2002-03-21 20:48 ` Jim Wilson
2002-03-21 21:01 ` Jim Wilson
` (3 subsequent siblings)
6 siblings, 0 replies; 8+ messages in thread
From: Jim Wilson @ 2002-03-21 20:48 UTC (permalink / raw)
To: linux-ia64
>http://www.ibm.com/developerworks/oss/linux/tools/
I don't recommend using this patch.
Please use instead the prefered solution which I mentioned in this message
http://gcc.gnu.org/ml/gcc/2002-02/msg00643.html
Jim
^ permalink raw reply [flat|nested] 8+ messages in thread* Re: [Linux-ia64] Trouble building cross compilers
2002-03-21 2:30 [Linux-ia64] Trouble building cross compilers Jesse Barnes
` (2 preceding siblings ...)
2002-03-21 20:48 ` Jim Wilson
@ 2002-03-21 21:01 ` Jim Wilson
2002-03-22 0:28 ` Jesse Barnes
` (2 subsequent siblings)
6 siblings, 0 replies; 8+ messages in thread
From: Jim Wilson @ 2002-03-21 21:01 UTC (permalink / raw)
To: linux-ia64
>1) is it possible to build an x86 hosted gcc 3.0 ia64 cross compiler
> without nue? Or, which packages do I need to build a gcc cross
> compiler?
Yes.
Andreas Schwab mentioned --with-headers=. There is also a --with-libs= option.
You need to set up IA-64 .../usr/include and .../use/lib trees on the x86
host, and use these configure options to point at the IA-64 headers and libs
respectively.
There is also the matter that gcc 3.0 out of the box does not support cross
compiling from a 32-bit host to a 64-bit target. This was fixed for gcc 3.1,
but could not be fixed in gcc 3.0 because of latent problems with the powerpc
(rs6000) port. I've already pointed at the recommended solution:
http://gcc.gnu.org/ml/gcc/2002-02/msg00643.html
With these two changes, it should work, however, because gcc is big and
complicated and there are lots of things that can go wrong in a build. Cross
compilers are much harder to get right than native compilers. Personally, I
stopped building cross compilers once the ia64-linux systems were stable enough
such that I never had to worry about my native builds failing.
>2) does an x86 hosted gcc 3.0 ia64 cross compiler generate different
> code than a native ia64 compiler? If so, how different is the
> generated code?
If you use the solution suggested by Steve Christiansen, then your cross
compiled code will be very different, mainly bigger and slower. If you
use the solution I suggested, the code should be the same in theory, but
I don't know of anyone who has tried to verify this.
Jim
^ permalink raw reply [flat|nested] 8+ messages in thread* Re: [Linux-ia64] Trouble building cross compilers
2002-03-21 2:30 [Linux-ia64] Trouble building cross compilers Jesse Barnes
` (3 preceding siblings ...)
2002-03-21 21:01 ` Jim Wilson
@ 2002-03-22 0:28 ` Jesse Barnes
2002-03-22 0:57 ` Keith Owens
2002-03-22 1:02 ` Jesse Barnes
6 siblings, 0 replies; 8+ messages in thread
From: Jesse Barnes @ 2002-03-22 0:28 UTC (permalink / raw)
To: linux-ia64
On Thu, Mar 21, 2002 at 01:01:18PM -0800, Jim Wilson wrote:
> Yes.
Excellent.
> Andreas Schwab mentioned --with-headers=. There is also a --with-libs= option.
> You need to set up IA-64 .../usr/include and .../use/lib trees on the x86
> host, and use these configure options to point at the IA-64 headers and libs
> respectively.
That more or less did the trick. I did
--with-headers=<target_usr_include> and --with-libs=<target_usr_lib>,
though the build complained that crt.* and libc.so didn't exist, so I
copied from a target machine's /usr/lib directory and created a
libc.so -> libc-2.2.4.so symlink. After that was done, gcc-3.0 built
and installed as a cross compiler. The target machine I got
everything from was a Red Hat 7.1 box with the updated glibc-2.2.4
packages.
However, upon linking the kernel, I got the following errors. Do I
need a different version of binutils or something? I'm running 2.12.
/tmp/ia64-cross-3.0/bin/ia64-linux-ld -static -T arch/ia64/vmlinux.lds arch/ia64/kernel/head.o arch/ia64/kernel/init_task.o init/main.o init/version.o --start-group arch/ia64/kernel/kernel.o arch/ia64/mm/mm.o arch/ia64/ia32/ia32.o arch/ia64/sn/kernel/sn.o arch/ia64/sn/io/sgiio.o kernel/kernel.o mm/mm.o fs/fs.o ipc/ipc.o kdb/kdb.o drivers/acpi/acpi.o drivers/char/char.o drivers/block/block.o drivers/misc/misc.o drivers/net/net.o drivers/media/media.o drivers/ide/idedriver.o drivers/xscsi/xscsidrv.o drivers/x1394/x1394drv.o drivers/sgi/sn/sn_drivers.a drivers/pci/driver.o drivers/md/mddev.o net/network.o /home/jbarnes/working/snlinux-tot/linux/arch/ia64/lib/lib.a /home/jbarnes/working/snlinux-tot/linux/lib/lib.a /home/jbarnes/working/snlinux-tot/linux/arch/ia64/kdb/kdba.o /home/jbarnes/working/snlinux-tot/linux/arch/ia64/lib/lib.a --end-group -o .tmp_vmlinux1
arch/ia64/kernel/kernel.o(.IA_64.unwind.text.exit+0x0): undefined reference to `local symbols in discarded section .text.exit'
arch/ia64/kernel/kernel.o(.IA_64.unwind.text.exit+0x8): undefined reference to `local symbols in discarded section .text.exit'
arch/ia64/kernel/kernel.o(.IA_64.unwind.text.exit+0x18): undefined reference to `local symbols in discarded section .text.exit'
arch/ia64/kernel/kernel.o(.IA_64.unwind.text.exit+0x20): undefined reference to `local symbols in discarded section .text.exit'
arch/ia64/kernel/kernel.o(.IA_64.unwind.text.exit+0x0): unsupported reloc
arch/ia64/kernel/kernel.o(.IA_64.unwind.text.exit+0x8): unsupported reloc
arch/ia64/kernel/kernel.o(.IA_64.unwind.text.exit+0x18): unsupported reloc
arch/ia64/kernel/kernel.o(.IA_64.unwind.text.exit+0x20): unsupported reloc
make[1]: *** [kallsyms] Error 1
make[1]: Leaving directory `/home/jbarnes/working/snlinux-tot/linux'
make: *** [vmlinux] Error 2
> There is also the matter that gcc 3.0 out of the box does not support cross
> compiling from a 32-bit host to a 64-bit target. This was fixed for gcc 3.1,
> but could not be fixed in gcc 3.0 because of latent problems with the powerpc
> (rs6000) port. I've already pointed at the recommended solution:
> http://gcc.gnu.org/ml/gcc/2002-02/msg00643.html
Yeah, that was the easy part to fix...
> With these two changes, it should work, however, because gcc is big and
> complicated and there are lots of things that can go wrong in a build. Cross
> compilers are much harder to get right than native compilers. Personally, I
> stopped building cross compilers once the ia64-linux systems were stable enough
> such that I never had to worry about my native builds failing.
I prefer cross compiling when possible as it's *much* faster than
native compiling.
> If you use the solution suggested by Steve Christiansen, then your cross
> compiled code will be very different, mainly bigger and slower. If you
> use the solution I suggested, the code should be the same in theory, but
> I don't know of anyone who has tried to verify this.
I'll definitely check this out once I have the cross compiler fully
working. Thanks for all your help.
Jesse
^ permalink raw reply [flat|nested] 8+ messages in thread* Re: [Linux-ia64] Trouble building cross compilers
2002-03-21 2:30 [Linux-ia64] Trouble building cross compilers Jesse Barnes
` (4 preceding siblings ...)
2002-03-22 0:28 ` Jesse Barnes
@ 2002-03-22 0:57 ` Keith Owens
2002-03-22 1:02 ` Jesse Barnes
6 siblings, 0 replies; 8+ messages in thread
From: Keith Owens @ 2002-03-22 0:57 UTC (permalink / raw)
To: linux-ia64
On Thu, 21 Mar 2002 16:28:04 -0800,
Jesse Barnes <jbarnes@sgi.com> wrote:
>However, upon linking the kernel, I got the following errors. Do I
>need a different version of binutils or something? I'm running 2.12.
>
>/tmp/ia64-cross-3.0/bin/ia64-linux-ld -static -T arch/ia64/vmlinux.lds arch/ia64/kernel/head.o arch/ia64/kernel/init_task.o init/main.o init/version.o --start-group arch/ia64/kernel/kernel.o arch/ia64/mm/mm.o arch/ia64/ia32/ia32.o arch/ia64/sn/kernel/sn.o arch/ia64/sn/io/sgiio.o kernel/kernel.o mm/mm.o fs/fs.o ipc/ipc.o kdb/kdb.o drivers/acpi/acpi.o drivers/char/char.o drivers/block/block.o drivers/misc/misc.o drivers/net/net.o drivers/media/media.o drivers/ide/idedriver.o drivers/xscsi/xscsidrv.o drivers/x1394/x1394drv.o drivers/sgi/sn/sn_drivers.a drivers/pci/driver.o drivers/md/mddev.o net/network.o /home/jbarnes/working/snlinux-tot/linux/arch/ia64/lib/lib.a /home/jbarnes/working/snlinux-tot/linux/lib/lib.a /home/jbarnes/working/snlinux-tot/linux/arch/ia64/kdb/kdba.o /home/jbarnes/working/snlinux-tot/linux/arch/ia64/lib/lib.a --end-group -o .tmp_vmlinux1
>arch/ia64/kernel/kernel.o(.IA_64.unwind.text.exit+0x0): undefined reference to `local symbols in discarded section .text.exit'
>arch/ia64/kernel/kernel.o(.IA_64.unwind.text.exit+0x8): undefined reference to `local symbols in discarded section .text.exit'
>arch/ia64/kernel/kernel.o(.IA_64.unwind.text.exit+0x18): undefined reference to `local symbols in discarded section .text.exit'
>arch/ia64/kernel/kernel.o(.IA_64.unwind.text.exit+0x20): undefined reference to `local symbols in discarded section .text.exit'
>arch/ia64/kernel/kernel.o(.IA_64.unwind.text.exit+0x0): unsupported reloc
>arch/ia64/kernel/kernel.o(.IA_64.unwind.text.exit+0x8): unsupported reloc
>arch/ia64/kernel/kernel.o(.IA_64.unwind.text.exit+0x18): unsupported reloc
>arch/ia64/kernel/kernel.o(.IA_64.unwind.text.exit+0x20): unsupported reloc
>make[1]: *** [kallsyms] Error 1
>make[1]: Leaving directory `/home/jbarnes/working/snlinux-tot/linux'
>make: *** [vmlinux] Error 2
Recent binutils complain about dangling references to discarded
sections. binutils is up to date, check arch.ia64/vmlinux.lds.S, it
should have
/* Sections to be discarded */
/DISCARD/ : {
*(.text.exit)
*(.data.exit)
*(.exitcall.exit)
*(.IA_64.unwind.text.exit)
*(.IA_64.unwind_info.text.exit)
}
^ permalink raw reply [flat|nested] 8+ messages in thread* Re: [Linux-ia64] Trouble building cross compilers
2002-03-21 2:30 [Linux-ia64] Trouble building cross compilers Jesse Barnes
` (5 preceding siblings ...)
2002-03-22 0:57 ` Keith Owens
@ 2002-03-22 1:02 ` Jesse Barnes
6 siblings, 0 replies; 8+ messages in thread
From: Jesse Barnes @ 2002-03-22 1:02 UTC (permalink / raw)
To: linux-ia64
On Fri, Mar 22, 2002 at 11:57:28AM +1100, Keith Owens wrote:
> Recent binutils complain about dangling references to discarded
> sections. binutils is up to date, check arch.ia64/vmlinux.lds.S, it
> should have
>
> /* Sections to be discarded */
> /DISCARD/ : {
> *(.text.exit)
> *(.data.exit)
> *(.exitcall.exit)
> *(.IA_64.unwind.text.exit)
> *(.IA_64.unwind_info.text.exit)
> }
I had just figured this out... Downgrading to binutils-2.11 also
works. Now to see if native builds generate the same code as cross
compiles...
Thanks,
Jesse
^ permalink raw reply [flat|nested] 8+ messages in thread