--- sysdeps/m68k/asm-syntax.h	2006-07-07 09:02:53.000000000 -0700
+++ sysdeps/m68k/asm-syntax.h	2006-07-06 05:37:00.000000000 -0700
@@ -93,7 +93,9 @@
 #define cmpl cmp.l
 #define orl or.l
 #define clrl clr.l
+#define andw and.w
 #define eorw eor.w
+#define andl and.l
 #define lsrl lsr.l
 #define lsll lsl.l
 #define roxrl roxr.l
@@ -103,7 +105,10 @@
 #define addql addq.l
 #define subl sub.l
 #define subxl subx.l
+#define subqw subq.w
 #define subql subq.l
 #define negl neg.l
 #define mulul mulu.l
+#define tstw tst.w
+#define tstl tst.l
 #endif
--- sysdeps/m68k/bits/byteswap.h	2006-07-07 09:02:53.000000000 -0700
+++ sysdeps/m68k/bits/byteswap.h	2006-07-06 05:37:00.000000000 -0700
@@ -35,7 +35,7 @@
   ((((x) & 0xff000000) >> 24) | (((x) & 0x00ff0000) >>  8) | \
    (((x) & 0x0000ff00) <<  8) | (((x) & 0x000000ff) << 24))
 
-#if defined __GNUC__ && __GNUC__ >= 2
+#if defined __GNUC__ && __GNUC__ >= 2 && !defined(__mcoldfire__)
 # define __bswap_32(x) \
   __extension__							\
   ({ unsigned int __bswap_32_v;					\
--- sysdeps/m68k/bits/setjmp.h	2006-07-07 09:02:53.000000000 -0700
+++ sysdeps/m68k/bits/setjmp.h	2006-07-06 05:37:00.000000000 -0700
@@ -38,6 +38,8 @@ typedef struct
     /* There are eight floating point registers which
        are saved in IEEE 96-bit extended format.  */
     char __fpregs[8 * (96 / 8)];
+#elif defined __mcffpu__
+    char __fpregs[8 * (64 / 8)];
 #endif
 
   } __jmp_buf[1];
--- sysdeps/m68k/dl-machine.h	2006-07-07 09:02:53.000000000 -0700
+++ sysdeps/m68k/dl-machine.h	2006-07-06 05:37:00.000000000 -0700
@@ -23,6 +23,7 @@
 #define ELF_MACHINE_NAME "m68k"
 
 #include <sys/param.h>
+#include <sysdep.h>
 
 /* Return nonzero iff ELF header is compatible with the running host.  */
 static inline int
@@ -48,7 +49,7 @@ static inline Elf32_Addr
 elf_machine_load_address (void)
 {
   Elf32_Addr addr;
-  asm ("lea _dl_start(%%pc), %0\n\t"
+  asm (PCREL_OP ("lea", "_dl_start", "%0", "%0", "%%pc") "\n\t"
        "sub.l _dl_start@GOT.w(%%a5), %0"
        : "=a" (addr));
   return addr;
@@ -130,7 +131,7 @@ _dl_start_user:\n\
 	move.l %d0, %a4\n\
 	| See if we were run as a command with the executable file\n\
 	| name as an extra leading argument.\n\
-	move.l _dl_skip_args(%pc), %d0\n\
+	" PCREL_OP ("move.l", "_dl_skip_args", "%d0", "%d0", "%pc") "\n\
 	| Pop the original argument count\n\
 	move.l (%sp)+, %d1\n\
 	| Subtract _dl_skip_args from it.\n\
@@ -143,12 +144,12 @@ _dl_start_user:\n\
 	pea 8(%sp, %d1*4)\n\
 	pea 8(%sp)\n\
 	move.l %d1, -(%sp)\n\
-	move.l _rtld_local(%pc), -(%sp)\n\
+	" PCREL_OP ("move.l", "_rtld_local", "-(%sp)", "%d0", "%pc") "\n\
 	jbsr _dl_init_internal@PLTPC\n\
 	addq.l #8, %sp\n\
 	addq.l #8, %sp\n\
 	| Pass our finalizer function to the user in %a1.\n\
-	lea _dl_fini(%pc), %a1\n\
+	" PCREL_OP ("lea", "_dl_fini", "%a1", "%a1", "%pc") "\n\
 	| Initialize %fp with the stack pointer.\n\
 	move.l %sp, %fp\n\
 	| Jump to the user's entry point.\n\
--- sysdeps/m68k/dl-trampoline.S	2006-07-07 09:02:53.000000000 -0700
+++ sysdeps/m68k/dl-trampoline.S	2006-08-11 01:35:48.000000000 -0700
@@ -34,7 +34,12 @@ _dl_runtime_resolve:
 	| Pop parameters
 	addq.l #8, %sp
 	| Call real function.
+#ifdef __mcoldfire__
+	move.l %d0,-(%sp)
+	rts
+#else
 	jmp (%d0)
+#endif
 	.size _dl_runtime_resolve, . - _dl_runtime_resolve
 
 	.text
@@ -64,7 +69,12 @@ _dl_runtime_profile:
 	move.l (%sp)+, %a1
 	lea 12(%sp), %sp
 	| Call real function.
+#ifdef __mcoldfire__
+	move.l %d0,-(%sp)
+	rts
+#else
 	jmp (%d0)
+#endif
 
 	/*
 	    +24     return address
@@ -79,15 +89,29 @@ _dl_runtime_profile:
 	move.l %sp, %a2
 	move.l %sp, %a0
 	lea 28(%sp), %a1
+#ifdef __mcoldfire__
+	| Round framesize up to longword alignment
+	addq.l #3, %d1
+	and.l #-3, %d1
+	sub.l %d1, %a0
+	move.l %a0, %sp
+	tst.l %d1
+	beq 2f
+1:	move.l (%a0)+, (%a1)+
+	subq.l #4,%d1
+	bne 1b
+2:
+#else
 	| Round framesize up to even
 	addq.l #1, %d1
-	lsr #1, %d1
+	lsr.l #1, %d1
 	sub.l %d1, %a0
 	sub.l %d1, %a0
 	move.l %a0, %sp
 	jra 2f
 1:	move.w (%a1)+, (%a0)+
 2:	dbra %d1,1b
+#endif
 	/*
 	   %a2+24  return address
 	   %a2+20  PLT1
@@ -101,7 +125,14 @@ _dl_runtime_profile:
 
 	move.l 4(%a2), %a0
 	move.l 8(%a2), %a1
+#ifdef __mcoldfire__
+	pea 2f(%pc)
+	move.l %d0,-(%sp)
+	rts
+2:
+#else
 	jsr (%d0)
+#endif
 	move.l %a2, %sp
 	move.l (%sp)+, %a2
 	/*
@@ -112,18 +143,34 @@ _dl_runtime_profile:
 	    +4      %a1
 	   %sp      %a0
 	*/
+#ifdef __mcoldfire__
+	fmove.l %fp0, -(%sp)
+#else
 	fmove.x %fp0, -(%sp)
+#endif
+	move.l %a0, -(%sp)
 	move.l %d1, -(%sp)
 	move.l %d0, -(%sp)
 	pea (%sp)
-	pea 20(%sp)
+#ifdef __mcoldfire__
+	pea 24(%sp)
 	move.l 40(%sp), -(%sp)
 	move.l 40(%sp), -(%sp)
+#else
+	pea 28(%sp)
+	move.l 44(%sp), -(%sp)
+	move.l 44(%sp), -(%sp)
+#endif
 	jbsr _dl_call_pltexit
 	lea 16(%sp), %sp
 	move.l (%sp)+, %d0
 	move.l (%sp)+, %d1
+	move.l (%sp)+, %a0
+#ifdef __mcoldfire__
+	fmove.d (%sp)+, %fp0
+#else
 	fmove.x (%sp)+, %fp0
+#endif
 	lea 20(%sp), %sp
 	rts
 	.size _dl_runtime_profile, . - _dl_runtime_profile
--- sysdeps/m68k/fpu/fegetenv.c	2006-07-07 09:02:53.000000000 -0700
+++ sysdeps/m68k/fpu/fegetenv.c	2006-07-06 05:37:00.000000000 -0700
@@ -23,7 +23,13 @@
 int
 __fegetenv (fenv_t *envp)
 {
+#ifdef __mcoldfire__
+  __asm__ ("fmove%.l %/fpcr,%0" : "=dm" (envp->__control_register));
+  __asm__ ("fmove%.l %/fpsr,%0" : "=dm" (envp->__status_register));
+  __asm__ ("fmove%.l %/fpiar,%0" : "=dm" (envp->__instruction_address));
+#else
   __asm__ ("fmovem%.l %/fpcr/%/fpsr/%/fpiar,%0" : "=m" (*envp));
+#endif
 
   /* Success.  */
   return 0;
--- sysdeps/m68k/fpu/feholdexcpt.c	2006-07-07 09:02:53.000000000 -0700
+++ sysdeps/m68k/fpu/feholdexcpt.c	2006-07-13 09:49:58.000000000 -0700
@@ -26,7 +26,13 @@ feholdexcept (fenv_t *envp)
   fexcept_t fpcr, fpsr;
 
   /* Store the environment.  */
+#ifdef __mcoldfire__
+  __asm__ ("fmove%.l %/fpcr,%0" : "=dm" (envp->__control_register));
+  __asm__ ("fmove%.l %/fpsr,%0" : "=dm" (envp->__status_register));
+  __asm__ ("fmove%.l %/fpiar,%0" : "=dm" (envp->__instruction_address));
+#else
   __asm__ ("fmovem%.l %/fpcr/%/fpsr/%/fpiar,%0" : "=m" (*envp));
+#endif
 
   /* Now clear all exceptions.  */
   fpsr = envp->__status_register & ~FE_ALL_EXCEPT;
@@ -37,3 +43,4 @@ feholdexcept (fenv_t *envp)
 
   return 0;
 }
+libm_hidden_def (feholdexcept);
--- sysdeps/m68k/fpu/fesetenv.c	2006-07-07 09:02:53.000000000 -0700
+++ sysdeps/m68k/fpu/fesetenv.c	2006-07-06 05:37:00.000000000 -0700
@@ -29,7 +29,13 @@ __fesetenv (const fenv_t *envp)
      values which we do not want to come from the saved environment.
      Therefore, we get the current environment and replace the values
      we want to use from the environment specified by the parameter.  */
+#ifdef __mcoldfire__
+  __asm__ ("fmove%.l %/fpcr,%0" : "=dm" (temp.__control_register));
+  __asm__ ("fmove%.l %/fpsr,%0" : "=dm" (temp.__status_register));
+  __asm__ ("fmove%.l %/fpiar,%0" : "=dm" (temp.__instruction_address));
+#else
   __asm__ ("fmovem%.l %/fpcr/%/fpsr/%/fpiar,%0" : "=m" (*&temp));
+#endif
 
   temp.__status_register &= ~FE_ALL_EXCEPT;
   temp.__control_register &= ~((FE_ALL_EXCEPT << 6) | FE_UPWARD);
@@ -44,7 +50,16 @@ __fesetenv (const fenv_t *envp)
       temp.__status_register |= envp->__status_register & FE_ALL_EXCEPT;
     }
 
+#ifdef __mcoldfire__
+  __asm__ __volatile__ ("fmove%.l %0,%/fpiar"
+			:: "dm" (temp.__instruction_address));
+  __asm__ __volatile__ ("fmove%.l %0,%/fpcr"
+			:: "dm" (temp.__control_register));
+  __asm__ __volatile__ ("fmove%.l %0,%/fpsr"
+			:: "dm" (temp.__status_register));
+#else
   __asm__ __volatile__ ("fmovem%.l %0,%/fpcr/%/fpsr/%/fpiar" : : "m" (*&temp));
+#endif
 
   /* Success.  */
   return 0;
--- sysdeps/m68k/fpu/fesetround.c	2001-07-05 21:55:55.000000000 -0700
+++ sysdeps/m68k/fpu/fesetround.c	2006-07-13 09:48:29.000000000 -0700
@@ -36,3 +36,4 @@ fesetround (int round)
 
   return 0;
 }
+libm_hidden_def (fesetround);
--- sysdeps/m68k/fpu_control.h	2006-07-07 09:02:53.000000000 -0700
+++ sysdeps/m68k/fpu_control.h	2006-07-06 05:37:00.000000000 -0700
@@ -30,9 +30,9 @@
  * 12     -> enable trap for OVFL exception
  * 11     -> enable trap for UNFL exception
  * 10     -> enable trap for DZ exception
- *  9     -> enable trap for INEX2 exception
- *  8     -> enable trap for INEX1 exception
- *  7-6   -> Precision Control
+ *  9     -> enable trap for INEX2 exception (INEX on Coldfire)
+ *  8     -> enable trap for INEX1 exception (IDE on Coldfire)
+ *  7-6   -> Precision Control (only bit 6 is used on Coldfire)
  *  5-4   -> Rounding Control
  *  3-0   -> zero (read as 0, write as 0)
  *
@@ -65,8 +65,12 @@
 #define _FPU_MASK_INEX2 0x0100
 
 /* precision control */
+#ifdef __mcoldfire__
+#define _FPU_DOUBLE   0x00
+#else
 #define _FPU_EXTENDED 0x00   /* RECOMMENDED */
 #define _FPU_DOUBLE   0x80
+#endif
 #define _FPU_SINGLE   0x40     /* DO NOT USE */
 
 /* rounding control */
@@ -75,7 +79,11 @@
 #define _FPU_RC_DOWN    0x20
 #define _FPU_RC_UP      0x30
 
+#ifdef __mcoldfire__
+#define _FPU_RESERVED 0xFFFF800F
+#else
 #define _FPU_RESERVED 0xFFFF000F  /* Reserved bits in fpucr */
+#endif
 
 
 /* Now two recommended fpucr */
--- sysdeps/m68k/Implies	2006-07-07 09:02:53.000000000 -0700
+++ sysdeps/m68k/Implies	2006-07-06 05:37:00.000000000 -0700
@@ -1,5 +1,4 @@
 wordsize-32
 # 68k uses IEEE 754 floating point.
-ieee754/ldbl-96
 ieee754/dbl-64
 ieee754/flt-32
--- sysdeps/m68k/m680x0/Implies	1969-12-31 16:00:00.000000000 -0800
+++ sysdeps/m68k/m680x0/Implies	2006-07-06 05:37:00.000000000 -0700
@@ -0,0 +1 @@
+ieee754/ldbl-96
--- sysdeps/m68k/ldsodefs.h	1969-12-31 16:00:00.000000000 -0800
+++ sysdeps/m68k/ldsodefs.h	2006-08-11 01:53:37.000000000 -0700
@@ -0,0 +1,43 @@
+/* Run-time dynamic linker data structures for loaded ELF shared objects.
+   Copyright (C) 2006 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
+
+#ifndef __LDSODEFS_H
+
+#include <elf.h>
+
+struct La_m68k_regs;
+struct La_m68k_retval;
+
+#define ARCH_PLTENTER_MEMBERS						\
+    Elf32_Addr (*m68k_gnu_pltenter) (Elf32_Sym *, unsigned int,		\
+				     uintptr_t *, uintptr_t *,		\
+				     const struct La_m68k_regs *,	\
+				     unsigned int *, const char *name,  \
+				     long int *framesizep);
+
+#define ARCH_PLTEXIT_MEMBERS						\
+    unsigned int (*m68k_gnu_pltexit) (Elf32_Sym *, unsigned int,	\
+				      uintptr_t *, uintptr_t *,		\
+				      const struct La_m68k_regs *,	\
+				      struct La_m68k_retval *,		\
+				      const char *);
+
+#include_next <ldsodefs.h>
+
+#endif
--- sysdeps/m68k/__longjmp.c	2006-07-07 09:02:53.000000000 -0700
+++ sysdeps/m68k/__longjmp.c	2006-07-06 05:37:00.000000000 -0700
@@ -31,6 +31,9 @@ __longjmp (__jmp_buf env, int val)
   /* Restore the floating-point registers.  */
   asm volatile("fmovem%.x %0, %/fp0-%/fp7" :
 	       /* No outputs.  */ : "g" (env[0].__fpregs[0]));
+#elif defined (__mcffpu__)
+  asm volatile("fmovem %0, %/fp0-%/fp7" :
+	       /* No outputs.  */ : "m" (env[0].__fpregs[0]));
 #endif
 
   /* Put VAL in D0.  */
--- sysdeps/m68k/Makefile	2006-07-07 09:02:53.000000000 -0700
+++ sysdeps/m68k/Makefile	2006-07-06 05:37:00.000000000 -0700
@@ -30,9 +30,6 @@ pic-ccflag = -fpic
 # Make sure setjmp.c is compiled with a frame pointer
 CFLAGS-setjmp.c := -fno-omit-frame-pointer
 
-# The 68k `long double' is a distinct type we support.
-long-double-fcts = yes
-
 ifeq ($(subdir),elf)
 CFLAGS-rtld.c += -Wno-uninitialized -Wno-unused
 endif
--- sysdeps/m68k/m680x0/Makefile	1969-12-31 16:00:00.000000000 -0800
+++ sysdeps/m68k/m680x0/Makefile	2006-07-06 05:37:00.000000000 -0700
@@ -0,0 +1,2 @@
+# The 68k `long double' is a distinct type we support.
+long-double-fcts = yes
--- sysdeps/m68k/memchr.S	2006-07-07 09:02:53.000000000 -0700
+++ sysdeps/m68k/memchr.S	2006-07-06 05:37:00.000000000 -0700
@@ -26,7 +26,13 @@
 	TEXT
 ENTRY(__memchr)
 	/* Save the callee-saved registers we use.  */
+#ifdef __mcoldfire__
+	movel	R(d2),MEM_PREDEC(sp)
+	movel	R(d3),MEM_PREDEC(sp)
+	movel	R(d4),MEM_PREDEC(sp)
+#else
 	moveml	R(d2)-R(d4),MEM_PREDEC(sp)
+#endif
 
 	/* Get string pointer, character and length.  */
 	movel	MEM_DISP(sp,16),R(a0)
@@ -34,9 +40,15 @@ ENTRY(__memchr)
 	movel	MEM_DISP(sp,24),R(d4)
 
 	/* Check if at least four bytes left to search.  */
+#ifdef __mcoldfire__
+	subql	#4,R(d4)
+	bcs	L(L6)
+	addql	#4,R(d4)
+#else
 	moveql	#4,R(d1)
 	cmpl	R(d1),R(d4)
 	bcs	L(L6)
+#endif
 
 	/* Distribute the character to all bytes of a longword.  */
 	movel	R(d0),R(d1)
@@ -49,7 +61,11 @@ ENTRY(__memchr)
 	/* First search for the character one byte at a time until the
 	   pointer is aligned to a longword boundary.  */
 	movel	R(a0),R(d1)
+#ifdef __mcoldfire__
+	andl	#3,R(d1)
+#else
 	andw	#3,R(d1)
+#endif
 	beq	L(L1)
 	cmpb	MEM(a0),R(d0)
 	beq	L(L9)
@@ -57,8 +73,11 @@ ENTRY(__memchr)
 	subql	#1,R(d4)
 	beq	L(L7)
 
-	movel	R(a0),R(d1)
-	andw	#3,R(d1)
+#ifdef __mcoldfire__
+	subql	#3,R(d1)
+#else
+	subqw	#3,R(d1)
+#endif
 	beq	L(L1)
 	cmpb	MEM(a0),R(d0)
 	beq	L(L9)
@@ -66,8 +85,11 @@ ENTRY(__memchr)
 	subql	#1,R(d4)
 	beq	L(L7)
 
-	movel	R(a0),R(d1)
-	andw	#3,R(d1)
+#ifdef __mcoldfire__
+	addql	#1,R(d1)
+#else
+	addqw	#1,R(d1)
+#endif
 	beq	L(L1)
 	cmpb	MEM(a0),R(d0)
 	beq	L(L9)
@@ -177,19 +199,31 @@ L(L2:)
 
 L(L6:)
 	/* Search one byte at a time in the remaining less than 4 bytes.  */
+#ifdef __mcoldfire__
+	addql	#4,R(d4)
+#else
 	andw	#3,R(d4)
+#endif
 	beq	L(L7)
 	cmpb	MEM(a0),R(d0)
 	beq	L(L9)
 	addql	#1,R(a0)
 
+#ifdef __mcoldfire__
+	subql	#1,R(d4)
+#else
 	subqw	#1,R(d4)
+#endif
 	beq	L(L7)
 	cmpb	MEM(a0),R(d0)
 	beq	L(L9)
 	addql	#1,R(a0)
 
+#ifdef __mcoldfire__
+	subql	#1,R(d4)
+#else
 	subqw	#1,R(d4)
+#endif
 	beq	L(L7)
 	cmpb	MEM(a0),R(d0)
 	beq	L(L9)
@@ -198,7 +232,13 @@ L(L7:)
 	/* Return NULL.  */
 	clrl	R(d0)
 	movel	R(d0),R(a0)
+#ifdef __mcoldfire__
+	movel	MEM_POSTINC(sp),R(d4)
+	movel	MEM_POSTINC(sp),R(d3)
+	movel	MEM_POSTINC(sp),R(d2)
+#else
 	moveml	MEM_POSTINC(sp),R(d2)-R(d4)
+#endif
 	rts
 
 L(L8:)
@@ -221,7 +261,13 @@ L(L8:)
 	/* Otherwise the fourth byte must equal C.  */
 L(L9:)
 	movel	R(a0),R(d0)
+#ifdef __mcoldfire__
+	movel	MEM_POSTINC(sp),R(d4)
+	movel	MEM_POSTINC(sp),R(d3)
+	movel	MEM_POSTINC(sp),R(d2)
+#else
 	moveml	MEM_POSTINC(sp),R(d2)-R(d4)
+#endif
 	rts
 END(__memchr)
 
--- sysdeps/m68k/preconfigure	2006-07-07 09:02:53.000000000 -0700
+++ sysdeps/m68k/preconfigure	2006-08-10 10:47:20.000000000 -0700
@@ -1,6 +1,17 @@
 # This fragment canonicalizes the machine names for m68k variants.
 
 case "$machine" in
-m680?0)		base_machine=m68k machine=m68k/$machine ;;
-m68k)		base_machine=m68k machine=m68k/m68020 ;;
+m680?0)		base_machine=m68k machine=m68k/m680x0/$machine ;;
+m68k)		variant=`(echo "#ifdef __mcoldfire__"
+			  echo "coldfire"
+			  echo "#else"
+			  echo "m680x0/m68020"
+			  echo "#endif") |
+			 $CC $CFLAGS $CPPFLAGS -E - |
+			 grep '^[a-z]'`
+		if test -z "$variant"; then
+		  echo >&2 "Cannot determine m68k processor variant"
+		  exit 1
+		fi
+		base_machine=m68k machine=m68k/$variant ;;
 esac
--- sysdeps/m68k/rawmemchr.S	2006-07-07 09:02:53.000000000 -0700
+++ sysdeps/m68k/rawmemchr.S	2006-07-06 05:37:00.000000000 -0700
@@ -43,21 +43,31 @@ ENTRY(__rawmemchr)
 	/* First search for the character one byte at a time until the
 	   pointer is aligned to a longword boundary.  */
 	movel	R(a0),R(d1)
+#ifdef __mcoldfire__
+	andl	#3,R(d1)
+#else
 	andw	#3,R(d1)
+#endif
 	beq	L(L1)
 	cmpb	MEM(a0),R(d0)
 	beq	L(L9)
 	addql	#1,R(a0)
 
-	movel	R(a0),R(d1)
-	andw	#3,R(d1)
+#ifdef __mcoldfire__
+	subql	#3,R(d1)
+#else
+	subqw	#3,R(d1)
+#endif
 	beq	L(L1)
 	cmpb	MEM(a0),R(d0)
 	beq	L(L9)
 	addql	#1,R(a0)
 
-	movel	R(a0),R(d1)
-	andw	#3,R(d1)
+#ifdef __mcoldfire__
+	addql	#1,R(d1)
+#else
+	addqw	#1,R(d1)
+#endif
 	beq	L(L1)
 	cmpb	MEM(a0),R(d0)
 	beq	L(L9)
--- sysdeps/m68k/setjmp.c	2006-07-07 09:02:53.000000000 -0700
+++ sysdeps/m68k/setjmp.c	2006-08-14 07:43:13.000000000 -0700
@@ -53,11 +53,14 @@ __sigsetjmp (jmp_buf env, int savemask)
   /* Save floating-point (68881) registers FP0 through FP7.  */
   asm volatile ("fmovem%.x %/fp0-%/fp7, %0"
 		: : "m" (env[0].__jmpbuf[0].__fpregs[0]));
+#elif defined (__mcffpu__)
+  asm volatile ("fmovem %/fp0-%/fp7, %0"
+		: : "m" (env[0].__jmpbuf[0].__fpregs[0]));
 #endif
 
   /* Save the signal mask if requested.  */
   return __sigjmp_save (env, savemask);
 }
 #if !defined BSD_SETJMP && !defined BSD__SETJMP
-hidden_def (__sigsetjmp)
+libc_hidden_def (__sigsetjmp)
 #endif
--- sysdeps/m68k/strchrnul.S	2006-07-07 09:02:53.000000000 -0700
+++ sysdeps/m68k/strchrnul.S	2006-07-06 05:37:00.000000000 -0700
@@ -44,32 +44,42 @@ ENTRY(__strchrnul)
 	/* First search for the character one byte at a time until the
 	   pointer is aligned to a longword boundary.  */
 	movel	R(a0),R(d1)
+#ifdef __mcoldfire__
+	andl	#3,R(d1)
+#else
 	andw	#3,R(d1)
+#endif
 	beq	L(L1)
-	moveb	MEM(a0),R(d1)
-	cmpb	R(d0),R(d1)
+	moveb	MEM(a0),R(d2)
+	cmpb	R(d0),R(d2)
 	beq	L(L9)
-	tstb	R(d1)
+	tstb	R(d2)
 	beq	L(L9)
 	addql	#1,R(a0)
 
-	movel	R(a0),R(d1)
-	andw	#3,R(d1)
+#ifdef __mcoldfire__
+	subql	#3,R(d1)
+#else
+	subqw	#3,R(d1)
+#endif
 	beq	L(L1)
-	moveb	MEM(a0),R(d1)
-	cmpb	R(d0),R(d1)
+	moveb	MEM(a0),R(d2)
+	cmpb	R(d0),R(d2)
 	beq	L(L9)
-	tstb	R(d1)
+	tstb	R(d2)
 	beq	L(L9)
 	addql	#1,R(a0)
 
-	movel	R(a0),R(d1)
-	andw	#3,R(d1)
+#ifdef __mcoldfire__
+	addql	#1,R(d1)
+#else
+	addqw	#1,R(d1)
+#endif
 	beq	L(L1)
-	moveb	MEM(a0),R(d1)
-	cmpb	R(d0),R(d1)
+	moveb	MEM(a0),R(d2)
+	cmpb	R(d0),R(d2)
 	beq	L(L9)
-	tstb	R(d1)
+	tstb	R(d2)
 	beq	L(L9)
 	addql	#1,R(a0)
 
--- sysdeps/m68k/strchr.S	2006-07-07 09:02:53.000000000 -0700
+++ sysdeps/m68k/strchr.S	2006-07-06 05:37:00.000000000 -0700
@@ -43,32 +43,42 @@ ENTRY(strchr)
 	/* First search for the character one byte at a time until the
 	   pointer is aligned to a longword boundary.  */
 	movel	R(a0),R(d1)
+#ifdef __mcoldfire__
+	andl	#3,R(d1)
+#else
 	andw	#3,R(d1)
+#endif
 	beq	L(L1)
-	moveb	MEM(a0),R(d1)
-	cmpb	R(d0),R(d1)
+	moveb	MEM(a0),R(d2)
+	cmpb	R(d0),R(d2)
 	beq	L(L9)
-	tstb	R(d1)
+	tstb	R(d2)
 	beq	L(L3)
 	addql	#1,R(a0)
 
-	movel	R(a0),R(d1)
-	andw	#3,R(d1)
+#ifdef __mcoldfire__
+	subql	#3,R(d1)
+#else
+	subqw	#3,R(d1)
+#endif
 	beq	L(L1)
-	moveb	MEM(a0),R(d1)
-	cmpb	R(d0),R(d1)
+	moveb	MEM(a0),R(d2)
+	cmpb	R(d0),R(d2)
 	beq	L(L9)
-	tstb	R(d1)
+	tstb	R(d2)
 	beq	L(L3)
 	addql	#1,R(a0)
 
-	movel	R(a0),R(d1)
-	andw	#3,R(d1)
+#ifdef __mcoldfire__
+	addql	#1,R(d1)
+#else
+	addqw	#1,R(d1)
+#endif
 	beq	L(L1)
-	moveb	MEM(a0),R(d1)
-	cmpb	R(d0),R(d1)
+	moveb	MEM(a0),R(d2)
+	cmpb	R(d0),R(d2)
 	beq	L(L9)
-	tstb	R(d1)
+	tstb	R(d2)
 	beq	L(L3)
 	addql	#1,R(a0)
 
--- sysdeps/m68k/sysdep.h	2006-07-07 09:02:53.000000000 -0700
+++ sysdeps/m68k/sysdep.h	2006-08-15 08:19:55.000000000 -0700
@@ -97,4 +97,26 @@
 #  define JUMPTARGET(name)	name
 # endif
 
+/* Perform operation OP with PC-relative SRC as the first operand and
+   DST as the second.  TMP is available as a temporary if needed.  */
+#ifdef __mcoldfire__
+#define PCREL_OP(OP, SRC, DST, TMP) \
+  move.l &SRC - ., TMP; OP (-8, %pc, TMP), DST
+#else
+#define PCREL_OP(OP, SRC, DST, TMP) \
+  OP SRC(%pc), DST
+#endif
+
+#else
+
+/* As above, but PC is the spelling of the PC register.  We need this
+   so that the macro can be used in both normal and extended asms.  */
+#ifdef __mcoldfire__
+#define PCREL_OP(OP, SRC, DST, TMP, PC) \
+  "move.l #" SRC " - ., " TMP "\n\t" OP " (-8, " PC ", " TMP "), " DST
+#else
+#define PCREL_OP(OP, SRC, DST, TMP, PC) \
+  OP " " SRC "(" PC "), " DST
+#endif
+
 #endif	/* __ASSEMBLER__ */
--- sysdeps/m68k/tst-audit.h	1969-12-31 16:00:00.000000000 -0800
+++ sysdeps/m68k/tst-audit.h	2006-08-10 10:53:06.000000000 -0700
@@ -0,0 +1,25 @@
+/* Definitions for testing PLT entry/exit auditing.  m68k version.
+   Copyright (C) 2006 Free Software Foundation, Inc.
+
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
+
+#define pltenter la_m68k_gnu_pltenter
+#define pltexit la_m68k_gnu_pltexit
+#define La_regs La_m68k_regs
+#define La_retval La_m68k_retval
+#define int_retval lrv_d0
--- sysdeps/m68k/wcpcpy.c	1969-12-31 16:00:00.000000000 -0800
+++ sysdeps/m68k/wcpcpy.c	2006-08-10 10:54:26.000000000 -0700
@@ -0,0 +1,37 @@
+/* Copyright (C) 1996, 1997, 2006 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1996.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
+
+/* The generic version of this file assumes that __alignof__(wchar_t) ==
+   sizeof (wchar_t).  We therefore use this port-specific implementation
+   instead.  */
+#include <wchar.h>
+
+/* Copy SRC to DEST, returning the address of the terminating L'\0' in
+   DEST.  */
+wchar_t *
+__wcpcpy (wchar_t *dest, const wchar_t *src)
+{
+  do
+    ;
+  while ((*dest++ = *src++));
+
+  return dest - 1;
+}
+
+weak_alias (__wcpcpy, wcpcpy)
--- sysdeps/m68k/wcpcpy_chk.c	1969-12-31 16:00:00.000000000 -0800
+++ sysdeps/m68k/wcpcpy_chk.c	2006-08-10 10:54:58.000000000 -0700
@@ -0,0 +1,36 @@
+/* Copyright (C) 1996, 1997, 2005, 2006 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1996.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
+
+/* The generic version of this file assumes that __alignof__(wchar_t) ==
+   sizeof (wchar_t).  We therefore use this port-specific implementation
+   instead.  */
+#include <wchar.h>
+
+/* Copy SRC to DEST, returning the address of the terminating L'\0' in
+   DEST.  Check for overflows.  */
+wchar_t *
+__wcpcpy_chk (wchar_t *dest, const wchar_t *src, size_t destlen)
+{
+  do
+    if (destlen-- == 0)
+      __chk_fail ();
+  while ((*dest++ = *src++));
+
+  return dest - 1;
+}
--- sysdeps/unix/sysv/linux/m68k/configure.in	1969-12-31 16:00:00.000000000 -0800
+++ sysdeps/unix/sysv/linux/m68k/configure.in	2006-07-07 04:23:10.000000000 -0700
@@ -0,0 +1,7 @@
+sinclude(./aclocal.m4)dnl Autoconf lossage
+GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory.
+case $machine in
+m68k/coldfire)
+  arch_minimum_kernel=2.6.10
+  ;;
+esac
--- sysdeps/unix/sysv/linux/m68k/configure	1969-12-31 16:00:00.000000000 -0800
+++ sysdeps/unix/sysv/linux/m68k/configure	2006-07-07 04:34:32.000000000 -0700
@@ -0,0 +1,6 @@
+# This file is generated from configure.in by Autoconf.  DO NOT EDIT!
+ case $machine in
+m68k/coldfire)
+  arch_minimum_kernel=2.6.10
+  ;;
+esac
--- sysdeps/unix/sysv/linux/m68k/clone.S	2006-07-07 09:02:53.000000000 -0700
+++ sysdeps/unix/sysv/linux/m68k/clone.S	2006-07-06 05:37:00.000000000 -0700
@@ -42,11 +42,21 @@ ENTRY (__clone)
 	movel	16(%sp), -(%a1)
 
 	/* Do the system call */
-	exg	%d2, %a1		/* save %d2 and get stack pointer */
 	movel	12(%sp), %d1		/* get flags */
+#ifdef __mcoldfire__
+	movel	%d2, -(%a1)
+	movel	%d2, -(%sp)
+	movel	%a1, %d2
+#else
+	exg	%d2, %a1		/* save %d2 and get stack pointer */
+#endif
 	movel	#SYS_ify (clone), %d0
 	trap	#0
+#ifdef __mcoldfire__
+	movel	(%sp)+, %d2
+#else
 	exg	%d2, %a1		/* restore %d2 */
+#endif
 
 	tstl	%d0
 	jmi	SYSCALL_ERROR_LABEL
--- sysdeps/unix/sysv/linux/m68k/register-dump.h	2006-07-07 09:02:53.000000000 -0700
+++ sysdeps/unix/sysv/linux/m68k/register-dump.h	2006-07-06 05:50:04.000000000 -0700
@@ -40,6 +40,7 @@
 
 */
 
+#ifndef __mcoldfire__
 /* Linux saves only the call-clobbered registers in the sigcontext.  We
    need to use a trampoline that saves the rest so that the C code can
    access them.  We use the sc_fpstate field, since the handler is not
@@ -65,6 +66,7 @@ catch_segfault:\n\
 }
 #define catch_segfault(a,b) \
   __attribute_used__ real_catch_segfault(a,b)
+#endif
 
 static void
 hexvalue (unsigned long int value, char *buf, size_t len)
@@ -81,6 +83,8 @@ register_dump (int fd, struct sigcontext
   char fpregs[11][24];
   struct iovec iov[63], *next_iov = iov;
   unsigned long *p = (unsigned long *) ctx->sc_fpstate + 1;
+  unsigned long *pfp = (unsigned long *) ctx->sc_fpregs;
+  int i, j, fpreg_size;
 
 #define ADD_STRING(str) \
   next_iov->iov_base = (char *) (str); \
@@ -91,51 +95,59 @@ register_dump (int fd, struct sigcontext
   next_iov->iov_len = (len); \
   ++next_iov
 
+#ifdef __mcoldfire__
+  fpreg_size = 16;
+#else
+  fpreg_size = 24;
+#endif
+
   /* Generate strings of register contents.  */
   hexvalue (ctx->sc_d0, regs[0], 8);
   hexvalue (ctx->sc_d1, regs[1], 8);
+#ifdef __mcoldfire__
+  hexvalue (ctx->sc_d2, regs[2], 8);
+  hexvalue (ctx->sc_d3, regs[3], 8);
+  hexvalue (ctx->sc_d4, regs[4], 8);
+  hexvalue (ctx->sc_d5, regs[5], 8);
+  hexvalue (ctx->sc_d6, regs[6], 8);
+  hexvalue (ctx->sc_d7, regs[7], 8);
+#else
   hexvalue (*p++, regs[2], 8);
   hexvalue (*p++, regs[3], 8);
   hexvalue (*p++, regs[4], 8);
   hexvalue (*p++, regs[5], 8);
   hexvalue (*p++, regs[6], 8);
   hexvalue (*p++, regs[7], 8);
+#endif
   hexvalue (ctx->sc_a0, regs[8], 8);
   hexvalue (ctx->sc_a1, regs[9], 8);
+#ifdef __mcoldfire__
+  hexvalue (ctx->sc_a2, regs[10], 8);
+  hexvalue (ctx->sc_a3, regs[11], 8);
+  hexvalue (ctx->sc_a4, regs[12], 8);
+  hexvalue (ctx->sc_a5, regs[13], 8);
+  hexvalue (ctx->sc_a6, regs[14], 8);
+#else
   hexvalue (*p++, regs[10], 8);
   hexvalue (*p++, regs[11], 8);
   hexvalue (*p++, regs[12], 8);
   hexvalue (*p++, regs[13], 8);
   hexvalue (*p++, regs[14], 8);
+#endif
   hexvalue (ctx->sc_usp, regs[15], 8);
   hexvalue (ctx->sc_pc, regs[16], 8);
   hexvalue (ctx->sc_sr, regs[17], 4);
   hexvalue (ctx->sc_mask, regs[18], 8);
   hexvalue (ctx->sc_formatvec & 0xfff, regs[19], 4);
-  hexvalue (ctx->sc_fpregs[0], fpregs[0], 8);
-  hexvalue (ctx->sc_fpregs[1], fpregs[0] + 8, 8);
-  hexvalue (ctx->sc_fpregs[2], fpregs[0] + 16, 8);
-  hexvalue (ctx->sc_fpregs[3], fpregs[1], 8);
-  hexvalue (ctx->sc_fpregs[4], fpregs[1] + 8, 8);
-  hexvalue (ctx->sc_fpregs[5], fpregs[1] + 16, 8);
-  hexvalue (*p++, fpregs[2], 8);
-  hexvalue (*p++, fpregs[2] + 8, 8);
-  hexvalue (*p++, fpregs[2] + 16, 8);
-  hexvalue (*p++, fpregs[3], 8);
-  hexvalue (*p++, fpregs[3] + 8, 8);
-  hexvalue (*p++, fpregs[3] + 16, 8);
-  hexvalue (*p++, fpregs[4], 8);
-  hexvalue (*p++, fpregs[4] + 8, 8);
-  hexvalue (*p++, fpregs[4] + 16, 8);
-  hexvalue (*p++, fpregs[5], 8);
-  hexvalue (*p++, fpregs[5] + 8, 8);
-  hexvalue (*p++, fpregs[5] + 16, 8);
-  hexvalue (*p++, fpregs[6], 8);
-  hexvalue (*p++, fpregs[6] + 8, 8);
-  hexvalue (*p++, fpregs[6] + 16, 8);
-  hexvalue (*p++, fpregs[7], 8);
-  hexvalue (*p++, fpregs[7] + 8, 8);
-  hexvalue (*p++, fpregs[7] + 16, 8);
+  for (i = 0; i < 2; i++)
+    for (j = 0; j < fpreg_size; j += 8)
+      hexvalue (*pfp++, fpregs[i] + j, 8);
+#ifdef __mcoldfire__
+  p = pfp;
+#endif
+  for (i = 2; i < 8; i++)
+    for (j = 0; j < fpreg_size; j += 8)
+      hexvalue (*p++, fpregs[i] + j, 8);
   hexvalue (ctx->sc_fpcntl[0], fpregs[8], 8);
   hexvalue (ctx->sc_fpcntl[1], fpregs[9], 8);
   hexvalue (ctx->sc_fpcntl[2], fpregs[10], 8);
@@ -184,21 +196,21 @@ register_dump (int fd, struct sigcontext
   ADD_MEM (regs[19], 4);
 
   ADD_STRING ("\n\n  FP0: ");
-  ADD_MEM (fpregs[0], 24);
+  ADD_MEM (fpregs[0], fpreg_size);
   ADD_STRING ("  FP1: ");
-  ADD_MEM (fpregs[1], 24);
+  ADD_MEM (fpregs[1], fpreg_size);
   ADD_STRING ("\n  FP2: ");
-  ADD_MEM (fpregs[2], 24);
+  ADD_MEM (fpregs[2], fpreg_size);
   ADD_STRING ("  FP3: ");
-  ADD_MEM (fpregs[3], 24);
+  ADD_MEM (fpregs[3], fpreg_size);
   ADD_STRING ("\n  FP4: ");
-  ADD_MEM (fpregs[4], 24);
+  ADD_MEM (fpregs[4], fpreg_size);
   ADD_STRING ("  FP5: ");
-  ADD_MEM (fpregs[5], 24);
+  ADD_MEM (fpregs[5], fpreg_size);
   ADD_STRING ("\n  FP6: ");
-  ADD_MEM (fpregs[6], 24);
+  ADD_MEM (fpregs[6], fpreg_size);
   ADD_STRING ("  FP7: ");
-  ADD_MEM (fpregs[7], 24);
+  ADD_MEM (fpregs[7], fpreg_size);
   ADD_STRING ("\n  FPCR: ");
   ADD_MEM (fpregs[8], 8);
   ADD_STRING ("  FPSR: ");
--- sysdeps/unix/sysv/linux/m68k/socket.S	2006-07-07 09:02:53.000000000 -0700
+++ sysdeps/unix/sysv/linux/m68k/socket.S	2006-08-10 00:54:26.000000000 -0700
@@ -42,7 +42,7 @@
 .globl __socket
 ENTRY (__socket)
 #if defined NEED_CANCELLATION && defined CENABLE
-	SINGLE_THREAD_P
+	SINGLE_THREAD_P (%a0)
 	jne 1f
 #endif
 
--- sysdeps/unix/sysv/linux/m68k/sys/reg.h	2006-07-07 09:02:53.000000000 -0700
+++ sysdeps/unix/sysv/linux/m68k/sys/reg.h	2006-07-07 08:42:44.000000000 -0700
@@ -62,22 +62,35 @@ enum
 #define PT_SR PT_SR
   PT_PC = 18,
 #define PT_PC PT_PC
+
+#ifdef __mcoldfire__
+  PT_FP0 = 21,
+  PT_FP1 = 23,
+  PT_FP2 = 25,
+  PT_FP3 = 27,
+  PT_FP4 = 29,
+  PT_FP5 = 31,
+  PT_FP6 = 33,
+  PT_FP7 = 35,
+#else
   PT_FP0 = 21,
-#define PT_FP0 PT_FP0
   PT_FP1 = 24,
-#define PT_FP1 PT_FP1
   PT_FP2 = 27,
-#define PT_FP2 PT_FP2
   PT_FP3 = 30,
-#define PT_FP3 PT_FP3
   PT_FP4 = 33,
-#define PT_FP4 PT_FP4
   PT_FP5 = 36,
-#define PT_FP5 PT_FP5
   PT_FP6 = 39,
-#define PT_FP6 PT_FP6
   PT_FP7 = 42,
+#endif
+#define PT_FP0 PT_FP0
+#define PT_FP1 PT_FP1
+#define PT_FP2 PT_FP2
+#define PT_FP3 PT_FP3
+#define PT_FP4 PT_FP4
+#define PT_FP5 PT_FP5
+#define PT_FP6 PT_FP6
 #define PT_FP7 PT_FP7
+
   PT_FPCR = 45,
 #define PT_FPCR PT_FPCR
   PT_FPSR = 46,
--- sysdeps/unix/sysv/linux/m68k/sys/ucontext.h	2006-07-07 09:02:53.000000000 -0700
+++ sysdeps/unix/sysv/linux/m68k/sys/ucontext.h	2006-07-06 05:50:04.000000000 -0700
@@ -79,10 +79,14 @@ enum
 /* Structure to describe FPU registers.  */
 typedef struct fpregset
 {
-  int f_fpregs[8][3];
   int f_pcr;
   int f_psr;
   int f_fpiaddr;
+#ifdef __mcoldfire__
+  int f_fpregs[8][2];
+#else
+  int f_fpregs[8][3];
+#endif
 } fpregset_t;
 
 /* Context to describe whole processor state.  */
@@ -98,12 +102,12 @@ typedef struct
 /* Userlevel context.  */
 typedef struct ucontext
 {
-  unsigned long int uc_flags;
+  unsigned long uc_flags;
   struct ucontext *uc_link;
-  __sigset_t uc_sigmask;
   stack_t uc_stack;
   mcontext_t uc_mcontext;
-  long int uc_filler[174];
+  unsigned long uc_filler[80];
+  __sigset_t uc_sigmask;
 } ucontext_t;
 
 #endif /* sys/ucontext.h */
--- sysdeps/unix/sysv/linux/m68k/sysdep.h	2006-07-07 09:02:53.000000000 -0700
+++ sysdeps/unix/sysv/linux/m68k/sysdep.h	2006-07-06 05:37:00.000000000 -0700
@@ -18,6 +18,9 @@
    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
    02111-1307 USA.  */
 
+#ifndef _LINUX_M68K_SYSDEP_H
+#define _LINUX_M68K_SYSDEP_H 1
+
 #include <sysdeps/unix/sysdep.h>
 #include <sysdeps/m68k/sysdep.h>
 
@@ -98,7 +101,7 @@
 # if RTLD_PRIVATE_ERRNO
 #  define SYSCALL_ERROR_HANDLER						      \
 SYSCALL_ERROR_LABEL:							      \
-    lea (rtld_errno, %pc), %a0;					      	      \
+    PCREL_OP (lea, rtld_errno, %a0, %a0);				      \
     neg.l %d0;								      \
     move.l %d0, (%a0);							      \
     move.l &-1, %d0;							      \
@@ -293,3 +296,4 @@ SYSCALL_ERROR_LABEL:							      \
 #define ASM_ARGS_6	ASM_ARGS_5, "a" (_a0)
 
 #endif /* not __ASSEMBLER__ */
+#endif
--- sysdeps/unix/sysv/linux/m68k/syscalls.list	2006-07-07 09:02:53.000000000 -0700
+++ sysdeps/unix/sysv/linux/m68k/syscalls.list	2006-07-06 05:37:00.000000000 -0700
@@ -1,5 +1,3 @@
 # File name	Caller	Syscall name	Args	Strong name	Weak names
 
 cacheflush	EXTRA	cacheflush	i:iiii	__cacheflush	cacheflush
-oldgetrlimit	EXTRA	getrlimit	i:ip	__old_getrlimit	getrlimit@GLIBC_2.0
-oldsetrlimit	EXTRA	setrlimit	i:ip	__old_setrlimit	setrlimit@GLIBC_2.0
--- sysdeps/unix/sysv/linux/m68k/m680x0/syscalls.list	1969-12-31 16:00:00.000000000 -0800
+++ sysdeps/unix/sysv/linux/m68k/m680x0/syscalls.list	2006-07-06 05:37:00.000000000 -0700
@@ -0,0 +1,4 @@
+# File name	Caller	Syscall name	Args	Strong name	Weak names
+
+oldgetrlimit	EXTRA	getrlimit	i:ip	__old_getrlimit	getrlimit@GLIBC_2.0
+oldsetrlimit	EXTRA	setrlimit	i:ip	__old_setrlimit	setrlimit@GLIBC_2.0
--- sysdeps/unix/sysv/linux/m68k/bits/sigcontext.h	1969-12-31 16:00:00.000000000 -0800
+++ sysdeps/unix/sysv/linux/m68k/bits/sigcontext.h	2006-08-15 05:26:03.000000000 -0700
@@ -0,0 +1,62 @@
+/* Copyright (C) 2006 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
+
+#if !defined _SIGNAL_H && !defined _SYS_UCONTEXT_H
+# error "Never use <bits/sigcontext.h> directly; include <signal.h> instead."
+#endif
+
+#ifndef _BITS_SIGCONTEXT_H
+#define _BITS_SIGCONTEXT_H 1
+
+struct sigcontext {
+  unsigned long sc_mask;
+  unsigned long sc_usp;
+  unsigned long sc_d0;
+  unsigned long sc_d1;
+#ifdef __mcoldfire__
+  unsigned long sc_d2;
+  unsigned long sc_d3;
+  unsigned long sc_d4;
+  unsigned long sc_d5;
+  unsigned long sc_d6;
+  unsigned long sc_d7;
+#endif
+  unsigned long sc_a0;
+  unsigned long sc_a1;
+#ifdef __mcoldfire__
+  unsigned long sc_a2;
+  unsigned long sc_a3;
+  unsigned long sc_a4;
+  unsigned long sc_a5;
+  unsigned long sc_a6;
+#endif
+  unsigned short sc_sr;
+  unsigned long sc_pc;
+  unsigned short sc_formatvec;
+#ifdef __mcoldfire__
+  unsigned long sc_fpregs[8][2];
+  unsigned long sc_fpcntl[3];
+  unsigned char sc_fpstate[16];
+#else
+  unsigned long sc_fpregs[2*3];
+  unsigned long sc_fpcntl[3];
+  unsigned char sc_fpstate[216];
+#endif
+};
+
+#endif
--- sysdeps/unix/sysv/linux/m68k/bits/siginfo.h	1969-12-31 16:00:00.000000000 -0800
+++ sysdeps/unix/sysv/linux/m68k/bits/siginfo.h	2006-08-15 05:26:28.000000000 -0700
@@ -0,0 +1,316 @@
+/* siginfo_t, sigevent and constants.  m68k linux version.
+   Copyright (C) 1997-2002, 2003 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
+
+#if !defined _SIGNAL_H && !defined __need_siginfo_t \
+    && !defined __need_sigevent_t
+# error "Never include this file directly.  Use <signal.h> instead"
+#endif
+
+#include <bits/wordsize.h>
+
+#if (!defined __have_sigval_t \
+     && (defined _SIGNAL_H || defined __need_siginfo_t \
+	 || defined __need_sigevent_t))
+# define __have_sigval_t	1
+
+/* Type for data associated with a signal.  */
+typedef union sigval
+  {
+    int sival_int;
+    void *sival_ptr;
+  } sigval_t;
+#endif
+
+#if (!defined __have_siginfo_t \
+     && (defined _SIGNAL_H || defined __need_siginfo_t))
+# define __have_siginfo_t	1
+
+# define __SI_MAX_SIZE     128
+# if __WORDSIZE == 64
+#  define __SI_PAD_SIZE     ((__SI_MAX_SIZE / sizeof (int)) - 4)
+# else
+#  define __SI_PAD_SIZE     ((__SI_MAX_SIZE / sizeof (int)) - 3)
+# endif
+
+typedef struct siginfo
+  {
+    int si_signo;		/* Signal number.  */
+    int si_errno;		/* If non-zero, an errno value associated with
+				   this signal, as defined in <errno.h>.  */
+    int si_code;		/* Signal code.  */
+
+    union
+      {
+	int _pad[__SI_PAD_SIZE];
+
+	 /* kill().  */
+	struct
+	  {
+	    __pid_t si_pid;	/* Sending process ID.  */
+	    unsigned short __pad; /* 16-bit version of si_uid.  */
+	    __uid_t si_uid;	/* Real user ID of sending process.  */
+	  } _kill;
+
+	/* POSIX.1b timers.  */
+	struct
+	  {
+	    int si_tid;		/* Timer ID.  */
+	    int si_overrun;	/* Overrun count.  */
+	    sigval_t si_sigval;	/* Signal value.  */
+	  } _timer;
+
+	/* POSIX.1b signals.  */
+	struct
+	  {
+	    __pid_t si_pid;	/* Sending process ID.  */
+	    unsigned short __pad; /* 16-bit version of si_uid.  */
+	    sigval_t si_sigval;	/* Signal value.  */
+	    __uid_t si_uid;	/* Real user ID of sending process.  */
+	  } _rt;
+
+	/* SIGCHLD.  */
+	struct
+	  {
+	    __pid_t si_pid;	/* Which child.  */
+	    unsigned short __pad; /* 16-bit version of si_uid.  */
+	    int si_status;	/* Exit value or signal.  */
+	    __clock_t si_utime;
+	    __clock_t si_stime;
+	    __uid_t si_uid;	/* Real user ID of sending process.  */
+	  } _sigchld;
+
+	/* SIGILL, SIGFPE, SIGSEGV, SIGBUS.  */
+	struct
+	  {
+	    void *si_addr;	/* Faulting insn/memory ref.  */
+	  } _sigfault;
+
+	/* SIGPOLL.  */
+	struct
+	  {
+	    long int si_band;	/* Band event for SIGPOLL.  */
+	    int si_fd;
+	  } _sigpoll;
+      } _sifields;
+  } siginfo_t;
+
+
+/* X/Open requires some more fields with fixed names.  */
+# define si_pid		_sifields._kill.si_pid
+# define si_uid		_sifields._kill.si_uid
+# define si_timerid	_sifields._timer.si_tid
+# define si_overrun	_sifields._timer.si_overrun
+# define si_status	_sifields._sigchld.si_status
+# define si_utime	_sifields._sigchld.si_utime
+# define si_stime	_sifields._sigchld.si_stime
+# define si_value	_sifields._rt.si_sigval
+# define si_int		_sifields._rt.si_sigval.sival_int
+# define si_ptr		_sifields._rt.si_sigval.sival_ptr
+# define si_addr	_sifields._sigfault.si_addr
+# define si_band	_sifields._sigpoll.si_band
+# define si_fd		_sifields._sigpoll.si_fd
+
+
+/* Values for `si_code'.  Positive values are reserved for kernel-generated
+   signals.  */
+enum
+{
+  SI_ASYNCNL = -60,		/* Sent by asynch name lookup completion.  */
+# define SI_ASYNCNL	SI_ASYNCNL
+  SI_TKILL = -6,		/* Sent by tkill.  */
+# define SI_TKILL	SI_TKILL
+  SI_SIGIO,			/* Sent by queued SIGIO. */
+# define SI_SIGIO	SI_SIGIO
+  SI_ASYNCIO,			/* Sent by AIO completion.  */
+# define SI_ASYNCIO	SI_ASYNCIO
+  SI_MESGQ,			/* Sent by real time mesq state change.  */
+# define SI_MESGQ	SI_MESGQ
+  SI_TIMER,			/* Sent by timer expiration.  */
+# define SI_TIMER	SI_TIMER
+  SI_QUEUE,			/* Sent by sigqueue.  */
+# define SI_QUEUE	SI_QUEUE
+  SI_USER,			/* Sent by kill, sigsend, raise.  */
+# define SI_USER	SI_USER
+  SI_KERNEL = 0x80		/* Send by kernel.  */
+#define SI_KERNEL	SI_KERNEL
+};
+
+
+/* `si_code' values for SIGILL signal.  */
+enum
+{
+  ILL_ILLOPC = 1,		/* Illegal opcode.  */
+# define ILL_ILLOPC	ILL_ILLOPC
+  ILL_ILLOPN,			/* Illegal operand.  */
+# define ILL_ILLOPN	ILL_ILLOPN
+  ILL_ILLADR,			/* Illegal addressing mode.  */
+# define ILL_ILLADR	ILL_ILLADR
+  ILL_ILLTRP,			/* Illegal trap. */
+# define ILL_ILLTRP	ILL_ILLTRP
+  ILL_PRVOPC,			/* Privileged opcode.  */
+# define ILL_PRVOPC	ILL_PRVOPC
+  ILL_PRVREG,			/* Privileged register.  */
+# define ILL_PRVREG	ILL_PRVREG
+  ILL_COPROC,			/* Coprocessor error.  */
+# define ILL_COPROC	ILL_COPROC
+  ILL_BADSTK			/* Internal stack error.  */
+# define ILL_BADSTK	ILL_BADSTK
+};
+
+/* `si_code' values for SIGFPE signal.  */
+enum
+{
+  FPE_INTDIV = 1,		/* Integer divide by zero.  */
+# define FPE_INTDIV	FPE_INTDIV
+  FPE_INTOVF,			/* Integer overflow.  */
+# define FPE_INTOVF	FPE_INTOVF
+  FPE_FLTDIV,			/* Floating point divide by zero.  */
+# define FPE_FLTDIV	FPE_FLTDIV
+  FPE_FLTOVF,			/* Floating point overflow.  */
+# define FPE_FLTOVF	FPE_FLTOVF
+  FPE_FLTUND,			/* Floating point underflow.  */
+# define FPE_FLTUND	FPE_FLTUND
+  FPE_FLTRES,			/* Floating point inexact result.  */
+# define FPE_FLTRES	FPE_FLTRES
+  FPE_FLTINV,			/* Floating point invalid operation.  */
+# define FPE_FLTINV	FPE_FLTINV
+  FPE_FLTSUB			/* Subscript out of range.  */
+# define FPE_FLTSUB	FPE_FLTSUB
+};
+
+/* `si_code' values for SIGSEGV signal.  */
+enum
+{
+  SEGV_MAPERR = 1,		/* Address not mapped to object.  */
+# define SEGV_MAPERR	SEGV_MAPERR
+  SEGV_ACCERR			/* Invalid permissions for mapped object.  */
+# define SEGV_ACCERR	SEGV_ACCERR
+};
+
+/* `si_code' values for SIGBUS signal.  */
+enum
+{
+  BUS_ADRALN = 1,		/* Invalid address alignment.  */
+# define BUS_ADRALN	BUS_ADRALN
+  BUS_ADRERR,			/* Non-existant physical address.  */
+# define BUS_ADRERR	BUS_ADRERR
+  BUS_OBJERR			/* Object specific hardware error.  */
+# define BUS_OBJERR	BUS_OBJERR
+};
+
+/* `si_code' values for SIGTRAP signal.  */
+enum
+{
+  TRAP_BRKPT = 1,		/* Process breakpoint.  */
+# define TRAP_BRKPT	TRAP_BRKPT
+  TRAP_TRACE			/* Process trace trap.  */
+# define TRAP_TRACE	TRAP_TRACE
+};
+
+/* `si_code' values for SIGCHLD signal.  */
+enum
+{
+  CLD_EXITED = 1,		/* Child has exited.  */
+# define CLD_EXITED	CLD_EXITED
+  CLD_KILLED,			/* Child was killed.  */
+# define CLD_KILLED	CLD_KILLED
+  CLD_DUMPED,			/* Child terminated abnormally.  */
+# define CLD_DUMPED	CLD_DUMPED
+  CLD_TRAPPED,			/* Traced child has trapped.  */
+# define CLD_TRAPPED	CLD_TRAPPED
+  CLD_STOPPED,			/* Child has stopped.  */
+# define CLD_STOPPED	CLD_STOPPED
+  CLD_CONTINUED			/* Stopped child has continued.  */
+# define CLD_CONTINUED	CLD_CONTINUED
+};
+
+/* `si_code' values for SIGPOLL signal.  */
+enum
+{
+  POLL_IN = 1,			/* Data input available.  */
+# define POLL_IN	POLL_IN
+  POLL_OUT,			/* Output buffers available.  */
+# define POLL_OUT	POLL_OUT
+  POLL_MSG,			/* Input message available.   */
+# define POLL_MSG	POLL_MSG
+  POLL_ERR,			/* I/O error.  */
+# define POLL_ERR	POLL_ERR
+  POLL_PRI,			/* High priority input available.  */
+# define POLL_PRI	POLL_PRI
+  POLL_HUP			/* Device disconnected.  */
+# define POLL_HUP	POLL_HUP
+};
+
+# undef __need_siginfo_t
+#endif	/* !have siginfo_t && (have _SIGNAL_H || need siginfo_t).  */
+
+
+#if (defined _SIGNAL_H || defined __need_sigevent_t) \
+    && !defined __have_sigevent_t
+# define __have_sigevent_t	1
+
+/* Structure to transport application-defined values with signals.  */
+# define __SIGEV_MAX_SIZE	64
+# if __WORDSIZE == 64
+#  define __SIGEV_PAD_SIZE	((__SIGEV_MAX_SIZE / sizeof (int)) - 4)
+# else
+#  define __SIGEV_PAD_SIZE	((__SIGEV_MAX_SIZE / sizeof (int)) - 3)
+# endif
+
+typedef struct sigevent
+  {
+    sigval_t sigev_value;
+    int sigev_signo;
+    int sigev_notify;
+
+    union
+      {
+	int _pad[__SIGEV_PAD_SIZE];
+
+	/* When SIGEV_SIGNAL and SIGEV_THREAD_ID set, LWP ID of the
+	   thread to receive the signal.  */
+	__pid_t _tid;
+
+	struct
+	  {
+	    void (*_function) (sigval_t);	/* Function to start.  */
+	    void *_attribute;			/* Really pthread_attr_t.  */
+	  } _sigev_thread;
+      } _sigev_un;
+  } sigevent_t;
+
+/* POSIX names to access some of the members.  */
+# define sigev_notify_function   _sigev_un._sigev_thread._function
+# define sigev_notify_attributes _sigev_un._sigev_thread._attribute
+
+/* `sigev_notify' values.  */
+enum
+{
+  SIGEV_SIGNAL = 0,		/* Notify via signal.  */
+# define SIGEV_SIGNAL	SIGEV_SIGNAL
+  SIGEV_NONE,			/* Other notification: meaningless.  */
+# define SIGEV_NONE	SIGEV_NONE
+  SIGEV_THREAD,			/* Deliver via thread creation.  */
+# define SIGEV_THREAD	SIGEV_THREAD
+
+  SIGEV_THREAD_ID = 4		/* Send signal to specific thread.  */
+#define SIGEV_THREAD_ID	SIGEV_THREAD_ID
+};
+
+#endif	/* have _SIGNAL_H.  */
--- sysdeps/m68k/coldfire/bits/atomic.h	1969-12-31 16:00:00.000000000 -0800
+++ sysdeps/m68k/coldfire/bits/atomic.h	2006-08-10 11:00:54.000000000 -0700
@@ -0,0 +1,69 @@
+/* Copyright (C) 2003, 2006 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
+
+#ifndef _BITS_ATOMIC_H
+#define _BITS_ATOMIC_H	1
+
+#include <stdint.h>
+
+/* Coldfire has no atomic compare-and-exchange operation, and the
+   kernel provides no userspace atomicity operations.  Here we just
+   use generic non-atomic implementations instead.  */
+
+typedef int8_t atomic8_t;
+typedef uint8_t uatomic8_t;
+typedef int_fast8_t atomic_fast8_t;
+typedef uint_fast8_t uatomic_fast8_t;
+
+typedef int16_t atomic16_t;
+typedef uint16_t uatomic16_t;
+typedef int_fast16_t atomic_fast16_t;
+typedef uint_fast16_t uatomic_fast16_t;
+
+typedef int32_t atomic32_t;
+typedef uint32_t uatomic32_t;
+typedef int_fast32_t atomic_fast32_t;
+typedef uint_fast32_t uatomic_fast32_t;
+
+typedef int64_t atomic64_t;
+typedef uint64_t uatomic64_t;
+typedef int_fast64_t atomic_fast64_t;
+typedef uint_fast64_t uatomic_fast64_t;
+
+typedef intptr_t atomicptr_t;
+typedef uintptr_t uatomicptr_t;
+typedef intmax_t atomic_max_t;
+typedef uintmax_t uatomic_max_t;
+
+/* The only basic operation needed is compare and exchange.  */
+#define atomic_compare_and_exchange_val_acq(mem, newval, oldval) \
+  ({ __typeof (mem) __gmemp = (mem);				      \
+     __typeof (*mem) __gret = *__gmemp;				      \
+     __typeof (*mem) __gnewval = (newval);			      \
+								      \
+     if (__gret == (oldval))					      \
+       *__gmemp = __gnewval;					      \
+     __gret; })
+
+#define atomic_compare_and_exchange_bool_acq(mem, newval, oldval) \
+  ({ __typeof (mem) __gmemp = (mem);				      \
+     __typeof (*mem) __gnewval = (newval);			      \
+								      \
+     *__gmemp == (oldval) ? (*__gmemp = __gnewval, 0) : 1; })
+
+#endif
--- sysdeps/m68k/coldfire/fpu/e_pow.c	1969-12-31 16:00:00.000000000 -0800
+++ sysdeps/m68k/coldfire/fpu/e_pow.c	2006-08-10 11:01:34.000000000 -0700
@@ -0,0 +1,27 @@
+/* Copyright (C) 2006 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
+
+/* This file exists purely to redefine NaNQ.  */
+#include "endian.h"
+#include <sysdeps/ieee754/dbl-64/mydefs.h>
+#include <sysdeps/ieee754/dbl-64/upow.h>
+
+#define NaNQ NaNQ_cf
+const static mynumber NaNQ = {{0x7fffffff, 0xffffffff}};
+
+#include <sysdeps/ieee754/dbl-64/e_pow.c>
--- sysdeps/m68k/coldfire/fpu/e_sqrt.c	1969-12-31 16:00:00.000000000 -0800
+++ sysdeps/m68k/coldfire/fpu/e_sqrt.c	2006-08-10 07:58:19.000000000 -0700
@@ -0,0 +1,24 @@
+/* Copyright (C) 2006 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
+
+double
+__ieee754_sqrt (double x)
+{
+  asm ("fdsqrt.d %1,%0" : "=f" (x) : "fm" (x));
+  return x;
+}
--- sysdeps/m68k/coldfire/fpu/e_sqrtf.c	1969-12-31 16:00:00.000000000 -0800
+++ sysdeps/m68k/coldfire/fpu/e_sqrtf.c	2006-08-15 05:26:52.000000000 -0700
@@ -0,0 +1,25 @@
+/* Copyright (C) 2006 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
+
+float
+__ieee754_sqrtf (float x)
+{
+  double result;
+  asm ("fssqrt.s %1,%0" : "=f" (result) : "dm" (x));
+  return result;
+}
--- sysdeps/m68k/coldfire/fpu/fraiseexcpt.c	1969-12-31 16:00:00.000000000 -0800
+++ sysdeps/m68k/coldfire/fpu/fraiseexcpt.c	2006-08-15 05:27:23.000000000 -0700
@@ -0,0 +1,67 @@
+/* Raise given exceptions.
+   Copyright (C) 2006 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
+
+#include <fenv.h>
+#include <float.h>
+#include <math.h>
+
+int
+feraiseexcept (int excepts)
+{
+  /* Raise exceptions represented by EXCEPTS.  But we must raise only one
+     signal at a time.  It is important that if the overflow/underflow
+     exception and the divide by zero exception are given at the same
+     time, the overflow/underflow exception follows the divide by zero
+     exception.
+
+     The Coldfire FPU allows an exception to be raised by asserting
+     the associated EXC bit and then executing an arbitrary arithmetic
+     instruction.  fmove.l is classified as an arithmetic instruction
+     and suffices for this purpose.
+
+     We therefore raise an exception by setting both the EXC and AEXC
+     bit associated with the exception (the former being 6 bits to the
+     left of the latter) and then loading the longword at (%sp) into an
+     FP register.  */
+
+  inline void
+  raise_one_exception (int mask)
+  {
+    if (excepts & mask)
+      {
+	int fpsr;
+	double unused;
+
+	asm volatile ("fmove%.l %/fpsr,%0" : "=d" (fpsr));
+	fpsr |= (mask << 6) | mask;
+	asm volatile ("fmove%.l %0,%/fpsr" :: "d" (fpsr));
+	asm volatile ("fmove%.l (%%sp),%0" : "=f" (unused));
+      }
+  }
+
+  raise_one_exception (FE_INVALID);
+  raise_one_exception (FE_DIVBYZERO);
+  raise_one_exception (FE_OVERFLOW);
+  raise_one_exception (FE_UNDERFLOW);
+  raise_one_exception (FE_INEXACT);
+
+  /* Success.  */
+  return 0;
+}
+libm_hidden_def (feraiseexcept)
--- sysdeps/m68k/coldfire/fpu/libm-test-ulps	1969-12-31 16:00:00.000000000 -0800
+++ sysdeps/m68k/coldfire/fpu/libm-test-ulps	2006-08-10 05:39:47.000000000 -0700
@@ -0,0 +1,820 @@
+# Begin of automatic generation
+
+# atan2
+Test "atan2 (-0.75, -1.0) == -2.49809154479650885165983415456218025":
+float: 1
+ifloat: 1
+Test "atan2 (0.75, -1.0) == 2.49809154479650885165983415456218025":
+float: 1
+ifloat: 1
+Test "atan2 (1.390625, 0.9296875) == 0.981498387184244311516296577615519772":
+float: 1
+ifloat: 1
+
+# atanh
+Test "atanh (0.75) == 0.972955074527656652552676371721589865":
+float: 1
+ifloat: 1
+
+# cacosh
+Test "Imaginary part of: cacosh (-2 - 3 i) == 1.9833870299165354323470769028940395 - 2.1414491111159960199416055713254211 i":
+float: 1
+ifloat: 1
+
+# casin
+Test "Real part of: casin (0.75 + 1.25 i) == 0.453276177638793913448921196101971749 + 1.13239363160530819522266333696834467 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
+# casinh
+Test "Real part of: casinh (-2 - 3 i) == -1.9686379257930962917886650952454982 - 0.96465850440760279204541105949953237 i":
+double: 5
+float: 1
+idouble: 5
+ifloat: 1
+Test "Imaginary part of: casinh (-2 - 3 i) == -1.9686379257930962917886650952454982 - 0.96465850440760279204541105949953237 i":
+double: 3
+float: 6
+idouble: 3
+ifloat: 6
+Test "Real part of: casinh (0.75 + 1.25 i) == 1.03171853444778027336364058631006594 + 0.911738290968487636358489564316731207 i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: casinh (0.75 + 1.25 i) == 1.03171853444778027336364058631006594 + 0.911738290968487636358489564316731207 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
+# catan
+Test "Imaginary part of: catan (-2 - 3 i) == -1.4099210495965755225306193844604208 - 0.22907268296853876629588180294200276 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
+# catanh
+Test "Real part of: catanh (-2 - 3 i) == -0.14694666622552975204743278515471595 - 1.3389725222944935611241935759091443 i":
+double: 4
+idouble: 4
+Test "Real part of: catanh (0.75 + 1.25 i) == 0.261492138795671927078652057366532140 + 0.996825126463918666098902241310446708 i":
+double: 1
+idouble: 1
+
+# cbrt
+Test "cbrt (-27.0) == -3.0":
+double: 1
+idouble: 1
+Test "cbrt (0.75) == 0.908560296416069829445605878163630251":
+double: 1
+idouble: 1
+Test "cbrt (0.9921875) == 0.997389022060725270579075195353955217":
+double: 1
+idouble: 1
+
+# ccos
+Test "Imaginary part of: ccos (-2 - 3 i) == -4.18962569096880723013255501961597373 - 9.10922789375533659797919726277886212 i":
+float: 1
+ifloat: 1
+Test "Real part of: ccos (0.75 + 1.25 i) == 1.38173873063425888530729933139078645 - 1.09193013555397466170919531722024128 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: ccos (0.75 + 1.25 i) == 1.38173873063425888530729933139078645 - 1.09193013555397466170919531722024128 i":
+float: 1
+ifloat: 1
+
+# ccosh
+Test "Real part of: ccosh (-2 - 3 i) == -3.72454550491532256547397070325597253 + 0.511822569987384608834463849801875634 i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: ccosh (-2 - 3 i) == -3.72454550491532256547397070325597253 + 0.511822569987384608834463849801875634 i":
+float: 1
+ifloat: 1
+Test "Real part of: ccosh (0.75 + 1.25 i) == 0.408242591877968807788852146397499084 + 0.780365930845853240391326216300863152 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: ccosh (0.75 + 1.25 i) == 0.408242591877968807788852146397499084 + 0.780365930845853240391326216300863152 i":
+float: 1
+ifloat: 1
+
+# cexp
+Test "Imaginary part of: cexp (-2.0 - 3.0 i) == -0.13398091492954261346140525546115575 - 0.019098516261135196432576240858800925 i":
+float: 1
+ifloat: 1
+Test "Real part of: cexp (0.75 + 1.25 i) == 0.667537446429131586942201977015932112 + 2.00900045494094876258347228145863909 i":
+float: 1
+ifloat: 1
+
+# clog
+Test "Real part of: clog (0.75 + 1.25 i) == 0.376885901188190075998919126749298416 + 1.03037682652431246378774332703115153 i":
+float: 1
+ifloat: 1
+
+# clog10
+Test "Imaginary part of: clog10 (-0 + inf i) == inf + pi/2*log10(e) i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: clog10 (-0 - inf i) == inf - pi/2*log10(e) i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: clog10 (-2 - 3 i) == 0.556971676153418384603252578971164214 - 0.937554462986374708541507952140189646 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog10 (-3 + inf i) == inf + pi/2*log10(e) i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: clog10 (-3 - inf i) == inf - pi/2*log10(e) i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: clog10 (-inf + 0 i) == inf + pi*log10(e) i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: clog10 (-inf + 1 i) == inf + pi*log10(e) i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: clog10 (-inf - 0 i) == inf - pi*log10(e) i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: clog10 (-inf - 1 i) == inf - pi*log10(e) i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: clog10 (0 + inf i) == inf + pi/2*log10(e) i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: clog10 (0 - inf i) == inf - pi/2*log10(e) i":
+float: 1
+ifloat: 1
+Test "Real part of: clog10 (0.75 + 1.25 i) == 0.163679467193165171449476605077428975 + 0.447486970040493067069984724340855636 i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: clog10 (3 + inf i) == inf + pi/2*log10(e) i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: clog10 (3 - inf i) == inf - pi/2*log10(e) i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: clog10 (inf + inf i) == inf + pi/4*log10(e) i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: clog10 (inf - inf i) == inf - pi/4*log10(e) i":
+float: 1
+ifloat: 1
+
+# cos
+Test "cos (M_PI_6l * 2.0) == 0.5":
+double: 1
+idouble: 1
+Test "cos (M_PI_6l * 4.0) == -0.5":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+
+# cpow
+Test "Real part of: cpow (0.75 + 1.25 i, 0.0 + 1.0 i) == 0.331825439177608832276067945276730566 + 0.131338600281188544930936345230903032 i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cpow (0.75 + 1.25 i, 0.0 + 1.0 i) == 0.331825439177608832276067945276730566 + 0.131338600281188544930936345230903032 i":
+float: 1
+ifloat: 1
+Test "Real part of: cpow (0.75 + 1.25 i, 0.75 + 1.25 i) == 0.117506293914473555420279832210420483 + 0.346552747708338676483025352060418001 i":
+double: 1
+float: 4
+idouble: 1
+ifloat: 4
+Test "Real part of: cpow (0.75 + 1.25 i, 1.0 + 1.0 i) == 0.0846958290317209430433805274189191353 + 0.513285749182902449043287190519090481 i":
+double: 2
+float: 3
+idouble: 2
+ifloat: 3
+Test "Real part of: cpow (2 + 3 i, 4 + 0 i) == -119.0 - 120.0 i":
+double: 1
+float: 4
+idouble: 1
+ifloat: 4
+Test "Imaginary part of: cpow (2 + 3 i, 4 + 0 i) == -119.0 - 120.0 i":
+float: 2
+ifloat: 2
+Test "Imaginary part of: cpow (e + 0 i, 0 + 2 * M_PIl i) == 1.0 + 0.0 i":
+double: 2
+float: 2
+idouble: 2
+ifloat: 2
+
+# csinh
+Test "Imaginary part of: csinh (-2 - 3 i) == 3.59056458998577995201256544779481679 - 0.530921086248519805267040090660676560 i":
+double: 1
+idouble: 1
+Test "Real part of: csinh (0.75 + 1.25 i) == 0.259294854551162779153349830618433028 + 1.22863452409509552219214606515777594 i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: csinh (0.75 + 1.25 i) == 0.259294854551162779153349830618433028 + 1.22863452409509552219214606515777594 i":
+float: 1
+ifloat: 1
+
+# csqrt
+Test "Real part of: csqrt (-2 + 3 i) == 0.89597747612983812471573375529004348 + 1.6741492280355400404480393008490519 i":
+float: 1
+ifloat: 1
+Test "Real part of: csqrt (-2 - 3 i) == 0.89597747612983812471573375529004348 - 1.6741492280355400404480393008490519 i":
+float: 1
+ifloat: 1
+
+# ctan
+Test "Imaginary part of: ctan (0.75 + 1.25 i) == 0.160807785916206426725166058173438663 + 0.975363285031235646193581759755216379 i":
+double: 1
+idouble: 1
+
+# ctanh
+Test "Real part of: ctanh (-2 - 3 i) == -0.965385879022133124278480269394560686 + 0.988437503832249372031403430350121098e-2 i":
+double: 1
+float: 2
+idouble: 1
+ifloat: 2
+Test "Imaginary part of: ctanh (0 + pi/4 i) == 0.0 + 1.0 i":
+float: 1
+ifloat: 1
+Test "Real part of: ctanh (0.75 + 1.25 i) == 1.37260757053378320258048606571226857 + 0.385795952609750664177596760720790220 i":
+double: 1
+idouble: 1
+
+# erf
+Test "erf (1.25) == 0.922900128256458230136523481197281140":
+double: 1
+idouble: 1
+
+# erfc
+Test "erfc (2.0) == 0.00467773498104726583793074363274707139":
+double: 1
+idouble: 1
+Test "erfc (4.125) == 0.542340079956506600531223408575531062e-8":
+double: 1
+idouble: 1
+
+# exp10
+Test "exp10 (-1) == 0.1":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+Test "exp10 (0.75) == 5.62341325190349080394951039776481231":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "exp10 (3) == 1000":
+double: 6
+float: 2
+idouble: 6
+ifloat: 2
+
+# expm1
+Test "expm1 (0.75) == 1.11700001661267466854536981983709561":
+double: 1
+idouble: 1
+Test "expm1 (1) == M_El - 1.0":
+float: 1
+ifloat: 1
+
+# hypot
+Test "hypot (-0.7, -12.4) == 12.419742348374220601176836866763271":
+float: 1
+ifloat: 1
+Test "hypot (-0.7, 12.4) == 12.419742348374220601176836866763271":
+float: 1
+ifloat: 1
+Test "hypot (-12.4, -0.7) == 12.419742348374220601176836866763271":
+float: 1
+ifloat: 1
+Test "hypot (-12.4, 0.7) == 12.419742348374220601176836866763271":
+float: 1
+ifloat: 1
+Test "hypot (0.7, -12.4) == 12.419742348374220601176836866763271":
+float: 1
+ifloat: 1
+Test "hypot (0.7, 12.4) == 12.419742348374220601176836866763271":
+float: 1
+ifloat: 1
+Test "hypot (12.4, -0.7) == 12.419742348374220601176836866763271":
+float: 1
+ifloat: 1
+Test "hypot (12.4, 0.7) == 12.419742348374220601176836866763271":
+float: 1
+ifloat: 1
+
+# j0
+Test "j0 (-4.0) == -3.9714980986384737228659076845169804197562E-1":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "j0 (0.75) == 0.864242275166648623555731103820923211":
+float: 1
+ifloat: 1
+Test "j0 (10.0) == -0.245935764451348335197760862485328754":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+Test "j0 (2.0) == 0.223890779141235668051827454649948626":
+float: 2
+ifloat: 2
+Test "j0 (4.0) == -3.9714980986384737228659076845169804197562E-1":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "j0 (8.0) == 0.171650807137553906090869407851972001":
+float: 1
+ifloat: 1
+
+# j1
+Test "j1 (10.0) == 0.0434727461688614366697487680258592883":
+float: 2
+ifloat: 2
+Test "j1 (2.0) == 0.576724807756873387202448242269137087":
+double: 1
+idouble: 1
+Test "j1 (8.0) == 0.234636346853914624381276651590454612":
+double: 1
+idouble: 1
+
+# jn
+Test "jn (0, -4.0) == -3.9714980986384737228659076845169804197562E-1":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "jn (0, 0.75) == 0.864242275166648623555731103820923211":
+float: 1
+ifloat: 1
+Test "jn (0, 10.0) == -0.245935764451348335197760862485328754":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+Test "jn (0, 2.0) == 0.223890779141235668051827454649948626":
+float: 2
+ifloat: 2
+Test "jn (0, 4.0) == -3.9714980986384737228659076845169804197562E-1":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "jn (0, 8.0) == 0.171650807137553906090869407851972001":
+float: 1
+ifloat: 1
+Test "jn (1, 10.0) == 0.0434727461688614366697487680258592883":
+float: 2
+ifloat: 2
+Test "jn (1, 2.0) == 0.576724807756873387202448242269137087":
+double: 1
+idouble: 1
+Test "jn (1, 8.0) == 0.234636346853914624381276651590454612":
+double: 1
+idouble: 1
+Test "jn (10, 0.125) == 0.250543369809369890173993791865771547e-18":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "jn (10, 0.75) == 0.149621713117596814698712483621682835e-10":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "jn (10, 10.0) == 0.207486106633358857697278723518753428":
+double: 4
+float: 3
+idouble: 4
+ifloat: 3
+Test "jn (10, 2.0) == 0.251538628271673670963516093751820639e-6":
+float: 4
+ifloat: 4
+Test "jn (3, 0.125) == 0.406503832554912875023029337653442868e-4":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "jn (3, 0.75) == 0.848438342327410884392755236884386804e-2":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "jn (3, 10.0) == 0.0583793793051868123429354784103409563":
+double: 3
+float: 1
+idouble: 3
+ifloat: 1
+Test "jn (3, 2.0) == 0.128943249474402051098793332969239835":
+double: 1
+float: 2
+idouble: 1
+ifloat: 2
+
+# lgamma
+Test "lgamma (0.7) == 0.260867246531666514385732417016759578":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "lgamma (1.2) == -0.853740900033158497197028392998854470e-1":
+double: 1
+float: 2
+idouble: 1
+ifloat: 2
+
+# log10
+Test "log10 (0.75) == -0.124938736608299953132449886193870744":
+double: 1
+float: 2
+idouble: 1
+ifloat: 2
+Test "log10 (e) == log10(e)":
+float: 1
+ifloat: 1
+
+# log1p
+Test "log1p (-0.25) == -0.287682072451780927439219005993827432":
+float: 1
+ifloat: 1
+
+# sincos
+Test "sincos (M_PI_6l*2.0, &sin_res, &cos_res) puts 0.5 in cos_res":
+double: 1
+idouble: 1
+Test "sincos (M_PI_6l*2.0, &sin_res, &cos_res) puts 0.86602540378443864676372317075293616 in sin_res":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "sincos (pi/6, &sin_res, &cos_res) puts 0.86602540378443864676372317075293616 in cos_res":
+float: 1
+ifloat: 1
+
+# tgamma
+Test "tgamma (-0.5) == -2 sqrt (pi)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "tgamma (0.5) == sqrt (pi)":
+float: 1
+ifloat: 1
+Test "tgamma (0.7) == 1.29805533264755778568117117915281162":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
+# y0
+Test "y0 (1.0) == 0.0882569642156769579829267660235151628":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+Test "y0 (1.5) == 0.382448923797758843955068554978089862":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+Test "y0 (10.0) == 0.0556711672835993914244598774101900481":
+float: 1
+ifloat: 1
+Test "y0 (8.0) == 0.223521489387566220527323400498620359":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
+# y1
+Test "y1 (0.125) == -5.19993611253477499595928744876579921":
+double: 1
+idouble: 1
+Test "y1 (1.5) == -0.412308626973911295952829820633445323":
+float: 1
+ifloat: 1
+Test "y1 (10.0) == 0.249015424206953883923283474663222803":
+double: 3
+float: 1
+idouble: 3
+ifloat: 1
+Test "y1 (2.0) == -0.107032431540937546888370772277476637":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "y1 (8.0) == -0.158060461731247494255555266187483550":
+double: 1
+float: 2
+idouble: 1
+ifloat: 2
+
+# yn
+Test "yn (0, 1.0) == 0.0882569642156769579829267660235151628":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+Test "yn (0, 1.5) == 0.382448923797758843955068554978089862":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+Test "yn (0, 10.0) == 0.0556711672835993914244598774101900481":
+float: 1
+ifloat: 1
+Test "yn (0, 8.0) == 0.223521489387566220527323400498620359":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "yn (1, 0.125) == -5.19993611253477499595928744876579921":
+double: 1
+idouble: 1
+Test "yn (1, 1.5) == -0.412308626973911295952829820633445323":
+float: 1
+ifloat: 1
+Test "yn (1, 10.0) == 0.249015424206953883923283474663222803":
+double: 3
+float: 1
+idouble: 3
+ifloat: 1
+Test "yn (1, 2.0) == -0.107032431540937546888370772277476637":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "yn (1, 8.0) == -0.158060461731247494255555266187483550":
+double: 1
+float: 2
+idouble: 1
+ifloat: 2
+Test "yn (10, 0.125) == -127057845771019398.252538486899753195":
+double: 1
+idouble: 1
+Test "yn (10, 0.75) == -2133501638.90573424452445412893839236":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "yn (10, 1.0) == -121618014.278689189288130426667971145":
+double: 1
+idouble: 1
+Test "yn (10, 10.0) == -0.359814152183402722051986577343560609":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "yn (10, 2.0) == -129184.542208039282635913145923304214":
+double: 2
+idouble: 2
+Test "yn (3, 0.125) == -2612.69757350066712600220955744091741":
+double: 1
+idouble: 1
+Test "yn (3, 0.75) == -12.9877176234475433186319774484809207":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "yn (3, 10.0) == -0.251362657183837329779204747654240998":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "yn (3, 2.0) == -1.12778377684042778608158395773179238":
+double: 1
+idouble: 1
+
+# Maximal error of functions:
+Function: "atan2":
+float: 1
+ifloat: 1
+
+Function: "atanh":
+float: 1
+ifloat: 1
+
+Function: Imaginary part of "cacosh":
+float: 1
+ifloat: 1
+
+Function: Real part of "casin":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
+Function: Real part of "casinh":
+double: 5
+float: 1
+idouble: 5
+ifloat: 1
+
+Function: Imaginary part of "casinh":
+double: 3
+float: 6
+idouble: 3
+ifloat: 6
+
+Function: Imaginary part of "catan":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
+Function: Real part of "catanh":
+double: 4
+idouble: 4
+
+Function: "cbrt":
+double: 1
+idouble: 1
+
+Function: Real part of "ccos":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
+Function: Imaginary part of "ccos":
+float: 1
+ifloat: 1
+
+Function: Real part of "ccosh":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
+Function: Imaginary part of "ccosh":
+float: 1
+ifloat: 1
+
+Function: Real part of "cexp":
+float: 1
+ifloat: 1
+
+Function: Imaginary part of "cexp":
+float: 1
+ifloat: 1
+
+Function: Real part of "clog":
+float: 1
+ifloat: 1
+
+Function: Real part of "clog10":
+float: 1
+ifloat: 1
+
+Function: Imaginary part of "clog10":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
+Function: "cos":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+
+Function: Real part of "cpow":
+double: 2
+float: 4
+idouble: 2
+ifloat: 4
+
+Function: Imaginary part of "cpow":
+double: 2
+float: 2
+idouble: 2
+ifloat: 2
+
+Function: Real part of "csinh":
+float: 1
+ifloat: 1
+
+Function: Imaginary part of "csinh":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
+Function: Real part of "csqrt":
+float: 1
+ifloat: 1
+
+Function: Imaginary part of "ctan":
+double: 1
+idouble: 1
+
+Function: Real part of "ctanh":
+double: 1
+float: 2
+idouble: 1
+ifloat: 2
+
+Function: Imaginary part of "ctanh":
+float: 1
+ifloat: 1
+
+Function: "erf":
+double: 1
+idouble: 1
+
+Function: "erfc":
+double: 1
+idouble: 1
+
+Function: "exp10":
+double: 6
+float: 2
+idouble: 6
+ifloat: 2
+
+Function: "expm1":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
+Function: "hypot":
+float: 1
+ifloat: 1
+
+Function: "j0":
+double: 2
+float: 2
+idouble: 2
+ifloat: 2
+
+Function: "j1":
+double: 1
+float: 2
+idouble: 1
+ifloat: 2
+
+Function: "jn":
+double: 4
+float: 4
+idouble: 4
+ifloat: 4
+
+Function: "lgamma":
+double: 1
+float: 2
+idouble: 1
+ifloat: 2
+
+Function: "log10":
+double: 1
+float: 2
+idouble: 1
+ifloat: 2
+
+Function: "log1p":
+float: 1
+ifloat: 1
+
+Function: "sincos":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
+Function: "tan":
+double: 1
+idouble: 1
+
+Function: "tgamma":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
+Function: "y0":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+
+Function: "y1":
+double: 3
+float: 2
+idouble: 3
+ifloat: 2
+
+Function: "yn":
+double: 3
+float: 2
+idouble: 3
+ifloat: 2
+
+# end of automatic generation
--- sysdeps/m68k/coldfire/fpu/s_fabs.c	1969-12-31 16:00:00.000000000 -0800
+++ sysdeps/m68k/coldfire/fpu/s_fabs.c	2006-08-10 11:02:58.000000000 -0700
@@ -0,0 +1,29 @@
+/* Copyright (C) 2006 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
+
+double
+__fabs (double x)
+{
+  asm ("fdabs.d %1,%0" : "=f" (x) : "fm" (x));
+  return x;
+}
+weak_alias (__fabs, fabs)
+#ifdef NO_LONG_DOUBLE
+strong_alias (__fabs, __fabsl)
+weak_alias (__fabs, fabsl)
+#endif
--- sysdeps/m68k/coldfire/fpu/s_fabsf.c	1969-12-31 16:00:00.000000000 -0800
+++ sysdeps/m68k/coldfire/fpu/s_fabsf.c	2006-08-10 05:18:01.000000000 -0700
@@ -0,0 +1,25 @@
+/* Copyright (C) 2006 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
+
+float
+__fabsf (float x)
+{
+  asm ("fsabs.s %1,%0" : "=f" (x) : "dm" (x));
+  return x;
+}
+weak_alias (__fabsf, fabsf)
--- sysdeps/m68k/coldfire/fpu/s_lrint.c	1969-12-31 16:00:00.000000000 -0800
+++ sysdeps/m68k/coldfire/fpu/s_lrint.c	2006-08-11 02:10:59.000000000 -0700
@@ -0,0 +1,30 @@
+/* Copyright (C) 2006 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
+
+long int
+__lrint (double x)
+{
+  long int result;
+  asm ("fmove.l %1,%0" : "=dm" (result) : "f" (x));
+  return result;
+}
+weak_alias (__lrint, lrint)
+#ifdef NO_LONG_DOUBLE
+strong_alias (__lrint, __lrintl)
+weak_alias (__lrint, lrintl)
+#endif
--- sysdeps/m68k/coldfire/fpu/s_lrintf.c	1969-12-31 16:00:00.000000000 -0800
+++ sysdeps/m68k/coldfire/fpu/s_lrintf.c	2006-08-11 02:11:11.000000000 -0700
@@ -0,0 +1,26 @@
+/* Copyright (C) 2006 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
+
+long int
+__lrintf (float x)
+{
+  long int result;
+  asm ("fmove.l %1,%0" : "=dm" (result) : "f" (x));
+  return result;
+}
+weak_alias (__lrintf, lrintf)
--- sysdeps/m68k/coldfire/fpu/s_rint.c	1969-12-31 16:00:00.000000000 -0800
+++ sysdeps/m68k/coldfire/fpu/s_rint.c	2006-08-10 05:12:15.000000000 -0700
@@ -0,0 +1,29 @@
+/* Copyright (C) 2006 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
+
+double
+__rint (double x)
+{
+  asm ("fint.d %1,%0" : "=f" (x) : "fm" (x));
+  return x;
+}
+weak_alias (__rint, rint)
+#ifdef NO_LONG_DOUBLE
+strong_alias (__rint, __rintl)
+weak_alias (__rint, rintl)
+#endif
--- sysdeps/m68k/coldfire/fpu/s_rintf.c	1969-12-31 16:00:00.000000000 -0800
+++ sysdeps/m68k/coldfire/fpu/s_rintf.c	2006-08-15 05:27:02.000000000 -0700
@@ -0,0 +1,26 @@
+/* Copyright (C) 2006 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
+
+float
+__rintf (float x)
+{
+  double result;
+  asm ("fint.s %1,%0" : "=f" (result) : "dm" (x));
+  return (float) result;
+}
+weak_alias (__rintf, rintf)
--- sysdeps/m68k/coldfire/fpu/s_sin.c	1969-12-31 16:00:00.000000000 -0800
+++ sysdeps/m68k/coldfire/fpu/s_sin.c	2006-08-10 11:04:41.000000000 -0700
@@ -0,0 +1,27 @@
+/* Copyright (C) 2006 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
+
+/* This file exists purely to redefine NAN.  */
+#include "endian.h"
+#include <sysdeps/ieee754/dbl-64/mydefs.h>
+#include <sysdeps/ieee754/dbl-64/usncs.h>
+
+#define NAN NAN_cf
+const static mynumber NAN = {{0x7fffffff, 0xffffffff}};
+
+#include <sysdeps/ieee754/dbl-64/s_sin.c>
--- sysdeps/m68k/coldfire/fpu/u_remainder.c	1969-12-31 16:00:00.000000000 -0800
+++ sysdeps/m68k/coldfire/fpu/u_remainder.c	2006-08-10 11:04:51.000000000 -0700
@@ -0,0 +1,29 @@
+/* Copyright (C) 2006 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
+
+/* This file exists purely to redefine NAN and nNAN.  */
+#include "endian.h"
+#include <sysdeps/ieee754/dbl-64/mydefs.h>
+#include <sysdeps/ieee754/dbl-64/urem.h>
+
+#define NAN NAN_cf
+#define nNAN nNAN_cf
+const static mynumber NAN = {{0x7fffffff, 0xffffffff}};
+const static mynumber nNAN = {{0xffffffff, 0xffffffff}};
+
+#include <sysdeps/ieee754/dbl-64/u_remainder.c>
--- sysdeps/m68k/coldfire/shlib-versions	1969-12-31 16:00:00.000000000 -0800
+++ sysdeps/m68k/coldfire/shlib-versions	2006-07-06 05:37:00.000000000 -0700
@@ -0,0 +1 @@
+m68k-.*-linux.*         DEFAULT                 GLIBC_2.4
