diff --git a/package/glibc/0001-m68k-fix-compile-and-runtime-issues-targeting-m68k-m.patch b/package/glibc/0001-m68k-fix-compile-and-runtime-issues-targeting-m68k-m.patch
new file mode 100644
index 0000000000..8ff2a8936b
--- /dev/null
+++ b/package/glibc/0001-m68k-fix-compile-and-runtime-issues-targeting-m68k-m.patch
@@ -0,0 +1,261 @@
+From c7b833c812a3e6aac9fcbceaf1e6e1700d4c994d Mon Sep 17 00:00:00 2001
+From: Waldemar Brodkorb <wbx@openadk.org>
+Date: Fri, 11 Aug 2023 04:33:29 +0200
+Subject: [PATCH] m68k: fix compile and runtime issues targeting m68k
+ m68040 cpu
+
+Signed-off-by: Waldemar Brodkorb <wbx@openadk.org>
+Upstream: https://sourceware.org/bugzilla/show_bug.cgi?id=30740
+---
+ sysdeps/m68k/m680x0/bits/flt-eval-method.h |  25 ---
+ sysdeps/m68k/m680x0/lshift.S               | 168 ---------------------
+ sysdeps/m68k/m680x0/m68020/wordcopy.S      |   1 -
+ sysdeps/m68k/wordcopy.c                    |  21 +++
+ 4 files changed, 21 insertions(+), 194 deletions(-)
+ delete mode 100644 sysdeps/m68k/m680x0/bits/flt-eval-method.h
+ delete mode 100644 sysdeps/m68k/m680x0/lshift.S
+ delete mode 100644 sysdeps/m68k/m680x0/m68020/wordcopy.S
+ create mode 100644 sysdeps/m68k/wordcopy.c
+
+diff --git a/sysdeps/m68k/m680x0/bits/flt-eval-method.h b/sysdeps/m68k/m680x0/bits/flt-eval-method.h
+deleted file mode 100644
+index bbee583a4f..0000000000
+--- a/sysdeps/m68k/m680x0/bits/flt-eval-method.h
++++ /dev/null
+@@ -1,25 +0,0 @@
+-/* Define __GLIBC_FLT_EVAL_METHOD.  M68K version.
+-   Copyright (C) 2016-2023 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, see
+-   <https://www.gnu.org/licenses/>.  */
+-
+-#ifndef _MATH_H
+-# error "Never use <bits/flt-eval-method.h> directly; include <math.h> instead."
+-#endif
+-
+-/* The m68k FPUs evaluate all values in the 96-bit floating-point
+-   format which is also available for the user as 'long double'.  */
+-#define __GLIBC_FLT_EVAL_METHOD	2
+diff --git a/sysdeps/m68k/m680x0/lshift.S b/sysdeps/m68k/m680x0/lshift.S
+deleted file mode 100644
+index 2aee10348e..0000000000
+--- a/sysdeps/m68k/m680x0/lshift.S
++++ /dev/null
+@@ -1,168 +0,0 @@
+-/* mc68020 __mpn_lshift -- Shift left a low-level natural-number integer.
+-
+-Copyright (C) 1996-2023 Free Software Foundation, Inc.
+-
+-This file is part of the GNU MP Library.
+-
+-The GNU MP 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 MP 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 MP Library.  If not, see <https://www.gnu.org/licenses/>.  */
+-
+-/*
+-  INPUT PARAMETERS
+-  res_ptr	(sp + 4)
+-  s_ptr		(sp + 8)
+-  s_size	(sp + 16)
+-  cnt		(sp + 12)
+-*/
+-
+-#include "sysdep.h"
+-#include "asm-syntax.h"
+-
+-#define res_ptr a1
+-#define s_ptr a0
+-#define s_size d6
+-#define cnt d4
+-
+-	TEXT
+-ENTRY(__mpn_lshift)
+-
+-/* Save used registers on the stack.  */
+-	moveml	R(d2)-R(d6)/R(a2),MEM_PREDEC(sp)
+-	cfi_adjust_cfa_offset (6*4)
+-	cfi_rel_offset (R(d2), 0)
+-	cfi_rel_offset (R(d3), 4)
+-	cfi_rel_offset (R(d4), 8)
+-	cfi_rel_offset (R(d5), 12)
+-	cfi_rel_offset (R(d6), 16)
+-	cfi_rel_offset (R(a2), 20)
+-
+-/* Copy the arguments to registers.  */
+-	movel	MEM_DISP(sp,28),R(res_ptr)
+-	movel	MEM_DISP(sp,32),R(s_ptr)
+-	movel	MEM_DISP(sp,36),R(s_size)
+-	movel	MEM_DISP(sp,40),R(cnt)
+-
+-	moveql	#1,R(d5)
+-	cmpl	R(d5),R(cnt)
+-	bne	L(Lnormal)
+-	cmpl	R(s_ptr),R(res_ptr)
+-	bls	L(Lspecial)		/* jump if s_ptr >= res_ptr */
+-#if (defined (__mc68020__) || defined (__NeXT__) || defined(mc68020))
+-	lea	MEM_INDX1(s_ptr,s_size,l,4),R(a2)
+-#else /* not mc68020 */
+-	movel	R(s_size),R(d0)
+-	asll	#2,R(d0)
+-	lea	MEM_INDX(s_ptr,d0,l),R(a2)
+-#endif
+-	cmpl	R(res_ptr),R(a2)
+-	bls	L(Lspecial)		/* jump if res_ptr >= s_ptr + s_size */
+-
+-L(Lnormal:)
+-	moveql	#32,R(d5)
+-	subl	R(cnt),R(d5)
+-
+-#if (defined (__mc68020__) || defined (__NeXT__) || defined(mc68020))
+-	lea	MEM_INDX1(s_ptr,s_size,l,4),R(s_ptr)
+-	lea	MEM_INDX1(res_ptr,s_size,l,4),R(res_ptr)
+-#else /* not mc68000 */
+-	movel	R(s_size),R(d0)
+-	asll	#2,R(d0)
+-	addl	R(s_size),R(s_ptr)
+-	addl	R(s_size),R(res_ptr)
+-#endif
+-	movel	MEM_PREDEC(s_ptr),R(d2)
+-	movel	R(d2),R(d0)
+-	lsrl	R(d5),R(d0)		/* compute carry limb */
+-
+-	lsll	R(cnt),R(d2)
+-	movel	R(d2),R(d1)
+-	subql	#1,R(s_size)
+-	beq	L(Lend)
+-	lsrl	#1,R(s_size)
+-	bcs	L(L1)
+-	subql	#1,R(s_size)
+-
+-L(Loop:)
+-	movel	MEM_PREDEC(s_ptr),R(d2)
+-	movel	R(d2),R(d3)
+-	lsrl	R(d5),R(d3)
+-	orl	R(d3),R(d1)
+-	movel	R(d1),MEM_PREDEC(res_ptr)
+-	lsll	R(cnt),R(d2)
+-L(L1:)
+-	movel	MEM_PREDEC(s_ptr),R(d1)
+-	movel	R(d1),R(d3)
+-	lsrl	R(d5),R(d3)
+-	orl	R(d3),R(d2)
+-	movel	R(d2),MEM_PREDEC(res_ptr)
+-	lsll	R(cnt),R(d1)
+-
+-	dbf	R(s_size),L(Loop)
+-	subl	#0x10000,R(s_size)
+-	bcc	L(Loop)
+-
+-L(Lend:)
+-	movel	R(d1),MEM_PREDEC(res_ptr) /* store least significant limb */
+-
+-/* Restore used registers from stack frame.  */
+-	moveml	MEM_POSTINC(sp),R(d2)-R(d6)/R(a2)
+-	cfi_remember_state
+-	cfi_adjust_cfa_offset (-6*4)
+-	cfi_restore (R(d2))
+-	cfi_restore (R(d3))
+-	cfi_restore (R(d4))
+-	cfi_restore (R(d5))
+-	cfi_restore (R(d6))
+-	cfi_restore (R(a2))
+-	rts
+-
+-/* We loop from least significant end of the arrays, which is only
+-   permissible if the source and destination don't overlap, since the
+-   function is documented to work for overlapping source and destination.  */
+-
+-	cfi_restore_state
+-L(Lspecial:)
+-	clrl	R(d0)			/* initialize carry */
+-	eorw	#1,R(s_size)
+-	lsrl	#1,R(s_size)
+-	bcc	L(LL1)
+-	subql	#1,R(s_size)
+-
+-L(LLoop:)
+-	movel	MEM_POSTINC(s_ptr),R(d2)
+-	addxl	R(d2),R(d2)
+-	movel	R(d2),MEM_POSTINC(res_ptr)
+-L(LL1:)
+-	movel	MEM_POSTINC(s_ptr),R(d2)
+-	addxl	R(d2),R(d2)
+-	movel	R(d2),MEM_POSTINC(res_ptr)
+-
+-	dbf	R(s_size),L(LLoop)
+-	addxl	R(d0),R(d0)		/* save cy in lsb */
+-	subl	#0x10000,R(s_size)
+-	bcs	L(LLend)
+-	lsrl	#1,R(d0)		/* restore cy */
+-	bra	L(LLoop)
+-
+-L(LLend:)
+-/* Restore used registers from stack frame.  */
+-	moveml	MEM_POSTINC(sp),R(d2)-R(d6)/R(a2)
+-	cfi_adjust_cfa_offset (-6*4)
+-	cfi_restore (R(d2))
+-	cfi_restore (R(d3))
+-	cfi_restore (R(d4))
+-	cfi_restore (R(d5))
+-	cfi_restore (R(d6))
+-	cfi_restore (R(a2))
+-	rts
+-END(__mpn_lshift)
+diff --git a/sysdeps/m68k/m680x0/m68020/wordcopy.S b/sysdeps/m68k/m680x0/m68020/wordcopy.S
+deleted file mode 100644
+index 4fb1a4518f..0000000000
+--- a/sysdeps/m68k/m680x0/m68020/wordcopy.S
++++ /dev/null
+@@ -1 +0,0 @@
+-/* Empty, not needed.  */
+diff --git a/sysdeps/m68k/wordcopy.c b/sysdeps/m68k/wordcopy.c
+new file mode 100644
+index 0000000000..1ee1149add
+--- /dev/null
++++ b/sysdeps/m68k/wordcopy.c
+@@ -0,0 +1,21 @@
++/* Definitions for memory copy functions.  Motorola 68020 version.                                                                                                                                                 
++   Copyright (C) 2023 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, see                                                                                                                                                              
++   <https://www.gnu.org/licenses/>.  */                                                                                                                                                                            
++                                                                                                                                                                                                                   
++#if !defined(__mc68020__) && !defined(mc68020)                                                                                                                                                                     
++#include <string/wordcopy.c>                                                                                                                                                                                       
++#endif 
+-- 
+2.39.2
+
diff --git a/package/glibc/Config.in b/package/glibc/Config.in
index 71c50504ac..bfe83ab6f1 100644
--- a/package/glibc/Config.in
+++ b/package/glibc/Config.in
@@ -5,6 +5,7 @@ config BR2_PACKAGE_GLIBC_ARCH_SUPPORTS
 	default y if BR2_aarch64
 	default y if BR2_aarch64_be
 	default y if BR2_i386
+	default y if BR2_m68k_m68k
 	default y if BR2_mips
 	default y if BR2_mipsel
 	default y if BR2_mips64
