--- a/external/gpl3/gcc/dist/libgcc/config/m68k/fpgnulib.c	Tue Sep 02 00:24:10 2025 +0000
+++ b/external/gpl3/gcc/dist/libgcc/config/m68k/fpgnulib.c	Wed Sep 03 11:42:21 2025 +1000
@@ -138,6 +138,7 @@ int
   return 0;
 }
 
+#ifndef LIBCSOFTFLOAT
 /* convert unsigned int to double */
 double
 __floatunsidf (unsigned long a1)
@@ -411,6 +412,7 @@ long
   return __fixdfsi (foo);
 }
 
+#endif
 #else /* EXTFLOAT */
 
 /* We do not need these routines for coldfire, as it has no extended
@@ -447,6 +449,7 @@ int
   return 0;
 }
 
+#ifndef LIBCSOFTFLOAT
 /* convert double to long double */
 long double
 __extenddfxf2 (double d)
@@ -615,6 +618,7 @@ long double
 {
   return (double) x1 / (double) x2;
 }
+#endif
 
 long double
 __negxf2 (long double x1)
@@ -628,11 +632,13 @@ long
   return __cmpdf2 ((double) x1, (double) x2);
 }
 
+#ifndef LIBCSOFTFLOAT
 long
 __eqxf2 (long double x1, long double x2)
 {
   return __cmpdf2 ((double) x1, (double) x2);
 }
+#endif
 
 long
 __nexf2 (long double x1, long double x2)
@@ -640,6 +646,7 @@ long
   return __cmpdf2 ((double) x1, (double) x2);
 }
 
+#ifndef LIBCSOFTFLOAT
 long
 __ltxf2 (long double x1, long double x2)
 {
@@ -651,6 +658,7 @@ long
 {
   return __cmpdf2 ((double) x1, (double) x2);
 }
+#endif
 
 long
 __gtxf2 (long double x1, long double x2)
--- a/external/gpl3/gcc/dist/libgcc/config/m68k/lb1sf68.S	Tue Sep 02 00:24:10 2025 +0000
+++ b/external/gpl3/gcc/dist/libgcc/config/m68k/lb1sf68.S	Wed Sep 03 11:42:21 2025 +1000
@@ -668,11 +668,13 @@ ROUND_TO_MINUS    = 3 | round result tow
 
 | Entry points:
 
+#ifndef  LIBCSOFTFLOAT
 	.globl SYM (__adddf3)
 	.globl SYM (__subdf3)
 	.globl SYM (__muldf3)
 	.globl SYM (__divdf3)
 	.globl SYM (__negdf2)
+#endif
 	.globl SYM (__cmpdf2)
 	.globl SYM (__cmpdf2_internal)
 	.hidden SYM (__cmpdf2_internal)
@@ -744,6 +746,7 @@ Ld$div$0:
 | in the register pair d0-d1. They also preserve all registers except 
 | d0-d1 and a0-a1.
 
+#ifndef  LIBCSOFTFLOAT
 |=============================================================================
 |                              __subdf3
 |=============================================================================
@@ -2296,6 +2299,7 @@ 1:	PICLEA	SYM (_fpCCR),a0
 	rts
 2:	bclr	IMM (31),d0
 	bra	1b
+#endif
 
 |=============================================================================
 |                              __cmpdf2
--- a/external/gpl3/gcc/lib/libgcc/Makefile.inc	Tue Sep 02 00:24:10 2025 +0000
+++ b/external/gpl3/gcc/lib/libgcc/Makefile.inc	Wed Sep 03 11:42:21 2025 +1000
@@ -149,6 +149,9 @@ BUILDSYMLINKS+=	${file} ${file:T:S/.asm$
 # XXX
 .if (${LIBGCC_MACHINE_ARCH} == "m68000" || ${LIBGCC_MACHINE_ARCH} == "m68k" || \
      ${LIBGCC_MACHINE_ARCH} == "coldfire")
+. if ${LIBCSOFTFLOAT} != "no"
+CPPFLAGS+= 	-DLIBCSOFTFLOAT=1
+. endif
 CPICFLAGS:=
 BUILDSYMLINKS+=	${DIST}/libgcc/config/m68k/fpgnulib.c fpgnulib.c
 BUILDSYMLINKS+=	${DIST}/libgcc/config/m68k/fpgnulib.c xfgnulib.c
--- a/external/gpl3/gcc/lib/libgcc/arch/m68k/defs.mk	Tue Sep 02 00:24:10 2025 +0000
+++ b/external/gpl3/gcc/lib/libgcc/arch/m68k/defs.mk	Wed Sep 03 11:42:21 2025 +1000
@@ -7,9 +7,15 @@ G_INTERNAL_CFLAGS=-g -O2 -O2  -DIN_GCC  
 G_LIB2ADD=${GNUHOSTDIST}/libgcc/config/m68k/fpgnulib.c xfgnulib.c enable-execute-stack.c
 G_LIB2ADDEH=${GNUHOSTDIST}/libgcc/unwind-dw2.c ${GNUHOSTDIST}/libgcc/unwind-dw2-fde-dip.c ${GNUHOSTDIST}/libgcc/unwind-sjlj.c ${GNUHOSTDIST}/libgcc/unwind-c.c ${GNUHOSTDIST}/libgcc/emutls.c
 G_LIB2ADD_ST=
+.if ${LIBCSOFTFLOAT} == "no"
 G_LIB1ASMFUNCS=_mulsi3 _udivsi3 _divsi3 _umodsi3 _modsi3 _floatex _float _double _eqdf2 _nedf2 _gtdf2 _gedf2 _ltdf2 _ledf2 _eqsf2 _nesf2 _gtsf2 _gesf2 _ltsf2 _lesf2
+.else
+G_LIB1ASMFUNCS=_floatex _double 
+.endif
 G_LIB1ASMSRC=m68k/lb1sf68.S
+.if ${LIBCSOFTFLOAT} == "no"
 G_LIB2_DIVMOD_FUNCS=_divdi3 _moddi3 _divmoddi4 _udivdi3 _umoddi3 _udivmoddi4 _udiv_w_sdiv
+.endif
 G_LIB2FUNCS_ST=_eprintf __gcc_bcmp
 G_LIB2FUNCS_EXTRA=
 G_LIBGCC2_CFLAGS=-O2  -DIN_GCC    -W -Wall -Wno-narrowing -Wwrite-strings -Wcast-qual -Wstrict-prototypes -Wmissing-prototypes -Wold-style-definition  -isystem ./include   -fPIC -g -DIN_LIBGCC2 -fbuilding-libgcc -fno-stack-protector 
--- a/lib/libc/arch/m68k/Makefile.inc	Tue Sep 02 00:24:10 2025 +0000
+++ b/lib/libc/arch/m68k/Makefile.inc	Wed Sep 03 11:42:21 2025 +1000
@@ -7,9 +7,13 @@ ASM+=	_lwp_getprivate.S mremap.S
 CPPFLAGS+= -I.		# for assym.h
 
 .if ${MKSOFTFLOAT} != "no"
+.  include <softfloat/Makefile.inc>
+.  if ${LIBCSOFTFLOAT} == "no"
 #CPPFLAGS+= -DSOFTFLOAT_NEED_FIXUNS
 CPPFLAGS+= -DSOFTFLOAT -DSOFTFLOATM68K_FOR_GCC
-.  include <softfloat/Makefile.inc>
+.  else
+CPPFLAGS+= -DSOFTFLOAT
+.  endif
 .elif ${MACHINE_ARCH} != "m68000"
 .PATH : ${ARCHDIR}/hardfloat
 .  include "${ARCHDIR}/hardfloat/Makefile.inc"
--- a/lib/libc/arch/m68k/softfloat/softfloat.h	Tue Sep 02 00:24:10 2025 +0000
+++ b/lib/libc/arch/m68k/softfloat/softfloat.h	Wed Sep 03 11:42:21 2025 +1000
@@ -216,7 +216,9 @@ flag float64_lt( float64, float64 );
 flag float64_eq_signaling( float64, float64 );
 flag float64_le_quiet( float64, float64 );
 flag float64_lt_quiet( float64, float64 );
+#if !defined(SOFTFLOAT_FOR_GCC) || defined(SOFTFLOATM68K_FOR_GCC)
 flag float64_is_signaling_nan( float64 );
+#endif
 
 #ifdef FLOATX80
 
--- a/regress/sys/kern/getcwd/Makefile	Tue Sep 02 00:24:10 2025 +0000
+++ b/regress/sys/kern/getcwd/Makefile	Wed Sep 03 11:42:21 2025 +1000
@@ -7,6 +7,13 @@ PROG=		getcwd
 SRCS=		getcwd.c old_getcwd.c
 WARNS=		1
 
+.include <bsd.own.mk>
+
+.if ${MKSOFTFLOAT} != "no" && ${LIBCSOFTFLOAT} == "no" \
+    && ${MACHINE_ARCH} == "m68k"
+LDFLAGS=	-Wl,--allow-multiple-definition
+.endif
+
 regress: ${PROG}
 	@./getcwd -r
 	@./getcwd -p
--- a/share/mk/bsd.own.mk	Tue Sep 02 00:24:10 2025 +0000
+++ b/share/mk/bsd.own.mk	Wed Sep 03 11:42:21 2025 +1000
@@ -1155,6 +1155,9 @@ MKCOMPATMODULES?=	yes
 MKCOMPATMODULES:=	no
 .endif
 
+# Prefer libc's softfloat.c
+LIBCSOFTFLOAT?= yes
+
 #
 # These platforms use softfloat by default.
 #
