crosstool-ng/patches/gcc/3.4.0/pr15647-fix.patch
Yann E. MORIN" 1906cf93f8 Add the full crosstool-NG sources to the new repository of its own.
You might just say: 'Yeah! crosstool-NG's got its own repo!".
Unfortunately, that's because the previous repo got damaged beyond repair and I had no backup.
That means I'm putting backups in place in the afternoon.
That also means we've lost history... :-(
2007-02-24 11:00:05 +00:00

289 lines
6.6 KiB
Diff

Received: (qmail 11693 invoked from network); 26 May 2004 03:17:41 -0000
Received: from unknown (HELO r-rr.iij4u.or.jp) (210.130.0.76)
by sourceware dot org with SMTP; 26 May 2004 03:17:41 -0000
Received: from localhost (frgw.3in.ne.jp [210.251.121.226])
by r-rr dot iij4u dot or dot jp (8 dot 11 dot 6+IIJ/8 dot 11 dot 6) with ESMTP id i4Q3HbJ21421;
Wed, 26 May 2004 12:17:37 +0900 (JST)
Date: Wed, 26 May 2004 12:13:58 +0900 (JST)
Message-Id: <20040526.121358.39460214.kkojima@rr.iij4u.or.jp>
To: gcc-patches at gcc dot gnu dot org
Cc: Mark Mitchell <mark at codesourcery dot com>
Subject: [PATCH] Fix PR target/15647 for sh-linux
From: Kaz Kojima <kkojima at rr dot iij4u dot or dot jp>
Mime-Version: 1.0
Content-Type: Text/Plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
Hi,
The appended patch is to fix PR target/15647
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=15647
for linux.
__udivsi3 is exported from libgcc_s.so.1 and gcc generates the code
which assumes r1 will be not clobbered when calling __udivsi3 in SH3
case. This is bad because r1 is clobbered by PLT.
The another functions listed in the standard libgcc-std.ver which
possively have similar problem are __ashlsi3, __ashrsi3 and __lshrsi3,
though these are used only by SH1/2.
The patch below simply uses an SH specific libgcc-std.ver which drops
these functions. SH linux uses a linker script libgcc_s.so having
libgcc.a as a suppementary library, so these functions given by
libgcc.a when needed in the link time.
Although mainline has one failure in bulding zlib which can be avoided
with -fno-reorder-blocks for sh3-unknown-linux-gnu target, x86 cross
to sh3-unknown-linux-gnu can be build successfully on mainline with
this patch except the above failure. 3.4-branch successfully bootstraps
with it and there are no new failures on the native sh4-unknown-linux-gnu.
The patch is highly sh-linux specific and seems to be safe. I'll check
it into mainline.
The original PR is also for sh3 netbsd. I'd like to leave it for the
netbsd experts.
I think that it's too late for 3.3.4. Mark, is it also late for
3.4.1?
Regards,
kaz
--
2004-05-26 Kaz Kojima <kkojima@gcc.gnu.org>
* config/sh/t-linux (SHLIB_MAPFILES): Use sh specific
libgcc-std.ver.
* config/sh/libgcc-std.ver: New file.
diff -u3prN ORIG-gcc/gcc/config/sh/t-linux LOCAL-gcc/gcc/config/sh/t-linux
--- ORIG-gcc/gcc/config/sh/t-linux Mon Feb 16 20:13:25 2004
+++ LOCAL-gcc/gcc/config/sh/t-linux Tue May 25 18:25:48 2004
@@ -11,8 +11,11 @@ MULTILIB_EXCEPTIONS=
EXTRA_MULTILIB_PARTS= crtbegin.o crtend.o crtbeginS.o crtendS.o crtbeginT.o
# Override t-slibgcc-elf-ver to export some libgcc symbols with
-# the symbol versions that glibc used.
-SHLIB_MAPFILES = $(srcdir)/libgcc-std.ver $(srcdir)/config/sh/libgcc-glibc.ver
+# the symbol versions that glibc used. Also use an sh specific
+# libgcc-std.ver to avoid to export some lib1func routines which
+# should not be called via PLT.
+SHLIB_MAPFILES = $(srcdir)/config/sh/libgcc-std.ver \
+ $(srcdir)/config/sh/libgcc-glibc.ver
# Override SHLIB_LINK and SHLIB_INSTALL to use linker script
# libgcc_s.so.
diff -u3prN ORIG-gcc/gcc/config/sh/libgcc-std.ver LOCAL-gcc/gcc/config/sh/libgcc-std.ver
--- ORIG-gcc/gcc/config/sh/libgcc-std.ver Thu Jan 1 09:00:00 1970
+++ LOCAL-gcc/gcc/config/sh/libgcc-std.ver Tue May 25 18:50:54 2004
@@ -0,0 +1,213 @@
+GCC_3.0 {
+ # libgcc1 integer symbols
+ __absvsi2
+ __addvsi3
+ # __ashlsi3
+ # __ashrsi3
+ __divsi3
+ # __lshrsi3
+ __modsi3
+ __mulsi3
+ __mulvsi3
+ __negvsi2
+ __subvsi3
+ # __udivsi3
+ __umodsi3
+
+ # libgcc1 floating point symbols
+ __addsf3
+ __adddf3
+ __addxf3
+ __addtf3
+ __divsf3
+ __divdf3
+ __divxf3
+ __divtf3
+ __eqsf2
+ __eqdf2
+ __eqxf2
+ __eqtf2
+ __extenddfxf2
+ __extenddftf2
+ __extendsfdf2
+ __extendsfxf2
+ __extendsftf2
+ __fixsfsi
+ __fixdfsi
+ __fixxfsi
+ __fixtfsi
+ __floatsisf
+ __floatsidf
+ __floatsixf
+ __floatsitf
+ __gesf2
+ __gedf2
+ __gexf2
+ __getf2
+ __gtsf2
+ __gtdf2
+ __gtxf2
+ __gttf2
+ __lesf2
+ __ledf2
+ __lexf2
+ __letf2
+ __ltsf2
+ __ltdf2
+ __ltxf2
+ __lttf2
+ __mulsf3
+ __muldf3
+ __mulxf3
+ __multf3
+ __negsf2
+ __negdf2
+ __negxf2
+ __negtf2
+ __nesf2
+ __nedf2
+ __nexf2
+ __netf2
+ __subsf3
+ __subdf3
+ __subxf3
+ __subtf3
+ __truncdfsf2
+ __truncxfsf2
+ __trunctfsf2
+ __truncxfdf2
+ __trunctfdf2
+
+ # libgcc2 DImode arithmetic (for 32-bit targets).
+ __absvdi2
+ __addvdi3
+ __ashldi3
+ __ashrdi3
+ __cmpdi2
+ __divdi3
+ __ffsdi2
+ __fixdfdi
+ __fixsfdi
+ __fixtfdi
+ __fixxfdi
+ __fixunsdfdi
+ __fixunsdfsi
+ __fixunssfsi
+ __fixunssfdi
+ __fixunstfdi
+ __fixunstfsi
+ __fixunsxfdi
+ __fixunsxfsi
+ __floatdidf
+ __floatdisf
+ __floatdixf
+ __floatditf
+ __lshrdi3
+ __moddi3
+ __muldi3
+ __mulvdi3
+ __negdi2
+ __negvdi2
+ __subvdi3
+ __ucmpdi2
+ __udivdi3
+ __udivmoddi4
+ __umoddi3
+
+ # libgcc2 TImode arithmetic (for 64-bit targets).
+ __ashlti3
+ __ashrti3
+ __cmpti2
+ __divti3
+ __ffsti2
+ __fixdfti
+ __fixsfti
+ __fixtfti
+ __fixxfti
+ __lshrti3
+ __modti3
+ __multi3
+ __negti2
+ __ucmpti2
+ __udivmodti4
+ __udivti3
+ __umodti3
+ __fixunsdfti
+ __fixunssfti
+ __fixunstfti
+ __fixunsxfti
+ __floattidf
+ __floattisf
+ __floattixf
+ __floattitf
+
+ # Used to deal with trampoline initialization on some platforms
+ __clear_cache
+
+ # EH symbols
+ _Unwind_DeleteException
+ _Unwind_Find_FDE
+ _Unwind_ForcedUnwind
+ _Unwind_GetGR
+ _Unwind_GetIP
+ _Unwind_GetLanguageSpecificData
+ _Unwind_GetRegionStart
+ _Unwind_GetTextRelBase
+ _Unwind_GetDataRelBase
+ _Unwind_RaiseException
+ _Unwind_Resume
+ _Unwind_SetGR
+ _Unwind_SetIP
+ __deregister_frame
+ __deregister_frame_info
+ __deregister_frame_info_bases
+ __register_frame
+ __register_frame_info
+ __register_frame_info_bases
+ __register_frame_info_table
+ __register_frame_info_table_bases
+ __register_frame_table
+
+ # SjLj EH symbols
+ _Unwind_SjLj_Register
+ _Unwind_SjLj_Unregister
+ _Unwind_SjLj_RaiseException
+ _Unwind_SjLj_ForcedUnwind
+ _Unwind_SjLj_Resume
+}
+
+%inherit GCC_3.3 GCC_3.0
+GCC_3.3 {
+ _Unwind_FindEnclosingFunction
+ _Unwind_GetCFA
+ _Unwind_Backtrace
+ _Unwind_Resume_or_Rethrow
+ _Unwind_SjLj_Resume_or_Rethrow
+}
+
+%inherit GCC_3.3.1 GCC_3.3
+GCC_3.3.1 {
+ __gcc_personality_sj0
+ __gcc_personality_v0
+}
+
+%inherit GCC_3.3.2 GCC_3.3.1
+GCC_3.3.2 {
+}
+
+%inherit GCC_3.4 GCC_3.3.2
+GCC_3.4 {
+ # bit scanning and counting built-ins
+ __clzsi2
+ __clzdi2
+ __clzti2
+ __ctzsi2
+ __ctzdi2
+ __ctzti2
+ __popcountsi2
+ __popcountdi2
+ __popcountti2
+ __paritysi2
+ __paritydi2
+ __parityti2
+}