patches/gcc/3.4.0/pr15647-fix.patch
author "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
Sat Feb 24 11:00:05 2007 +0000 (2007-02-24)
changeset 1 eeea35fbf182
permissions -rw-r--r--
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... :-(
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