Crosstool 0.43 for the ppc8540 (e500)
Alan Dennis
Alan.Dennis@telsis.com
Wed May 2 14:30:00 GMT 2007
As requested in the crosstool howto, I'm posting my experience of using crosstool for an unsupported CPU type.
I've managed to get the current (0.43) crosstool to compile a powerPC 8540 (e500) target toolchain using Glibc 2.3.6 and GCC 4.1.1. To do this I used this patch:
Index: powerpc-8540-gcc-4.1.1-glibc-2.3.6.dat
===================================================================
--- powerpc-8540-gcc-4.1.1-glibc-2.3.6.dat
+++ powerpc-8540-gcc-4.1.1-glibc-2.3.6.dat
@@ -0,0 +1,9 @@
+TARGET=powerpc-8540-linux-gnu
+TARGET_CFLAGS="-O -mcpu=8540"
+GCC_EXTRA_CONFIG="--with-cpu=8540 --with-float=soft --enable-cxx-flags=-mcpu=8540 --enable-cxx-flags=-msoft-float --disable-multilib"
+GLIBC_EXTRA_CONFIG="$GLIBC_EXTRA_CONFIG --without-fp"
+BINUTILS_DIR=binutils-2.16.1
+GCC_DIR=gcc-4.1.1
+GLIBC_DIR=glibc-2.3.6
+LINUX_SANITIZED_HEADER_DIR=linux-libc-headers-2.6.12.0
+GLIBCTHREADS_FILENAME=glibc-linuxthreads-2.3.6
Index: patches/glibc-2.3.6/glibc-2.3.6-allow-gcc-4.1-powerpc32-initfini.s.patch
===================================================================
--- patches/glibc-2.3.6/glibc-2.3.6-allow-gcc-4.1-powerpc32-initfini.s.patch
+++ patches/glibc-2.3.6/glibc-2.3.6-allow-gcc-4.1-powerpc32-initfini.s.patch
@@ -0,0 +1,28 @@
+fixes
+
+{BUILD_DIR}/build-glibc/csu/crtn.o: In function "dummy":
+{BUILD_DIR}/build-glibc/csu/crtn.S:14: multiple definition of "dummy"
+{BUILD_DIR}/build-glibc/csu/crti.o:{BUILD_DIR}/build-glibc/csu/crti.S:33: first defined here
+{BUILD_DIR}/build-glibc/csu/crtn.o: In function "_init":
+{BUILD_DIR}/build-glibc/csu/crtn.S:30: multiple definition of "_init"
+{BUILD_DIR}/build-glibc/csu/crti.o:{BUILD_DIR}/build-glibc/csu/crti.S:65: first defined here
+{BUILD_DIR}/build-glibc/csu/crtn.o: In function "_fini":
+{BUILD_DIR}/build-glibc/csu/crtn.S:25: multiple definition of "_fini"
+{BUILD_DIR}/build-glibc/csu/crti.o:{BUILD_DIR}/build-glibc/csu/crti.S:38: first defined here
+{BUILD_DIR}/build-glibc/csu/crti.o: In function "_fini":
+{BUILD_DIR}/build-glibc/csu/crti.S:(.init+0x20): undefined reference to "i_am_not_a_leaf"
+{BUILD_DIR}/build-glibc/csu/crtn.o: In function "_fini":
+{BUILD_DIR}/build-glibc/csu/crtn.S:(.init+0x40): undefined reference to "i_am_not_a_leaf"
+{BUILD_DIR}/build-glibc/csu/crtn.S:(.init+0x44): undefined reference to "i_am_not_a_leaf"
+
+--- glibc-2.3.6/sysdeps/powerpc/powerpc32/Makefile.org 2006-08-21 19:03:01.000000000 -0700
++++ glibc-2.3.6/sysdeps/powerpc/powerpc32/Makefile 2006-08-21 19:03:19.000000000 -0700
+@@ -21,7 +21,7 @@
+ ifneq ($(elf),no)
+ # The initfini generation code doesn't work in the presence of -fPIC, so
+ # we use -fpic instead which is much better.
+-CFLAGS-initfini.s = -g0 -fpic -O1
++CFLAGS-initfini.s = -g0 -fpic -O1 $(fno-unit-at-a-time)
+
+ # There is no benefit to using sdata for these objects, and the user
+ # of the library should be able to control what goes into sdata.
Index: patches/glibc-linuxthreads-2.3.6/glibc-2.3.6-allow-gcc-4.1-powerpc32-initfini.s.patch
===================================================================
--- patches/glibc-linuxthreads-2.3.6/glibc-2.3.6-allow-gcc-4.1-powerpc32-initfini.s.patch
+++ patches/glibc-linuxthreads-2.3.6/glibc-2.3.6-allow-gcc-4.1-powerpc32-initfini.s.patch
@@ -0,0 +1,28 @@
+fixes
+
+{BUILD_DIR}/build-glibc/linuxthreads/crtn.o: In function "dummy":
+{BUILD_DIR}/build-glibc/linuxthreads/crtn.S:14: multiple definition of "dummy"
+{BUILD_DIR}/build-glibc/linuxthreads/crti.o:{BUILD_DIR}/build-glibc/linuxthreads/crti.S:33: first defined here
+{BUILD_DIR}/build-glibc/linuxthreads/crtn.o: In function "_fini":
+{BUILD_DIR}/build-glibc/linuxthreads/crtn.S:30: multiple definition of "_fini"
+{BUILD_DIR}/build-glibc/linuxthreads/crti.o:{BUILD_DIR}/build-glibc/linuxthreads/crti.S:65: first defined here
+{BUILD_DIR}/build-glibc/linuxthreads/crtn.o: In function "_init":
+{BUILD_DIR}/build-glibc/linuxthreads/crtn.S:23: multiple definition of "_init"
+{BUILD_DIR}/build-glibc/linuxthreads/crti.o:{BUILD_DIR}/build-glibc/linuxthreads/crti.S:37: first defined here
+{BUILD_DIR}/build-glibc/linuxthreads/crti.o: In function "_fini":
+{BUILD_DIR}/build-glibc/linuxthreads/crti.S:(.text+0x70): undefined reference to "i_am_not_a_leaf"
+{BUILD_DIR}/build-glibc/linuxthreads/crtn.o: In function "_fini":
+{BUILD_DIR}/build-glibc/linuxthreads/crtn.S:(.text+0x38): undefined reference to "i_am_not_a_leaf"
+collect2: ld returned 1 exit status
+
+--- glibc-2.3.6/linuxthreads/sysdeps/powerpc/Makefile.org 2003-02-17 20:33:17.000000000 +0000
++++ glibc-2.3.6/linuxthreads/sysdeps/powerpc/Makefile 2007-04-04 16:26:01.969067632 +0100
+@@ -1,6 +1,6 @@
+ ifeq ($(subdir):$(elf),linuxthreads:yes)
+ # See CFLAGS-initfini.s above; this is the same code.
+-CFLAGS-pt-initfini.s = -g0 -fpic -O1
++CFLAGS-pt-initfini.s = -g0 -fpic -O1 $(fno-unit-at-a-time)
+ endif
+ ifeq ($(subdir),csu)
+ gen-as-const-headers += tcb-offsets.sym
+
I didn't set GCC_CORE_DIR so that it uses gcc 4.1.1 as the core/bootstrap gcc rather than 3.3.6. This was because the 3.3.6 configuration is broken for the 8540 as follows:
Unknown cpu used with --with-cpu=8540
Configure in {BUILD_DIR}/build-gcc-core/gcc failed, exiting.
Although 3.3.6 appears to have support for the 8540, it seems that it's not possible to configure for it! I couldn't work out why it was necessary to use 3.3.6 as the core gcc (gcc-4.1.1-glibc-2.3.6.dat), but 4.1.1 seemed to do the trick so far... Maybe it would be better to fix 3.3.6 config for the 8540 and use that as the core gcc, rather than use 4.1.1?
I've used the toolchain to build a linux kernel (2.6.18) and busybox for an MPC8560ADS target, where I've also been able to run most of the crosstest regression tests, although with plenty of hassle from the root-jail! glibctest.sh required some serious hacking to get it to run, and I relented and ran the gcc tests as plain root on the target. I couldn't get the libstdc++ test to work at all. Otherwise here's my (snipped) results:
===================================================================
powerpc-8540-linux-gnu-gcc-4.1.1-glibc-2.3.6.gcc.sum
===================================================================
LAST_UPDATED: Obtained from SVN: tags/gcc_4_1_1_release revision 114100
Target is powerpc-8540-linux-gnu
Host is i686-host_pc-linux-gnu
=== gcc tests ===
Running target powerpc-8540-linux-gnu
FAIL: gcc.dg/20020103-1.c scan-assembler-not LC[0-9]
FAIL: gcc.dg/cleanup-10.c execution test
FAIL: gcc.dg/cleanup-11.c execution test
FAIL: gcc.dg/cleanup-5.c execution test
FAIL: gcc.dg/cleanup-8.c execution test
FAIL: gcc.dg/cleanup-9.c execution test
FAIL: gcc.dg/tree-ssa/stdarg-2.c scan-tree-dump f3: va_list escapes 0, needs to save 0 GPR units and [1-9][0-9]* FPR units
FAIL: gcc.dg/tree-ssa/stdarg-2.c scan-tree-dump f12: va_list escapes 0, needs to save 0 GPR units and [1-9][0-9]* FPR units
FAIL: gcc.dg/tree-ssa/stdarg-2.c scan-tree-dump f13: va_list escapes 0, needs to save 0 GPR units and [1-9][0-9]* FPR units
FAIL: gcc.dg/tree-ssa/stdarg-2.c scan-tree-dump f14: va_list escapes 0, needs to save [148] GPR units and [1-9][0-9]* FPR units
FAIL: gcc.dg/tree-ssa/stdarg-2.c scan-tree-dump f15: va_list escapes 0, needs to save [148] GPR units and [1-9][0-9]* FPR units
FAIL: gcc.dg/tree-ssa/stdarg-4.c scan-tree-dump f2: va_list escapes 0, needs to save 0 GPR units and all FPR units
FAIL: gcc.dg/tree-ssa/stdarg-4.c scan-tree-dump f4: va_list escapes 0, needs to save 0 GPR units and [1-9][0-9]* FPR units
FAIL: gcc.target/powerpc/20040622-1.c (test for excess errors)
FAIL: gcc.target/powerpc/980827-1.c (test for excess errors)
WARNING: gcc.target/powerpc/980827-1.c compilation failed to produce executable
FAIL: gcc.target/powerpc/compress-float-ppc-pic.c scan-assembler lfs
FAIL: gcc.target/powerpc/compress-float-ppc.c scan-assembler lfs
FAIL: gcc.target/powerpc/ppc-ldstruct.c (test for excess errors)
FAIL: gcc.target/powerpc/pr18096-1.c stack frame too large (test for warnings, line 11)
FAIL: gcc.target/powerpc/pr18096-1.c (test for excess errors)
FAIL: gcc.target/powerpc/pr25960.c (test for excess errors)
WARNING: gcc.target/powerpc/pr25960.c compilation failed to produce executable
=== gcc Summary ===
# of expected passes 40013
# of unexpected failures 21
# of expected failures 99
# of untested testcases 28
# of unsupported tests 343
/home/adennis/projects/tppc_linux/tppc/crosstool-0.43/build/powerpc-8540-linux-gnu/gcc-4.1.1-glibc-2.3.6/build-gcc/gcc/xgcc version 4.1.1
Host is i686-host_pc-linux-gnu
=== libstdc++ tests ===
Running target powerpc-8540-linux-gnu
=== libstdc++ Summary ===
Host is i686-host_pc-linux-gnu
=== g++ tests ===
Running target powerpc-8540-linux-gnu
XPASS: g++.dg/tree-ssa/pr14814.C scan-tree-dump-times &this 0
FAIL: g++.old-deja/g++.other/comdat5.C (test for excess errors)
=== g++ Summary ===
# of expected passes 12118
# of unexpected failures 1
# of unexpected successes 1
# of expected failures 66
# of unsupported tests 117
/home/adennis/projects/tppc_linux/tppc/crosstool-0.43/build/powerpc-8540-linux-gnu/gcc-4.1.1-glibc-2.3.6/build-gcc/gcc/testsuite/g++/../../g++ version 4.1.1
Host is i686-host_pc-linux-gnu
=== libstdc++ tests ===
Running target powerpc-8540-linux-gnu
=== libstdc++ Summary ===
Host is powerpc-8540-linux-gnu
=== libstdc++ tests ===
Running target powerpc-8540-linux-gnu
ERROR: tcl error sourcing /home/adennis/projects/tppc_linux/tppc/crosstool-0.43/build/powerpc-8540-linux-gnu/gcc-4.1.1-glibc-2.3.6/gcc-4.1.1/libstdc++-v3/testsuite/libstdc++-abi/abi.exp.
ERROR: could not compile testsuite_character.cc
ERROR: tcl error sourcing /home/adennis/projects/tppc_linux/tppc/crosstool-0.43/build/powerpc-8540-linux-gnu/gcc-4.1.1-glibc-2.3.6/gcc-4.1.1/libstdc++-v3/testsuite/libstdc++-dg/normal.exp.
ERROR: could not compile testsuite_character.cc
=== libstdc++ Summary ===
Compiler version: 4.1.1
Platform: powerpc-8540-linux-gnu
configure flags: --target=powerpc-8540-linux-gnu --host=i686-host_pc-linux-gnu --prefix=/home/adennis/projects/tppc_linux/tools --with-cpu=8540 --with-float=soft --enable-cxx-flags=-mcpu=8540 --enable-cxx-flags=-msoft-float --disable-multilib --with-headers=/home/adennis/projects/tppc_linux/tools/powerpc-8540-linux-gnu/include --with-local-prefix=/home/adennis/projects/tppc_linux/tools/powerpc-8540-linux-gnu --disable-nls --enable-threads=posix --enable-symvers=gnu --enable-__cxa_atexit --enable-shared --enable-c99 --enable-long-long --enable-languages=c,c++
===================================================================
powerpc-8540-linux-gnu-gcc-4.1.1-glibc-2.3.6.binutils.sum
===================================================================
[---------------------------- binutils/binutils.sum ---------------------------]
Test Run By adennis on Tue May 1 14:41:02 2007
Target is powerpc-8540-linux-gnu
Host is i686-host_pc-linux-gnu
=== binutils tests ===
Schedule of variations:
powerpc-8540-linux-gnu
Running target powerpc-8540-linux-gnu
<...snip...>
=== binutils Summary ===
# of expected passes 33
[---------------------------- gas/testsuite/gas.sum ---------------------------]
Test Run By adennis on Tue May 1 14:41:10 2007
Target is powerpc-8540-linux-gnu
Host is i686-host_pc-linux-gnu
=== gas tests ===
Schedule of variations:
powerpc-8540-linux-gnu
Running target powerpc-8540-linux-gnu
<...snip...>
=== gas Summary ===
# of expected passes 77
../as-new 2.16.1
[---------------------------- ld/ld.sum ---------------------------]
Test Run By adennis on Tue May 1 14:41:13 2007
Target is powerpc-8540-linux-gnu
Host is i686-host_pc-linux-gnu
=== ld tests ===
Schedule of variations:
powerpc-8540-linux-gnu
Running target powerpc-8540-linux-gnu
<...snip...>
Running /home/adennis/projects/tppc_linux/tppc/crosstool-0.43/build/powerpc-8540-linux-gnu/gcc-4.1.1-glibc-2.3.6/binutils-2.16.1/ld/testsuite/ld-elf/elf.exp ...
FAIL: ld-elf/group1
PASS: ld-elf/merge
PASS: ld-elf/merge2
PASS: ld-elf/warn1
<...snip...>
Running /home/adennis/projects/tppc_linux/tppc/crosstool-0.43/build/powerpc-8540-linux-gnu/gcc-4.1.1-glibc-2.3.6/binutils-2.16.1/ld/testsuite/ld-powerpc/powerpc.exp ...
PASS: Reloc section order
PASS: APUinfo section processing
PASS: TLS32 static exec
PASS: TLS32 helper shared library
FAIL: TLS32 dynamic exec
FAIL: TLS32 shared
<...snip...>
Running /home/adennis/projects/tppc_linux/tppc/crosstool-0.43/build/powerpc-8540-linux-gnu/gcc-4.1.1-glibc-2.3.6/binutils-2.16.1/ld/testsuite/ld-scripts/provide.exp ...
PASS: ld-scripts/provide-1
PASS: ld-scripts/provide-2
XFAIL: ld-scripts/provide-3
<...snip...>
Running /home/adennis/projects/tppc_linux/tppc/crosstool-0.43/build/powerpc-8540-linux-gnu/gcc-4.1.1-glibc-2.3.6/binutils-2.16.1/ld/testsuite/ld-selective/selective.exp ...
PASS: selective1
PASS: selective2
PASS: selective3
XFAIL: selective4
XFAIL: selective5
XFAIL: selective6
<...snip...>
=== ld Summary ===
# of expected passes 88
# of unexpected failures 3
# of expected failures 4
/home/adennis/projects/tppc_linux/tppc/crosstool-0.43/build/powerpc-8540-linux-gnu/gcc-4.1.1-glibc-2.3.6/build-binutils/ld/ld-new 2.16.1
===================================================================
glibc test
===================================================================
<...only failures were...>
cat /home/root-jail/build-glibc/stdio-common/tst-fseek.out
343: st_ctime not updated
348: st_mtime not updated
439: SEEK_END works
471: SEEK_END works
cat /home/root-jail/build-glibc/io/test-utime.out
modtime 1177948667 <262631 >262633
===================================================================
I might need to have a look at some of those gcc failures...
Any comments?
Cheers,
Alan Dennis
NOTICE & DISCLAIMER
This email including attachments (this "Document") is confidential and may contain legally privileged information. If you have received this Document in error please notify the sender immediately and delete this Document from your system without using, copying, disclosing or disseminating it or placing any reliance upon its contents. We cannot accept liability for any breaches of confidence arising through use of this Document.
The information contained in this Document is provided solely for information purposes on an "as is" basis without warranty of any kind, either express or implied, including without limitation any implied warranty of satisfactory or merchantable quality, fitness for a particular purpose or freedom from error or infringement. The user relies on the information contained herein, and its accuracy or otherwise, entirely at their own risk.
Any opinions expressed in this Document are those of the author and do not necessarily reflect the opinions of Telsis. We will not accept responsibility for any commitments made by our employees outside the scope of our business.
--
For unsubscribe information see http://sourceware.org/lists.html#faq
More information about the crossgcc
mailing list