This patch sucks ass. diff -Nrup gcc-3.4-20031231.orig/configure gcc-3.4-20031231/configure --- gcc-3.4-20031231.orig/configure 2003-12-21 23:42:31.000000000 +0100 +++ gcc-3.4-20031231/configure 2004-01-06 10:09:46.000000000 +0100 @@ -1131,7 +1131,7 @@ case "${target}" in esac ;; *-*-uclinux*) - noconfigdirs="$noconfigdirs target-newlib target-libgloss target-rda ${libgcj}" + noconfigdirs="$noconfigdirs target-newlib target-libgloss target-rda" ;; *-*-vxworks*) noconfigdirs="$noconfigdirs target-newlib target-libgloss target-libiberty ${libgcj}" diff -Nrup gcc-3.4-20031231.orig/configure.in gcc-3.4-20031231/configure.in --- gcc-3.4-20031231.orig/configure.in 2003-12-21 06:11:42.000000000 +0100 +++ gcc-3.4-20031231/configure.in 2004-01-06 10:09:34.000000000 +0100 @@ -370,7 +370,7 @@ case "${target}" in esac ;; *-*-uclinux*) - noconfigdirs="$noconfigdirs target-newlib target-libgloss target-rda ${libgcj}" + noconfigdirs="$noconfigdirs target-newlib target-libgloss target-rda" ;; *-*-vxworks*) noconfigdirs="$noconfigdirs target-newlib target-libgloss target-libiberty ${libgcj}" diff -Nrup gcc-3.4-20031231.orig/libffi/configure gcc-3.4-20031231/libffi/configure --- gcc-3.4-20031231.orig/libffi/configure 2003-11-22 14:41:32.000000000 +0100 +++ gcc-3.4-20031231/libffi/configure 2004-01-06 23:47:37.000000000 +0100 @@ -2654,7 +2654,7 @@ sparc-*-linux* | sparc-*-netbsdelf*) TAR sparc64-*-linux* | sparc64-*-netbsd*) TARGET=SPARC; TARGETDIR=sparc;; alpha*-*-linux* | alpha*-*-osf* | alpha*-*-freebsd* | alpha*-*-netbsd*) TARGET=ALPHA; TARGETDIR=alpha;; ia64*-*-*) TARGET=IA64; TARGETDIR=ia64;; -m68k-*-linux*) TARGET=M68K; TARGETDIR=m68k;; +m68k-*-linux* | m68k-*-uclinux*) TARGET=M68K; TARGETDIR=m68k;; mips64*-*);; mips-sgi-irix5.* | mips-sgi-irix6.*) TARGET=MIPS_IRIX; TARGETDIR=mips;; mips*-*-linux*) TARGET=MIPS_LINUX; TARGETDIR=mips;; diff -Nrup gcc-3.4-20031231.orig/libffi/configure.in gcc-3.4-20031231/libffi/configure.in --- gcc-3.4-20031231.orig/libffi/configure.in 2003-11-21 12:24:08.000000000 +0100 +++ gcc-3.4-20031231/libffi/configure.in 2004-01-06 23:47:17.000000000 +0100 @@ -68,7 +68,7 @@ sparc-*-linux* | sparc-*-netbsdelf*) TAR sparc64-*-linux* | sparc64-*-netbsd*) TARGET=SPARC; TARGETDIR=sparc;; alpha*-*-linux* | alpha*-*-osf* | alpha*-*-freebsd* | alpha*-*-netbsd*) TARGET=ALPHA; TARGETDIR=alpha;; ia64*-*-*) TARGET=IA64; TARGETDIR=ia64;; -m68k-*-linux*) TARGET=M68K; TARGETDIR=m68k;; +m68k-*-linux* | m68k-*-uclinux*) TARGET=M68K; TARGETDIR=m68k;; mips64*-*);; mips-sgi-irix5.* | mips-sgi-irix6.*) TARGET=MIPS_IRIX; TARGETDIR=mips;; mips*-*-linux*) TARGET=MIPS_LINUX; TARGETDIR=mips;; diff -Nrup gcc-3.4-20031231.orig/libffi/src/m68k/sysv.S gcc-3.4-20031231/libffi/src/m68k/sysv.S --- gcc-3.4-20031231.orig/libffi/src/m68k/sysv.S 2003-10-21 21:01:56.000000000 +0200 +++ gcc-3.4-20031231/libffi/src/m68k/sysv.S 2004-01-07 03:33:22.000000000 +0100 @@ -44,7 +44,11 @@ ffi_call_SYSV: move.l 20(%fp),%d2 | If the return value pointer is NULL, assume no return value. +#if defined(__mc68020__) || defined(__mcoldfire__) tst.l %a1 +#else + cmp.w #0,%a1 +#endif jbeq noretval btst #0,%d2 @@ -60,6 +64,7 @@ retlongint: jbra epilogue retfloat: +#if defined(__mc68881__) btst #2,%d2 jbeq retdouble fmove.s %fp0,(%a1) @@ -76,6 +81,7 @@ retlongdouble: jbeq retpointer fmove.x %fp0,(%a1) jbra epilogue +#endif /* __mc68881__ */ retpointer: btst #5,%d2 @@ -87,7 +93,10 @@ retstruct: btst #6,%d2 jbeq noretval move.l 24(%fp),%d2 +#if defined(__mc68020__) && !defined(__mcpu32__) + /* FIXME! */ bfins %d0,(%a1){#0,%d2} +#endif /* __mc68020__ || __mcoldfire__ */ noretval: epilogue: