diff options
Diffstat (limited to 'glibc/glibc-2.3.2/libgcc-compat-other.patch')
-rw-r--r-- | glibc/glibc-2.3.2/libgcc-compat-other.patch | 883 |
1 files changed, 883 insertions, 0 deletions
diff --git a/glibc/glibc-2.3.2/libgcc-compat-other.patch b/glibc/glibc-2.3.2/libgcc-compat-other.patch index e69de29bb2..3bd8721910 100644 --- a/glibc/glibc-2.3.2/libgcc-compat-other.patch +++ b/glibc/glibc-2.3.2/libgcc-compat-other.patch @@ -0,0 +1,883 @@ +--- glibc-2.3.1.old/sysdeps/arm/Dist 2002-08-27 21:06:52.000000000 +0900 ++++ glibc-2.3.1/sysdeps/arm/Dist 2003-03-01 00:29:42.000000000 +0900 +@@ -1,2 +1,3 @@ + ieee754.h + bits/link.h ++libgcc-compat.c +--- glibc-2.3.1.old/sysdeps/arm/Makefile 1970-01-01 09:00:00.000000000 +0900 ++++ glibc-2.3.1/sysdeps/arm/Makefile 2003-03-01 00:29:42.000000000 +0900 +@@ -0,0 +1,7 @@ ++ifeq ($(subdir),csu) ++ifeq (yes,$(build-shared)) ++# Compatibility ++sysdep_routines += libgcc-compat ++shared-only-routines += libgcc-compat ++endif ++endif +--- glibc-2.3.1.old/sysdeps/arm/Versions 1970-01-01 09:00:00.000000000 +0900 ++++ glibc-2.3.1/sysdeps/arm/Versions 2003-03-01 18:22:10.000000000 +0900 +@@ -0,0 +1,16 @@ ++libc { ++ GLIBC_2.0 { ++ # Functions from libgcc. ++ __ashldi3; __ashrdi3; ++ __cmpdi2; ++ __divsi3; ++ __fixdfdi; ++ __floatdidf; ++ __floatdisf; ++ __modsi3; ++ __muldi3; ++ __ucmpdi2; ++ __udivsi3; ++ __umodsi3; ++ } ++} +--- glibc-2.3.1.old/sysdeps/arm/libgcc-compat.c 1970-01-01 09:00:00.000000000 +0900 ++++ glibc-2.3.1/sysdeps/arm/libgcc-compat.c 2003-03-02 19:40:20.000000000 +0900 +@@ -0,0 +1,111 @@ ++/* pre-.hidden libgcc compatibility ++ Copyright (C) 2003 Free Software Foundation, Inc. ++ This file is part of the GNU C Library. ++ Contributed by GOTO Masanori <gotom@debian.org> ++ ++ 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 <stdint.h> ++#include <shlib-compat.h> ++ ++#if SHLIB_COMPAT(libc, GLIBC_2_0, GLIBC_2_2_6) ++ ++extern int64_t __ashldi3 (int64_t, int32_t); ++int64_t __ashldi3_internal (int64_t u, int32_t b) ++{ ++ return __ashldi3 (u, b); ++} ++symbol_version (__ashldi3_internal, __ashldi3, GLIBC_2.0); ++ ++extern int64_t __ashrdi3 (int64_t, int32_t); ++int32_t __ashrdi3_internal (int64_t u, int32_t b) ++{ ++ return __ashrdi3 (u, b); ++} ++symbol_version (__ashrdi3_internal, __ashrdi3, GLIBC_2.0); ++ ++extern int32_t __cmpdi2 (int64_t, int64_t); ++int32_t __cmpdi2_internal (int64_t u, int64_t v) ++{ ++ return __cmpdi2 (u, v); ++} ++symbol_version (__cmpdi2_internal, __cmpdi2, GLIBC_2.0); ++ ++extern int32_t __divsi3 (int32_t, int32_t); ++int32_t __divsi3_internal (int32_t u, int32_t v) ++{ ++ return __divsi3 (u, v); ++} ++symbol_version (__divsi3_internal, __divsi3, GLIBC_2.0); ++ ++extern int64_t __fixdfdi (double); ++int64_t __fixdfdi_internal (double d) ++{ ++ return __fixdfdi (d); ++} ++symbol_version (__fixdfdi_internal, __fixdfdi, GLIBC_2.0); ++ ++extern double __floatdidf (int64_t); ++double __floatdidf_internal (int64_t u) ++{ ++ return __floatdidf (u); ++} ++symbol_version (__floatdidf_internal, __floatdidf, GLIBC_2.0); ++ ++extern float __floatdisf (int64_t); ++float __floatdisf_internal (int64_t u) ++{ ++ return __floatdisf (u); ++} ++symbol_version (__floatdisf_internal, __floatdisf, GLIBC_2.0); ++ ++extern int32_t __modsi3 (int32_t, int32_t); ++int32_t __modsi3_internal (int32_t u, int32_t v) ++{ ++ return __modsi3 (u, v); ++} ++symbol_version (__modsi3_internal, __modsi3, GLIBC_2.0); ++ ++extern int64_t __muldi3 (int64_t, int64_t); ++int64_t __muldi3_internal (int64_t u, int64_t v) ++{ ++ return __muldi3 (u, v); ++} ++symbol_version (__muldi3_internal, __muldi3, GLIBC_2.0); ++ ++extern int32_t __ucmpdi2 (int64_t, int64_t); ++int32_t __ucmpdi2_internal (int64_t u, int64_t v) ++{ ++ return __ucmpdi2 (u, v); ++} ++symbol_version (__ucmpdi2_internal, __ucmpdi2, GLIBC_2.0); ++ ++extern int32_t __udivsi3 (int32_t, int32_t); ++int32_t __udivsi3_internal (int32_t u, int32_t v) ++{ ++ return __udivsi3 (u, v); ++} ++symbol_version (__udivsi3_internal, __udivsi3, GLIBC_2.0); ++ ++extern int32_t __umodsi3 (int32_t, int32_t); ++int32_t __umodsi3_internal (int32_t u, int32_t v) ++{ ++ return __umodsi3 (u, v); ++} ++symbol_version (__umodsi3_internal, __umodsi3, GLIBC_2.0); ++ ++#endif +--- glibc-2.3.1.old/sysdeps/ia64/Makefile 2002-05-15 05:46:15.000000000 +0900 ++++ glibc-2.3.1/sysdeps/ia64/Makefile 2003-03-04 00:51:34.000000000 +0900 +@@ -12,8 +12,8 @@ + + ifeq (yes,$(build-shared)) + # Compatibility +-sysdep_routines += ia64libgcc +-shared-only-routines += ia64libgcc ++sysdep_routines += libgcc-compat ++shared-only-routines += libgcc-compat + endif + endif + +--- glibc-2.3.1.old/sysdeps/ia64/Versions 2002-05-03 16:00:46.000000000 +0900 ++++ glibc-2.3.1/sysdeps/ia64/Versions 2003-03-04 01:14:39.000000000 +0900 +@@ -10,5 +10,9 @@ + # Functions from libgcc. + __divtf3; __divdf3; __divsf3; __divdi3; __moddi3; __udivdi3; __umoddi3; + __multi3; ++ __divsi3; ++ __modsi3; ++ __udivsi3; ++ __umodsi3; + } + } +--- glibc-2.3.1.old/sysdeps/ia64/ia64libgcc.S 2002-05-15 05:46:15.000000000 +0900 ++++ glibc-2.3.1/sysdeps/ia64/ia64libgcc.S 2003-03-04 00:51:34.000000000 +0900 +@@ -1,350 +0,0 @@ +-/* From the Intel IA-64 Optimization Guide, choose the minimum latency +- alternative. */ +- +-#include <sysdep.h> +-#undef ret +- +-#include <shlib-compat.h> +- +-#if SHLIB_COMPAT(libc, GLIBC_2_2, GLIBC_2_2_6) +- +-/* __divtf3 +- Compute a 80-bit IEEE double-extended quotient. +- farg0 holds the dividend. farg1 holds the divisor. */ +- +-ENTRY(___divtf3) +- cmp.eq p7, p0 = r0, r0 +- frcpa.s0 f10, p6 = farg0, farg1 +- ;; +-(p6) cmp.ne p7, p0 = r0, r0 +- .pred.rel.mutex p6, p7 +-(p6) fnma.s1 f11 = farg1, f10, f1 +-(p6) fma.s1 f12 = farg0, f10, f0 +- ;; +-(p6) fma.s1 f13 = f11, f11, f0 +-(p6) fma.s1 f14 = f11, f11, f11 +- ;; +-(p6) fma.s1 f11 = f13, f13, f11 +-(p6) fma.s1 f13 = f14, f10, f10 +- ;; +-(p6) fma.s1 f10 = f13, f11, f10 +-(p6) fnma.s1 f11 = farg1, f12, farg0 +- ;; +-(p6) fma.s1 f11 = f11, f10, f12 +-(p6) fnma.s1 f12 = farg1, f10, f1 +- ;; +-(p6) fma.s1 f10 = f12, f10, f10 +-(p6) fnma.s1 f12 = farg1, f11, farg0 +- ;; +-(p6) fma.s0 fret0 = f12, f10, f11 +-(p7) mov fret0 = f10 +- br.ret.sptk rp +-END(___divtf3) +- .symver ___divtf3, __divtf3@GLIBC_2.2 +- +-/* __divdf3 +- Compute a 64-bit IEEE double quotient. +- farg0 holds the dividend. farg1 holds the divisor. */ +- +-ENTRY(___divdf3) +- cmp.eq p7, p0 = r0, r0 +- frcpa.s0 f10, p6 = farg0, farg1 +- ;; +-(p6) cmp.ne p7, p0 = r0, r0 +- .pred.rel.mutex p6, p7 +-(p6) fmpy.s1 f11 = farg0, f10 +-(p6) fnma.s1 f12 = farg1, f10, f1 +- ;; +-(p6) fma.s1 f11 = f12, f11, f11 +-(p6) fmpy.s1 f13 = f12, f12 +- ;; +-(p6) fma.s1 f10 = f12, f10, f10 +-(p6) fma.s1 f11 = f13, f11, f11 +- ;; +-(p6) fmpy.s1 f12 = f13, f13 +-(p6) fma.s1 f10 = f13, f10, f10 +- ;; +-(p6) fma.d.s1 f11 = f12, f11, f11 +-(p6) fma.s1 f10 = f12, f10, f10 +- ;; +-(p6) fnma.d.s1 f8 = farg1, f11, farg0 +- ;; +-(p6) fma.d fret0 = f8, f10, f11 +-(p7) mov fret0 = f10 +- br.ret.sptk rp +- ;; +-END(___divdf3) +- .symver ___divdf3, __divdf3@GLIBC_2.2 +- +-/* __divsf3 +- Compute a 32-bit IEEE float quotient. +- farg0 holds the dividend. farg1 holds the divisor. */ +- +-ENTRY(___divsf3) +- cmp.eq p7, p0 = r0, r0 +- frcpa.s0 f10, p6 = farg0, farg1 +- ;; +-(p6) cmp.ne p7, p0 = r0, r0 +- .pred.rel.mutex p6, p7 +-(p6) fmpy.s1 f8 = farg0, f10 +-(p6) fnma.s1 f9 = farg1, f10, f1 +- ;; +-(p6) fma.s1 f8 = f9, f8, f8 +-(p6) fmpy.s1 f9 = f9, f9 +- ;; +-(p6) fma.s1 f8 = f9, f8, f8 +-(p6) fmpy.s1 f9 = f9, f9 +- ;; +-(p6) fma.d.s1 f10 = f9, f8, f8 +- ;; +-(p6) fnorm.s.s0 fret0 = f10 +-(p7) mov fret0 = f10 +- br.ret.sptk rp +- ;; +-END(___divsf3) +- .symver ___divsf3, __divsf3@GLIBC_2.2 +- +-/* __divdi3 +- Compute a 64-bit integer quotient. +- in0 holds the dividend. in1 holds the divisor. */ +- +-ENTRY(___divdi3) +- .regstk 2,0,0,0 +- /* Transfer inputs to FP registers. */ +- setf.sig f8 = in0 +- setf.sig f9 = in1 +- ;; +- /* Convert the inputs to FP, so that they won't be treated as +- unsigned. */ +- fcvt.xf f8 = f8 +- fcvt.xf f9 = f9 +- ;; +- /* Compute the reciprocal approximation. */ +- frcpa.s1 f10, p6 = f8, f9 +- ;; +- /* 3 Newton-Raphson iterations. */ +-(p6) fnma.s1 f11 = f9, f10, f1 +-(p6) fmpy.s1 f12 = f8, f10 +- ;; +-(p6) fmpy.s1 f13 = f11, f11 +-(p6) fma.s1 f12 = f11, f12, f12 +- ;; +-(p6) fma.s1 f10 = f11, f10, f10 +-(p6) fma.s1 f11 = f13, f12, f12 +- ;; +-(p6) fma.s1 f10 = f13, f10, f10 +-(p6) fnma.s1 f12 = f9, f11, f8 +- ;; +-(p6) fma.s1 f10 = f12, f10, f11 +- ;; +- /* Round quotient to an integer. */ +- fcvt.fx.trunc.s1 f10 = f10 +- ;; +- /* Transfer result to GP registers. */ +- getf.sig ret0 = f10 +- br.ret.sptk rp +- ;; +-END(___divdi3) +- .symver ___divdi3, __divdi3@GLIBC_2.2 +- +-/* __moddi3 +- Compute a 64-bit integer modulus. +- in0 holds the dividend (a). in1 holds the divisor (b). */ +- +-ENTRY(___moddi3) +- .regstk 2,0,0,0 +- /* Transfer inputs to FP registers. */ +- setf.sig f14 = in0 +- setf.sig f9 = in1 +- ;; +- /* Convert the inputs to FP, so that they won't be treated as +- unsigned. */ +- fcvt.xf f8 = f14 +- fcvt.xf f9 = f9 +- ;; +- /* Compute the reciprocal approximation. */ +- frcpa.s1 f10, p6 = f8, f9 +- ;; +- /* 3 Newton-Raphson iterations. */ +-(p6) fmpy.s1 f12 = f8, f10 +-(p6) fnma.s1 f11 = f9, f10, f1 +- ;; +-(p6) fma.s1 f12 = f11, f12, f12 +-(p6) fmpy.s1 f13 = f11, f11 +- ;; +-(p6) fma.s1 f10 = f11, f10, f10 +-(p6) fma.s1 f11 = f13, f12, f12 +- ;; +- sub in1 = r0, in1 +-(p6) fma.s1 f10 = f13, f10, f10 +-(p6) fnma.s1 f12 = f9, f11, f8 +- ;; +- setf.sig f9 = in1 +-(p6) fma.s1 f10 = f12, f10, f11 +- ;; +- fcvt.fx.trunc.s1 f10 = f10 +- ;; +- /* r = q * (-b) + a */ +- xma.l f10 = f10, f9, f14 +- ;; +- /* Transfer result to GP registers. */ +- getf.sig ret0 = f10 +- br.ret.sptk rp +- ;; +-END(___moddi3) +- .symver ___moddi3, __moddi3@GLIBC_2.2 +- +-/* __udivdi3 +- Compute a 64-bit unsigned integer quotient. +- in0 holds the dividend. in1 holds the divisor. */ +- +-ENTRY(___udivdi3) +- .regstk 2,0,0,0 +- /* Transfer inputs to FP registers. */ +- setf.sig f8 = in0 +- setf.sig f9 = in1 +- ;; +- /* Convert the inputs to FP, to avoid FP software-assist faults. */ +- fcvt.xuf.s1 f8 = f8 +- fcvt.xuf.s1 f9 = f9 +- ;; +- /* Compute the reciprocal approximation. */ +- frcpa.s1 f10, p6 = f8, f9 +- ;; +- /* 3 Newton-Raphson iterations. */ +-(p6) fnma.s1 f11 = f9, f10, f1 +-(p6) fmpy.s1 f12 = f8, f10 +- ;; +-(p6) fmpy.s1 f13 = f11, f11 +-(p6) fma.s1 f12 = f11, f12, f12 +- ;; +-(p6) fma.s1 f10 = f11, f10, f10 +-(p6) fma.s1 f11 = f13, f12, f12 +- ;; +-(p6) fma.s1 f10 = f13, f10, f10 +-(p6) fnma.s1 f12 = f9, f11, f8 +- ;; +-(p6) fma.s1 f10 = f12, f10, f11 +- ;; +- /* Round quotient to an unsigned integer. */ +- fcvt.fxu.trunc.s1 f10 = f10 +- ;; +- /* Transfer result to GP registers. */ +- getf.sig ret0 = f10 +- br.ret.sptk rp +- ;; +-END(___udivdi3) +- .symver ___udivdi3, __udivdi3@GLIBC_2.2 +- +-/* __umoddi3 +- Compute a 64-bit unsigned integer modulus. +- in0 holds the dividend (a). in1 holds the divisor (b). */ +- +-ENTRY(___umoddi3) +- .regstk 2,0,0,0 +- /* Transfer inputs to FP registers. */ +- setf.sig f14 = in0 +- setf.sig f9 = in1 +- ;; +- /* Convert the inputs to FP, to avoid FP software assist faults. */ +- fcvt.xuf.s1 f8 = f14 +- fcvt.xuf.s1 f9 = f9 +- ;; +- /* Compute the reciprocal approximation. */ +- frcpa.s1 f10, p6 = f8, f9 +- ;; +- /* 3 Newton-Raphson iterations. */ +-(p6) fmpy.s1 f12 = f8, f10 +-(p6) fnma.s1 f11 = f9, f10, f1 +- ;; +-(p6) fma.s1 f12 = f11, f12, f12 +-(p6) fmpy.s1 f13 = f11, f11 +- ;; +-(p6) fma.s1 f10 = f11, f10, f10 +-(p6) fma.s1 f11 = f13, f12, f12 +- ;; +- sub in1 = r0, in1 +-(p6) fma.s1 f10 = f13, f10, f10 +-(p6) fnma.s1 f12 = f9, f11, f8 +- ;; +- setf.sig f9 = in1 +-(p6) fma.s1 f10 = f12, f10, f11 +- ;; +- /* Round quotient to an unsigned integer. */ +- fcvt.fxu.trunc.s1 f10 = f10 +- ;; +- /* r = q * (-b) + a */ +- xma.l f10 = f10, f9, f14 +- ;; +- /* Transfer result to GP registers. */ +- getf.sig ret0 = f10 +- br.ret.sptk rp +- ;; +-END(___umoddi3) +- .symver ___umoddi3, __umoddi3@GLIBC_2.2 +- +-/* __multi3 +- Compute a 128-bit multiply of 128-bit multiplicands. +- in0/in1 holds one multiplicand (a), in2/in3 holds the other one (b). */ +- +-ENTRY(___multi3) +- .regstk 4,0,0,0 +- setf.sig f6 = in1 +- movl r19 = 0xffffffff +- setf.sig f7 = in2 +- ;; +- and r14 = r19, in0 +- ;; +- setf.sig f10 = r14 +- and r14 = r19, in2 +- xmpy.l f9 = f6, f7 +- ;; +- setf.sig f6 = r14 +- shr.u r14 = in0, 32 +- ;; +- setf.sig f7 = r14 +- shr.u r14 = in2, 32 +- ;; +- setf.sig f8 = r14 +- xmpy.l f11 = f10, f6 +- xmpy.l f6 = f7, f6 +- ;; +- getf.sig r16 = f11 +- xmpy.l f7 = f7, f8 +- ;; +- shr.u r14 = r16, 32 +- and r16 = r19, r16 +- getf.sig r17 = f6 +- setf.sig f6 = in0 +- ;; +- setf.sig f11 = r14 +- getf.sig r21 = f7 +- setf.sig f7 = in3 +- ;; +- xma.l f11 = f10, f8, f11 +- xma.l f6 = f6, f7, f9 +- ;; +- getf.sig r18 = f11 +- ;; +- add r18 = r18, r17 +- ;; +- and r15 = r19, r18 +- cmp.ltu p7, p6 = r18, r17 +- ;; +- getf.sig r22 = f6 +-(p7) adds r14 = 1, r19 +- ;; +-(p7) add r21 = r21, r14 +- shr.u r14 = r18, 32 +- shl r15 = r15, 32 +- ;; +- add r20 = r21, r14 +- ;; +- add ret0 = r15, r16 +- add ret1 = r22, r20 +- br.ret.sptk rp +- ;; +-END(___multi3) +- .symver ___multi3, __multi3@GLIBC_2.2 +- +-#endif +--- glibc-2.3.1.old/sysdeps/ia64/libgcc-compat.c 1970-01-01 09:00:00.000000000 +0900 ++++ glibc-2.3.1/sysdeps/ia64/libgcc-compat.c 2003-03-04 02:24:15.000000000 +0900 +@@ -0,0 +1,112 @@ ++/* pre-.hidden libgcc compatibility ++ Copyright (C) 2002 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 <stdint.h> ++#include <shlib-compat.h> ++ ++#if SHLIB_COMPAT(libc, GLIBC_2_2, GLIBC_2_2_6) ++ ++typedef int int128_t __attribute__((__mode__(TI))); ++ ++extern long double __divtf3 (long double, long double) attribute_hidden; ++long double INTUSE (__divtf3) (long double x, long double y) ++{ ++ return __divtf3 (x, y); ++} ++symbol_version (INTUSE (__divtf3), __divtf3, GLIBC_2.2); ++ ++extern double __divdf3 (double, double) attribute_hidden; ++double INTUSE (__divdf3) (double x, double y) ++{ ++ return __divdf3 (x, y); ++} ++symbol_version (INTUSE (__divdf3), __divdf3, GLIBC_2.2); ++ ++extern float __divsf3 (float, float) attribute_hidden; ++float INTUSE (__divsf3) (float x, float y) ++{ ++ return __divsf3 (x, y); ++} ++symbol_version (INTUSE (__divsf3), __divsf3, GLIBC_2.2); ++ ++extern int64_t __divdi3 (int64_t, int64_t) attribute_hidden; ++int64_t INTUSE (__divdi3) (int64_t x, int64_t y) ++{ ++ return __divdi3 (x, y); ++} ++symbol_version (INTUSE (__divdi3), __divdi3, GLIBC_2.2); ++ ++extern int64_t __moddi3 (int64_t, int64_t) attribute_hidden; ++int64_t INTUSE (__moddi3) (int64_t x, int64_t y) ++{ ++ return __moddi3 (x, y); ++} ++symbol_version (INTUSE (__moddi3), __moddi3, GLIBC_2.2); ++ ++extern uint64_t __udivdi3 (uint64_t, uint64_t) attribute_hidden; ++uint64_t INTUSE (__udivdi3) (uint64_t x, uint64_t y) ++{ ++ return __udivdi3 (x, y); ++} ++symbol_version (INTUSE (__udivdi3), __udivdi3, GLIBC_2.2); ++ ++extern uint64_t __umoddi3 (uint64_t, uint64_t) attribute_hidden; ++uint64_t INTUSE (__umoddi3) (uint64_t x, uint64_t y) ++{ ++ return __umoddi3 (x, y); ++} ++symbol_version (INTUSE (__umoddi3), __umoddi3, GLIBC_2.2); ++ ++extern int128_t __multi3 (int128_t, int128_t) attribute_hidden; ++int128_t INTUSE (__multi3) (int128_t x, int128_t y) ++{ ++ return __multi3 (x, y); ++} ++symbol_version (INTUSE (__multi3), __multi3, GLIBC_2.2); ++ ++extern int64_t __divsi3 (int64_t, int64_t) attribute_hidden; ++int64_t INTUSE (__divsi3) (int64_t x, int64_t y) ++{ ++ return __divsi3 (x, y); ++} ++symbol_version (INTUSE (__divsi3), __divsi3, GLIBC_2.2); ++ ++extern int64_t __modsi3 (int64_t, int64_t) attribute_hidden; ++int64_t INTUSE (__modsi3) (int64_t x, int64_t y) ++{ ++ return __modsi3 (x, y); ++} ++symbol_version (INTUSE (__modsi3), __modsi3, GLIBC_2.2); ++ ++extern uint64_t __udivsi3 (uint64_t, uint64_t) attribute_hidden; ++uint64_t INTUSE (__udivsi3) (uint64_t x, uint64_t y) ++{ ++ return __udivsi3 (x, y); ++} ++symbol_version (INTUSE (__udivsi3), __udivsi3, GLIBC_2.2); ++ ++extern uint64_t __umodsi3 (uint64_t, uint64_t) attribute_hidden; ++uint64_t INTUSE (__umodsi3) (uint64_t x, uint64_t y) ++{ ++ return __umodsi3 (x, y); ++} ++symbol_version (INTUSE (__umodsi3), __umodsi3, GLIBC_2.2); ++ ++#endif +--- glibc-2.3.1.old/sysdeps/m68k/Deps 1970-01-01 09:00:00.000000000 +0900 ++++ glibc-2.3.1/sysdeps/m68k/Deps 2003-03-01 00:29:42.000000000 +0900 +@@ -0,0 +1 @@ ++libgcc-compat.c +--- glibc-2.3.1.old/sysdeps/m68k/Makefile 2003-02-27 19:29:49.000000000 +0900 ++++ glibc-2.3.1/sysdeps/m68k/Makefile 2003-03-01 00:29:42.000000000 +0900 +@@ -45,3 +45,11 @@ + # Build objects in libc_nonshared.a with -fPIC (instead of -fpic) to avoid + # possible linkage problems. + CFLAGS-.oS += -fPIC ++ ++ifeq ($(subdir),csu) ++ifeq (yes,$(build-shared)) ++# Compatibility ++sysdep_routines += libgcc-compat ++shared-only-routines += libgcc-compat ++endif ++endif +--- glibc-2.3.1.old/sysdeps/m68k/Versions 2000-06-15 15:54:28.000000000 +0900 ++++ glibc-2.3.1/sysdeps/m68k/Versions 2003-03-02 01:12:58.000000000 +0900 +@@ -2,5 +2,13 @@ + GLIBC_2.0 { + # Functions from libgcc. + __divdi3; __moddi3; __udivdi3; __umoddi3; ++ __ashldi3; ++ __ashrdi3; ++ __fixdfdi; ++ __fixsfdi; ++ __fixunsdfdi; ++ __fixunssfdi; ++ __floatdidf; ++ __floatdisf; + } + } +--- glibc-2.3.1.old/sysdeps/m68k/libgcc-compat.c 1970-01-01 09:00:00.000000000 +0900 ++++ glibc-2.3.1/sysdeps/m68k/libgcc-compat.c 2003-03-02 13:26:49.000000000 +0900 +@@ -0,0 +1,83 @@ ++/* pre-.hidden libgcc compatibility ++ Copyright (C) 2003 Free Software Foundation, Inc. ++ This file is part of the GNU C Library. ++ Contributed by GOTO Masanori <gotom@debian.org> ++ ++ 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 <stdint.h> ++#include <shlib-compat.h> ++ ++#if SHLIB_COMPAT(libc, GLIBC_2_0, GLIBC_2_2_6) ++ ++extern int64_t __ashldi3 (int64_t, int32_t); ++int64_t __ashldi3_internal (int64_t u, int32_t b) ++{ ++ return __ashldi3 (u, b); ++} ++symbol_version (__ashldi3_internal, __ashldi3, GLIBC_2.0); ++ ++extern int64_t __ashrdi3 (int64_t, int32_t); ++int64_t __ashrdi3_internal (int64_t u, int32_t b) ++{ ++ return __ashrdi3 (u, b); ++} ++symbol_version (__ashrdi3_internal, __ashrdi3, GLIBC_2.0); ++ ++extern int64_t __fixdfdi (double); ++int64_t __fixdfdi_internal (double d) ++{ ++ return __fixdfdi (d); ++} ++symbol_version (__fixdfdi_internal, __fixdfdi, GLIBC_2.0); ++ ++extern int64_t __fixsfdi (float); ++int64_t __fixsfdi_internal (float d) ++{ ++ return __fixsfdi (d); ++} ++symbol_version (__fixsfdi_internal, __fixsfdi, GLIBC_2.0); ++ ++extern int64_t __fixunsdfdi (double); ++int64_t __fixunsdfdi_internal (double d) ++{ ++ return __fixunsdfdi (d); ++} ++symbol_version (__fixunsdfdi_internal, __fixunsdfdi, GLIBC_2.0); ++ ++extern int64_t __fixunssfdi (float); ++int64_t __fixunssfdi_internal (float d) ++{ ++ return __fixunssfdi (d); ++} ++symbol_version (__fixunssfdi_internal, __fixunssfdi, GLIBC_2.0); ++ ++extern double __floatdidf (int64_t); ++double __floatdidf_internal (int64_t u) ++{ ++ return __floatdidf (u); ++} ++symbol_version (__floatdidf_internal, __floatdidf, GLIBC_2.0); ++ ++extern float __floatdisf (int64_t); ++float __floatdisf_internal (int64_t u) ++{ ++ return __floatdisf (u); ++} ++symbol_version (__floatdisf_internal, __floatdisf, GLIBC_2.0); ++ ++#endif +--- glibc-2.3.1.old/sysdeps/s390/s390-32/Dist 2001-03-27 14:14:38.000000000 +0900 ++++ glibc-2.3.1/sysdeps/s390/s390-32/Dist 2003-03-02 11:09:37.000000000 +0900 +@@ -1 +1,2 @@ + s390-mcount.S ++libgcc-compat.c +--- glibc-2.3.1.old/sysdeps/s390/s390-32/Makefile 2002-09-19 15:42:09.000000000 +0900 ++++ glibc-2.3.1/sysdeps/s390/s390-32/Makefile 2003-03-02 11:09:11.000000000 +0900 +@@ -9,3 +9,11 @@ + CFLAGS-dl-load.c += -Wno-unused + CFLAGS-dl-reloc.c += -Wno-unused + endif ++ ++ifeq ($(subdir),csu) ++ifeq (yes,$(build-shared)) ++# Compatibility ++sysdep_routines += libgcc-compat ++shared-only-routines += libgcc-compat ++endif ++endif +--- glibc-2.3.1.old/sysdeps/s390/s390-32/Versions 2001-03-16 17:15:07.000000000 +0900 ++++ glibc-2.3.1/sysdeps/s390/s390-32/Versions 2003-03-02 11:08:03.000000000 +0900 +@@ -2,5 +2,13 @@ + GLIBC_2.0 { + # Functions from libgcc. + __divdi3; __moddi3; __udivdi3; __umoddi3; ++ __cmpdi2; ++ __fixdfdi; ++ __fixsfdi; ++ __fixunsdfdi; ++ __fixunssfdi; ++ __floatdidf; ++ __floatdisf; ++ __ucmpdi2; + } + } +--- glibc-2.3.1.old/sysdeps/s390/s390-32/libgcc-compat.c 1970-01-01 09:00:00.000000000 +0900 ++++ glibc-2.3.1/sysdeps/s390/s390-32/libgcc-compat.c 2003-03-02 19:42:19.000000000 +0900 +@@ -0,0 +1,83 @@ ++/* pre-.hidden libgcc compatibility ++ Copyright (C) 2003 Free Software Foundation, Inc. ++ This file is part of the GNU C Library. ++ Contributed by GOTO Masanori <gotom@debian.org> ++ ++ 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 <stdint.h> ++#include <shlib-compat.h> ++ ++#if SHLIB_COMPAT(libc, GLIBC_2_0, GLIBC_2_2_6) ++ ++extern int32_t __cmpdi2 (int64_t, int64_t); ++int32_t __cmpdi2_internal (int64_t u, int64_t v) ++{ ++ return __cmpdi2 (u, v); ++} ++symbol_version (__cmpdi2_internal, __cmpdi2, GLIBC_2.0); ++ ++extern int64_t __fixdfdi (double); ++int64_t __fixdfdi_internal (double d) ++{ ++ return __fixdfdi (d); ++} ++symbol_version (__fixdfdi_internal, __fixdfdi, GLIBC_2.0); ++ ++extern int64_t __fixsfdi (float); ++int64_t __fixsfdi_internal (float d) ++{ ++ return __fixsfdi (d); ++} ++symbol_version (__fixsfdi_internal, __fixsfdi, GLIBC_2.0); ++ ++extern int64_t __fixunsdfdi (double); ++int64_t __fixunsdfdi_internal (double d) ++{ ++ return __fixunsdfdi (d); ++} ++symbol_version (__fixunsdfdi_internal, __fixunsdfdi, GLIBC_2.0); ++ ++extern int64_t __fixunssfdi (float); ++int64_t __fixunssfdi_internal (float d) ++{ ++ return __fixunssfdi (d); ++} ++symbol_version (__fixunssfdi_internal, __fixunssfdi, GLIBC_2.0); ++ ++extern double __floatdidf (int64_t); ++double __floatdidf_internal (int64_t u) ++{ ++ return __floatdidf (u); ++} ++symbol_version (__floatdidf_internal, __floatdidf, GLIBC_2.0); ++ ++extern float __floatdisf (int64_t); ++float __floatdisf_internal (int64_t u) ++{ ++ return __floatdisf (u); ++} ++symbol_version (__floatdisf_internal, __floatdisf, GLIBC_2.0); ++ ++extern int32_t __ucmpdi2 (int64_t, int64_t); ++int32_t __ucmpdi2_internal (int64_t u, int64_t v) ++{ ++ return __ucmpdi2 (u, v); ++} ++symbol_version (__ucmpdi2_internal, __ucmpdi2, GLIBC_2.0); ++ ++#endif |