From bdbc603c545c3b9f5ed3e198c74ea83e482252cd Mon Sep 17 00:00:00 2001 From: Waldemar Brodkorb Date: Fri, 11 Aug 2023 06:38:32 +0200 Subject: glibc: fix m68k compile for m68040 cpu See here for details: https://sourceware.org/bugzilla/show_bug.cgi?id=30740 --- toolchain/glibc/patches/2.38/m68k-m68040.patch | 231 +++++++++++++++++++++++++ 1 file changed, 231 insertions(+) create mode 100644 toolchain/glibc/patches/2.38/m68k-m68040.patch (limited to 'toolchain') diff --git a/toolchain/glibc/patches/2.38/m68k-m68040.patch b/toolchain/glibc/patches/2.38/m68k-m68040.patch new file mode 100644 index 000000000..7631a00f6 --- /dev/null +++ b/toolchain/glibc/patches/2.38/m68k-m68040.patch @@ -0,0 +1,231 @@ +diff -Nur glibc-2.38.orig/sysdeps/m68k/m680x0/bits/flt-eval-method.h glibc-2.38/sysdeps/m68k/m680x0/bits/flt-eval-method.h +--- glibc-2.38.orig/sysdeps/m68k/m680x0/bits/flt-eval-method.h 2023-07-31 19:54:16.000000000 +0200 ++++ glibc-2.38/sysdeps/m68k/m680x0/bits/flt-eval-method.h 1970-01-01 01:00:00.000000000 +0100 +@@ -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 +- . */ +- +-#ifndef _MATH_H +-# error "Never use directly; include 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 -Nur glibc-2.38.orig/sysdeps/m68k/m680x0/lshift.S glibc-2.38/sysdeps/m68k/m680x0/lshift.S +--- glibc-2.38.orig/sysdeps/m68k/m680x0/lshift.S 2023-07-31 19:54:16.000000000 +0200 ++++ glibc-2.38/sysdeps/m68k/m680x0/lshift.S 1970-01-01 01:00:00.000000000 +0100 +@@ -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 . */ +- +-/* +- 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 -Nur glibc-2.38.orig/sysdeps/m68k/m680x0/m68020/wordcopy.S glibc-2.38/sysdeps/m68k/m680x0/m68020/wordcopy.S +--- glibc-2.38.orig/sysdeps/m68k/m680x0/m68020/wordcopy.S 2023-07-31 19:54:16.000000000 +0200 ++++ glibc-2.38/sysdeps/m68k/m680x0/m68020/wordcopy.S 1970-01-01 01:00:00.000000000 +0100 +@@ -1 +0,0 @@ +-/* Empty, not needed. */ +diff -Nur glibc-2.38.orig/sysdeps/m68k/wordcopy.c glibc-2.38/sysdeps/m68k/wordcopy.c +--- glibc-2.38.orig/sysdeps/m68k/wordcopy.c 1970-01-01 01:00:00.000000000 +0100 ++++ glibc-2.38/sysdeps/m68k/wordcopy.c 2023-08-10 16:23:10.972526508 +0200 +@@ -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 ++ . */ ++ ++#if !defined(__mc68020__) && !defined(mc68020) ++#include ++#endif -- cgit v1.2.3