summaryrefslogtreecommitdiff
path: root/patches/gcc/3.4.0/pr15647-fix.patch
diff options
context:
space:
mode:
Diffstat (limited to 'patches/gcc/3.4.0/pr15647-fix.patch')
-rw-r--r--patches/gcc/3.4.0/pr15647-fix.patch288
1 files changed, 288 insertions, 0 deletions
diff --git a/patches/gcc/3.4.0/pr15647-fix.patch b/patches/gcc/3.4.0/pr15647-fix.patch
new file mode 100644
index 0000000..6a4265d
--- /dev/null
+++ b/patches/gcc/3.4.0/pr15647-fix.patch
@@ -0,0 +1,288 @@
+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
++}
+