yann@1
|
1 |
Received: (qmail 11693 invoked from network); 26 May 2004 03:17:41 -0000
|
yann@1
|
2 |
Received: from unknown (HELO r-rr.iij4u.or.jp) (210.130.0.76)
|
yann@1
|
3 |
by sourceware dot org with SMTP; 26 May 2004 03:17:41 -0000
|
yann@1
|
4 |
Received: from localhost (frgw.3in.ne.jp [210.251.121.226])
|
yann@1
|
5 |
by r-rr dot iij4u dot or dot jp (8 dot 11 dot 6+IIJ/8 dot 11 dot 6) with ESMTP id i4Q3HbJ21421;
|
yann@1
|
6 |
Wed, 26 May 2004 12:17:37 +0900 (JST)
|
yann@1
|
7 |
Date: Wed, 26 May 2004 12:13:58 +0900 (JST)
|
yann@1
|
8 |
Message-Id: <20040526.121358.39460214.kkojima@rr.iij4u.or.jp>
|
yann@1
|
9 |
To: gcc-patches at gcc dot gnu dot org
|
yann@1
|
10 |
Cc: Mark Mitchell <mark at codesourcery dot com>
|
yann@1
|
11 |
Subject: [PATCH] Fix PR target/15647 for sh-linux
|
yann@1
|
12 |
From: Kaz Kojima <kkojima at rr dot iij4u dot or dot jp>
|
yann@1
|
13 |
Mime-Version: 1.0
|
yann@1
|
14 |
Content-Type: Text/Plain; charset=us-ascii
|
yann@1
|
15 |
Content-Transfer-Encoding: 7bit
|
yann@1
|
16 |
|
yann@1
|
17 |
Hi,
|
yann@1
|
18 |
|
yann@1
|
19 |
The appended patch is to fix PR target/15647
|
yann@1
|
20 |
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=15647
|
yann@1
|
21 |
for linux.
|
yann@1
|
22 |
__udivsi3 is exported from libgcc_s.so.1 and gcc generates the code
|
yann@1
|
23 |
which assumes r1 will be not clobbered when calling __udivsi3 in SH3
|
yann@1
|
24 |
case. This is bad because r1 is clobbered by PLT.
|
yann@1
|
25 |
The another functions listed in the standard libgcc-std.ver which
|
yann@1
|
26 |
possively have similar problem are __ashlsi3, __ashrsi3 and __lshrsi3,
|
yann@1
|
27 |
though these are used only by SH1/2.
|
yann@1
|
28 |
The patch below simply uses an SH specific libgcc-std.ver which drops
|
yann@1
|
29 |
these functions. SH linux uses a linker script libgcc_s.so having
|
yann@1
|
30 |
libgcc.a as a suppementary library, so these functions given by
|
yann@1
|
31 |
libgcc.a when needed in the link time.
|
yann@1
|
32 |
Although mainline has one failure in bulding zlib which can be avoided
|
yann@1
|
33 |
with -fno-reorder-blocks for sh3-unknown-linux-gnu target, x86 cross
|
yann@1
|
34 |
to sh3-unknown-linux-gnu can be build successfully on mainline with
|
yann@1
|
35 |
this patch except the above failure. 3.4-branch successfully bootstraps
|
yann@1
|
36 |
with it and there are no new failures on the native sh4-unknown-linux-gnu.
|
yann@1
|
37 |
The patch is highly sh-linux specific and seems to be safe. I'll check
|
yann@1
|
38 |
it into mainline.
|
yann@1
|
39 |
The original PR is also for sh3 netbsd. I'd like to leave it for the
|
yann@1
|
40 |
netbsd experts.
|
yann@1
|
41 |
|
yann@1
|
42 |
I think that it's too late for 3.3.4. Mark, is it also late for
|
yann@1
|
43 |
3.4.1?
|
yann@1
|
44 |
|
yann@1
|
45 |
Regards,
|
yann@1
|
46 |
kaz
|
yann@1
|
47 |
--
|
yann@1
|
48 |
2004-05-26 Kaz Kojima <kkojima@gcc.gnu.org>
|
yann@1
|
49 |
|
yann@1
|
50 |
* config/sh/t-linux (SHLIB_MAPFILES): Use sh specific
|
yann@1
|
51 |
libgcc-std.ver.
|
yann@1
|
52 |
* config/sh/libgcc-std.ver: New file.
|
yann@1
|
53 |
|
yann@1
|
54 |
diff -u3prN ORIG-gcc/gcc/config/sh/t-linux LOCAL-gcc/gcc/config/sh/t-linux
|
yann@1
|
55 |
--- ORIG-gcc/gcc/config/sh/t-linux Mon Feb 16 20:13:25 2004
|
yann@1
|
56 |
+++ LOCAL-gcc/gcc/config/sh/t-linux Tue May 25 18:25:48 2004
|
yann@1
|
57 |
@@ -11,8 +11,11 @@ MULTILIB_EXCEPTIONS=
|
yann@1
|
58 |
EXTRA_MULTILIB_PARTS= crtbegin.o crtend.o crtbeginS.o crtendS.o crtbeginT.o
|
yann@1
|
59 |
|
yann@1
|
60 |
# Override t-slibgcc-elf-ver to export some libgcc symbols with
|
yann@1
|
61 |
-# the symbol versions that glibc used.
|
yann@1
|
62 |
-SHLIB_MAPFILES = $(srcdir)/libgcc-std.ver $(srcdir)/config/sh/libgcc-glibc.ver
|
yann@1
|
63 |
+# the symbol versions that glibc used. Also use an sh specific
|
yann@1
|
64 |
+# libgcc-std.ver to avoid to export some lib1func routines which
|
yann@1
|
65 |
+# should not be called via PLT.
|
yann@1
|
66 |
+SHLIB_MAPFILES = $(srcdir)/config/sh/libgcc-std.ver \
|
yann@1
|
67 |
+ $(srcdir)/config/sh/libgcc-glibc.ver
|
yann@1
|
68 |
|
yann@1
|
69 |
# Override SHLIB_LINK and SHLIB_INSTALL to use linker script
|
yann@1
|
70 |
# libgcc_s.so.
|
yann@1
|
71 |
diff -u3prN ORIG-gcc/gcc/config/sh/libgcc-std.ver LOCAL-gcc/gcc/config/sh/libgcc-std.ver
|
yann@1
|
72 |
--- ORIG-gcc/gcc/config/sh/libgcc-std.ver Thu Jan 1 09:00:00 1970
|
yann@1
|
73 |
+++ LOCAL-gcc/gcc/config/sh/libgcc-std.ver Tue May 25 18:50:54 2004
|
yann@1
|
74 |
@@ -0,0 +1,213 @@
|
yann@1
|
75 |
+GCC_3.0 {
|
yann@1
|
76 |
+ # libgcc1 integer symbols
|
yann@1
|
77 |
+ __absvsi2
|
yann@1
|
78 |
+ __addvsi3
|
yann@1
|
79 |
+ # __ashlsi3
|
yann@1
|
80 |
+ # __ashrsi3
|
yann@1
|
81 |
+ __divsi3
|
yann@1
|
82 |
+ # __lshrsi3
|
yann@1
|
83 |
+ __modsi3
|
yann@1
|
84 |
+ __mulsi3
|
yann@1
|
85 |
+ __mulvsi3
|
yann@1
|
86 |
+ __negvsi2
|
yann@1
|
87 |
+ __subvsi3
|
yann@1
|
88 |
+ # __udivsi3
|
yann@1
|
89 |
+ __umodsi3
|
yann@1
|
90 |
+
|
yann@1
|
91 |
+ # libgcc1 floating point symbols
|
yann@1
|
92 |
+ __addsf3
|
yann@1
|
93 |
+ __adddf3
|
yann@1
|
94 |
+ __addxf3
|
yann@1
|
95 |
+ __addtf3
|
yann@1
|
96 |
+ __divsf3
|
yann@1
|
97 |
+ __divdf3
|
yann@1
|
98 |
+ __divxf3
|
yann@1
|
99 |
+ __divtf3
|
yann@1
|
100 |
+ __eqsf2
|
yann@1
|
101 |
+ __eqdf2
|
yann@1
|
102 |
+ __eqxf2
|
yann@1
|
103 |
+ __eqtf2
|
yann@1
|
104 |
+ __extenddfxf2
|
yann@1
|
105 |
+ __extenddftf2
|
yann@1
|
106 |
+ __extendsfdf2
|
yann@1
|
107 |
+ __extendsfxf2
|
yann@1
|
108 |
+ __extendsftf2
|
yann@1
|
109 |
+ __fixsfsi
|
yann@1
|
110 |
+ __fixdfsi
|
yann@1
|
111 |
+ __fixxfsi
|
yann@1
|
112 |
+ __fixtfsi
|
yann@1
|
113 |
+ __floatsisf
|
yann@1
|
114 |
+ __floatsidf
|
yann@1
|
115 |
+ __floatsixf
|
yann@1
|
116 |
+ __floatsitf
|
yann@1
|
117 |
+ __gesf2
|
yann@1
|
118 |
+ __gedf2
|
yann@1
|
119 |
+ __gexf2
|
yann@1
|
120 |
+ __getf2
|
yann@1
|
121 |
+ __gtsf2
|
yann@1
|
122 |
+ __gtdf2
|
yann@1
|
123 |
+ __gtxf2
|
yann@1
|
124 |
+ __gttf2
|
yann@1
|
125 |
+ __lesf2
|
yann@1
|
126 |
+ __ledf2
|
yann@1
|
127 |
+ __lexf2
|
yann@1
|
128 |
+ __letf2
|
yann@1
|
129 |
+ __ltsf2
|
yann@1
|
130 |
+ __ltdf2
|
yann@1
|
131 |
+ __ltxf2
|
yann@1
|
132 |
+ __lttf2
|
yann@1
|
133 |
+ __mulsf3
|
yann@1
|
134 |
+ __muldf3
|
yann@1
|
135 |
+ __mulxf3
|
yann@1
|
136 |
+ __multf3
|
yann@1
|
137 |
+ __negsf2
|
yann@1
|
138 |
+ __negdf2
|
yann@1
|
139 |
+ __negxf2
|
yann@1
|
140 |
+ __negtf2
|
yann@1
|
141 |
+ __nesf2
|
yann@1
|
142 |
+ __nedf2
|
yann@1
|
143 |
+ __nexf2
|
yann@1
|
144 |
+ __netf2
|
yann@1
|
145 |
+ __subsf3
|
yann@1
|
146 |
+ __subdf3
|
yann@1
|
147 |
+ __subxf3
|
yann@1
|
148 |
+ __subtf3
|
yann@1
|
149 |
+ __truncdfsf2
|
yann@1
|
150 |
+ __truncxfsf2
|
yann@1
|
151 |
+ __trunctfsf2
|
yann@1
|
152 |
+ __truncxfdf2
|
yann@1
|
153 |
+ __trunctfdf2
|
yann@1
|
154 |
+
|
yann@1
|
155 |
+ # libgcc2 DImode arithmetic (for 32-bit targets).
|
yann@1
|
156 |
+ __absvdi2
|
yann@1
|
157 |
+ __addvdi3
|
yann@1
|
158 |
+ __ashldi3
|
yann@1
|
159 |
+ __ashrdi3
|
yann@1
|
160 |
+ __cmpdi2
|
yann@1
|
161 |
+ __divdi3
|
yann@1
|
162 |
+ __ffsdi2
|
yann@1
|
163 |
+ __fixdfdi
|
yann@1
|
164 |
+ __fixsfdi
|
yann@1
|
165 |
+ __fixtfdi
|
yann@1
|
166 |
+ __fixxfdi
|
yann@1
|
167 |
+ __fixunsdfdi
|
yann@1
|
168 |
+ __fixunsdfsi
|
yann@1
|
169 |
+ __fixunssfsi
|
yann@1
|
170 |
+ __fixunssfdi
|
yann@1
|
171 |
+ __fixunstfdi
|
yann@1
|
172 |
+ __fixunstfsi
|
yann@1
|
173 |
+ __fixunsxfdi
|
yann@1
|
174 |
+ __fixunsxfsi
|
yann@1
|
175 |
+ __floatdidf
|
yann@1
|
176 |
+ __floatdisf
|
yann@1
|
177 |
+ __floatdixf
|
yann@1
|
178 |
+ __floatditf
|
yann@1
|
179 |
+ __lshrdi3
|
yann@1
|
180 |
+ __moddi3
|
yann@1
|
181 |
+ __muldi3
|
yann@1
|
182 |
+ __mulvdi3
|
yann@1
|
183 |
+ __negdi2
|
yann@1
|
184 |
+ __negvdi2
|
yann@1
|
185 |
+ __subvdi3
|
yann@1
|
186 |
+ __ucmpdi2
|
yann@1
|
187 |
+ __udivdi3
|
yann@1
|
188 |
+ __udivmoddi4
|
yann@1
|
189 |
+ __umoddi3
|
yann@1
|
190 |
+
|
yann@1
|
191 |
+ # libgcc2 TImode arithmetic (for 64-bit targets).
|
yann@1
|
192 |
+ __ashlti3
|
yann@1
|
193 |
+ __ashrti3
|
yann@1
|
194 |
+ __cmpti2
|
yann@1
|
195 |
+ __divti3
|
yann@1
|
196 |
+ __ffsti2
|
yann@1
|
197 |
+ __fixdfti
|
yann@1
|
198 |
+ __fixsfti
|
yann@1
|
199 |
+ __fixtfti
|
yann@1
|
200 |
+ __fixxfti
|
yann@1
|
201 |
+ __lshrti3
|
yann@1
|
202 |
+ __modti3
|
yann@1
|
203 |
+ __multi3
|
yann@1
|
204 |
+ __negti2
|
yann@1
|
205 |
+ __ucmpti2
|
yann@1
|
206 |
+ __udivmodti4
|
yann@1
|
207 |
+ __udivti3
|
yann@1
|
208 |
+ __umodti3
|
yann@1
|
209 |
+ __fixunsdfti
|
yann@1
|
210 |
+ __fixunssfti
|
yann@1
|
211 |
+ __fixunstfti
|
yann@1
|
212 |
+ __fixunsxfti
|
yann@1
|
213 |
+ __floattidf
|
yann@1
|
214 |
+ __floattisf
|
yann@1
|
215 |
+ __floattixf
|
yann@1
|
216 |
+ __floattitf
|
yann@1
|
217 |
+
|
yann@1
|
218 |
+ # Used to deal with trampoline initialization on some platforms
|
yann@1
|
219 |
+ __clear_cache
|
yann@1
|
220 |
+
|
yann@1
|
221 |
+ # EH symbols
|
yann@1
|
222 |
+ _Unwind_DeleteException
|
yann@1
|
223 |
+ _Unwind_Find_FDE
|
yann@1
|
224 |
+ _Unwind_ForcedUnwind
|
yann@1
|
225 |
+ _Unwind_GetGR
|
yann@1
|
226 |
+ _Unwind_GetIP
|
yann@1
|
227 |
+ _Unwind_GetLanguageSpecificData
|
yann@1
|
228 |
+ _Unwind_GetRegionStart
|
yann@1
|
229 |
+ _Unwind_GetTextRelBase
|
yann@1
|
230 |
+ _Unwind_GetDataRelBase
|
yann@1
|
231 |
+ _Unwind_RaiseException
|
yann@1
|
232 |
+ _Unwind_Resume
|
yann@1
|
233 |
+ _Unwind_SetGR
|
yann@1
|
234 |
+ _Unwind_SetIP
|
yann@1
|
235 |
+ __deregister_frame
|
yann@1
|
236 |
+ __deregister_frame_info
|
yann@1
|
237 |
+ __deregister_frame_info_bases
|
yann@1
|
238 |
+ __register_frame
|
yann@1
|
239 |
+ __register_frame_info
|
yann@1
|
240 |
+ __register_frame_info_bases
|
yann@1
|
241 |
+ __register_frame_info_table
|
yann@1
|
242 |
+ __register_frame_info_table_bases
|
yann@1
|
243 |
+ __register_frame_table
|
yann@1
|
244 |
+
|
yann@1
|
245 |
+ # SjLj EH symbols
|
yann@1
|
246 |
+ _Unwind_SjLj_Register
|
yann@1
|
247 |
+ _Unwind_SjLj_Unregister
|
yann@1
|
248 |
+ _Unwind_SjLj_RaiseException
|
yann@1
|
249 |
+ _Unwind_SjLj_ForcedUnwind
|
yann@1
|
250 |
+ _Unwind_SjLj_Resume
|
yann@1
|
251 |
+}
|
yann@1
|
252 |
+
|
yann@1
|
253 |
+%inherit GCC_3.3 GCC_3.0
|
yann@1
|
254 |
+GCC_3.3 {
|
yann@1
|
255 |
+ _Unwind_FindEnclosingFunction
|
yann@1
|
256 |
+ _Unwind_GetCFA
|
yann@1
|
257 |
+ _Unwind_Backtrace
|
yann@1
|
258 |
+ _Unwind_Resume_or_Rethrow
|
yann@1
|
259 |
+ _Unwind_SjLj_Resume_or_Rethrow
|
yann@1
|
260 |
+}
|
yann@1
|
261 |
+
|
yann@1
|
262 |
+%inherit GCC_3.3.1 GCC_3.3
|
yann@1
|
263 |
+GCC_3.3.1 {
|
yann@1
|
264 |
+ __gcc_personality_sj0
|
yann@1
|
265 |
+ __gcc_personality_v0
|
yann@1
|
266 |
+}
|
yann@1
|
267 |
+
|
yann@1
|
268 |
+%inherit GCC_3.3.2 GCC_3.3.1
|
yann@1
|
269 |
+GCC_3.3.2 {
|
yann@1
|
270 |
+}
|
yann@1
|
271 |
+
|
yann@1
|
272 |
+%inherit GCC_3.4 GCC_3.3.2
|
yann@1
|
273 |
+GCC_3.4 {
|
yann@1
|
274 |
+ # bit scanning and counting built-ins
|
yann@1
|
275 |
+ __clzsi2
|
yann@1
|
276 |
+ __clzdi2
|
yann@1
|
277 |
+ __clzti2
|
yann@1
|
278 |
+ __ctzsi2
|
yann@1
|
279 |
+ __ctzdi2
|
yann@1
|
280 |
+ __ctzti2
|
yann@1
|
281 |
+ __popcountsi2
|
yann@1
|
282 |
+ __popcountdi2
|
yann@1
|
283 |
+ __popcountti2
|
yann@1
|
284 |
+ __paritysi2
|
yann@1
|
285 |
+ __paritydi2
|
yann@1
|
286 |
+ __parityti2
|
yann@1
|
287 |
+}
|
yann@1
|
288 |
|