Am 03.10.2010 um 16:07 schrieb Blue Swirl:
In theory, adding powerpc64-elf support to GCC should be a matter of adding a target Makefile fragment (t-elf64) to gcc/config/rs6000, maybe some other small changes.
Here's what I tried so far based on the 4.4 branch and t-linux64:
diff --git a/gcc/config.gcc b/gcc/config.gcc index 6f72224..794655a 100644 --- a/gcc/config.gcc +++ b/gcc/config.gcc @@ -1816,6 +1816,14 @@ powerpc-*-elf*) extra_options="${extra_options} rs6000/sysv4.opt" tmake_file="rs6000/t-fprules rs6000/t-fprules-fpbit rs6000/t- ppcgas rs6000/t-ppccomm" ;; +powerpc64-*-elf*) + tm_file="${tm_file} dbxelf.h elfos.h usegas.h svr4.h freebsd- spec.h rs6000/sysv4.h" + test x$with_cpu != x || cpu_is_64bit=yes + test x$cpu_is_64bit != xyes || tm_file="${tm_file} rs6000/ default64.h" + tm_file="rs6000/biarch64.h ${tm_file}" + extra_options="${extra_options} rs6000/sysv4.opt" + tmake_file="rs6000/t-fprules rs6000/t-fprules-fpbit rs6000/t- ppcgas rs6000/t-ppccomm rs6000/t-elf64" + ;; powerpc-*-eabialtivec*) tm_file="${tm_file} dbxelf.h elfos.h svr4.h freebsd-spec.h rs6000/sysv4.h rs6000/eabi.h rs6000/e500.h rs6000/eabialtivec.h" extra_options="${extra_options} rs6000/sysv4.opt" diff --git a/gcc/config/rs6000/t-elf64 b/gcc/config/rs6000/t-elf64 new file mode 100644 index 0000000..b95a291 --- /dev/null +++ b/gcc/config/rs6000/t-elf64 @@ -0,0 +1,26 @@ + +#rs6000/t-elf64 + +LIB2FUNCS_EXTRA += tramp.S $(srcdir)/config/rs6000/ppc64-fp.c \ + $(srcdir)/config/rs6000/darwin-ldouble.c +LIB2FUNCS_EXTRA := $(sort $(LIB2FUNCS_EXTRA)) + +TARGET_LIBGCC2_CFLAGS += -mno-minimal-toc + +# On Debian, Ubuntu and other derivative distributions, the 32bit libraries +# are found in /lib32 and /usr/lib32, /lib64 and /usr/lib64 are symlinks to +# /lib and /usr/lib, while other distributions install libraries into /lib64 +# and /usr/lib64. The LSB does not enforce the use of /lib64 and / usr/lib64, +# it doesn't tell anything about the 32bit libraries on those systems. Set +# MULTILIB_OSDIRNAMES according to what is found on the target. + +MULTILIB_OPTIONS = m64/m32 msoft-float +MULTILIB_DIRNAMES = 64 32 nof +MULTILIB_EXTRA_OPTS = fPIC mstrict-align +MULTILIB_EXCEPTIONS = m64/msoft-float +MULTILIB_EXCLUSIONS = m64/!m32/msoft-float +MULTILIB_OSDIRNAMES = ../lib64 ../lib nof +MULTILIB_MATCHES = $(MULTILIB_MATCHES_FLOAT) + +softfp_wrap_start := '#ifndef __powerpc64__' +softfp_wrap_end := '#endif'
Result:
Configuring in powerpc64-elf/libgcc configure: creating cache ./config.cache checking for --enable-version-specific-runtime-libs... no checking for a BSD-compatible install... /usr/bin/install -c checking for gawk... no checking for mawk... no checking for nawk... no checking for awk... awk checking build system type... powerpc-apple-darwin9.8.0 checking host system type... powerpc64-unknown-elf checking for powerpc64-elf-ar... /Users/andreas/QEMU/OpenBIOS/bin/ powerpc64-elf/bin/ar checking for powerpc64-elf-lipo... powerpc64-elf-lipo checking for powerpc64-elf-nm... /Users/andreas/QEMU/OpenBIOS/gcc- ppc64/./gcc/nm checking for powerpc64-elf-ranlib... /Users/andreas/QEMU/OpenBIOS/bin/ powerpc64-elf/bin/ranlib checking for powerpc64-elf-strip... /Users/andreas/QEMU/OpenBIOS/bin/ powerpc64-elf/bin/strip checking whether ln -s works... yes checking for powerpc64-elf-gcc... /Users/andreas/QEMU/OpenBIOS/gcc- ppc64/./gcc/xgcc -B/Users/andreas/QEMU/OpenBIOS/gcc-ppc64/./gcc/ -B/ Users/andreas/QEMU/OpenBIOS/bin/powerpc64-elf/bin/ -B/Users/andreas/ QEMU/OpenBIOS/bin/powerpc64-elf/lib/ -isystem /Users/andreas/QEMU/ OpenBIOS/bin/powerpc64-elf/include -isystem /Users/andreas/QEMU/ OpenBIOS/bin/powerpc64-elf/sys-include checking for suffix of object files... configure: error: in `/Users/ andreas/QEMU/OpenBIOS/gcc-ppc64/powerpc64-elf/libgcc': configure: error: cannot compute suffix of object files: cannot compile See `config.log' for more details. make[1]: *** [configure-target-libgcc] Error 1 make: *** [all] Error 2
Andreas