diff options
Diffstat (limited to 'meta/packages/gcc/gcc-3.4.4/gcc-3.4.0-arm-softfloat.patch')
-rw-r--r-- | meta/packages/gcc/gcc-3.4.4/gcc-3.4.0-arm-softfloat.patch | 256 |
1 files changed, 256 insertions, 0 deletions
diff --git a/meta/packages/gcc/gcc-3.4.4/gcc-3.4.0-arm-softfloat.patch b/meta/packages/gcc/gcc-3.4.4/gcc-3.4.0-arm-softfloat.patch new file mode 100644 index 0000000000..f53d64b374 --- /dev/null +++ b/meta/packages/gcc/gcc-3.4.4/gcc-3.4.0-arm-softfloat.patch | |||
@@ -0,0 +1,256 @@ | |||
1 | # | ||
2 | # Submitted: | ||
3 | # | ||
4 | # Dimitry Andric <dimitry@andric.com>, 2004-05-01 | ||
5 | # | ||
6 | # Description: | ||
7 | # | ||
8 | # Nicholas Pitre released this patch for gcc soft-float support here: | ||
9 | # http://lists.arm.linux.org.uk/pipermail/linux-arm/2003-October/006436.html | ||
10 | # | ||
11 | # This version has been adapted to work with gcc 3.4.0. | ||
12 | # | ||
13 | # The original patch doesn't distinguish between softfpa and softvfp modes | ||
14 | # in the way Nicholas Pitre probably meant. His description is: | ||
15 | # | ||
16 | # "Default is to use APCS-32 mode with soft-vfp. The old Linux default for | ||
17 | # floats can be achieved with -mhard-float or with the configure | ||
18 | # --with-float=hard option. If -msoft-float or --with-float=soft is used then | ||
19 | # software float support will be used just like the default but with the legacy | ||
20 | # big endian word ordering for double float representation instead." | ||
21 | # | ||
22 | # Which means the following: | ||
23 | # | ||
24 | # * If you compile without -mhard-float or -msoft-float, you should get | ||
25 | # software floating point, using the VFP format. The produced object file | ||
26 | # should have these flags in its header: | ||
27 | # | ||
28 | # private flags = 600: [APCS-32] [VFP float format] [software FP] | ||
29 | # | ||
30 | # * If you compile with -mhard-float, you should get hardware floating point, | ||
31 | # which always uses the FPA format. Object file header flags should be: | ||
32 | # | ||
33 | # private flags = 0: [APCS-32] [FPA float format] | ||
34 | # | ||
35 | # * If you compile with -msoft-float, you should get software floating point, | ||
36 | # using the FPA format. This is done for compatibility reasons with many | ||
37 | # existing distributions. Object file header flags should be: | ||
38 | # | ||
39 | # private flags = 200: [APCS-32] [FPA float format] [software FP] | ||
40 | # | ||
41 | # The original patch from Nicholas Pitre contained the following constructs: | ||
42 | # | ||
43 | # #define SUBTARGET_EXTRA_ASM_SPEC "%{!mcpu=*:-mcpu=xscale} \ | ||
44 | # %{mhard-float:-mfpu=fpa} \ | ||
45 | # %{!mhard-float: %{msoft-float:-mfpu=softfpa;:-mfpu=softvfp}}" | ||
46 | # | ||
47 | # However, gcc doesn't accept this ";:" notation, used in the 3rd line. This | ||
48 | # is probably the reason Robert Schwebel modified it to: | ||
49 | # | ||
50 | # #define SUBTARGET_EXTRA_ASM_SPEC "%{!mcpu=*:-mcpu=xscale} \ | ||
51 | # %{mhard-float:-mfpu=fpa} \ | ||
52 | # %{!mhard-float: %{msoft-float:-mfpu=softfpa -mfpu=softvfp}}" | ||
53 | # | ||
54 | # But this causes the following behaviour: | ||
55 | # | ||
56 | # * If you compile without -mhard-float or -msoft-float, the compiler generates | ||
57 | # software floating point instructions, but *nothing* is passed to the | ||
58 | # assembler, which results in an object file which has flags: | ||
59 | # | ||
60 | # private flags = 0: [APCS-32] [FPA float format] | ||
61 | # | ||
62 | # This is not correct! | ||
63 | # | ||
64 | # * If you compile with -mhard-float, the compiler generates hardware floating | ||
65 | # point instructions, and passes "-mfpu=fpa" to the assembler, which results | ||
66 | # in an object file which has the same flags as in the previous item, but now | ||
67 | # those *are* correct. | ||
68 | # | ||
69 | # * If you compile with -msoft-float, the compiler generates software floating | ||
70 | # point instructions, and passes "-mfpu=softfpa -mfpu=softvfp" (in that | ||
71 | # order) to the assembler, which results in an object file with flags: | ||
72 | # | ||
73 | # private flags = 600: [APCS-32] [VFP float format] [software FP] | ||
74 | # | ||
75 | # This is not correct, because the last "-mfpu=" option on the assembler | ||
76 | # command line determines the actual FPU convention used (which should be FPA | ||
77 | # in this case). | ||
78 | # | ||
79 | # Therefore, I modified this patch to get the desired behaviour. Every | ||
80 | # instance of the notation: | ||
81 | # | ||
82 | # %{msoft-float:-mfpu=softfpa -mfpu=softvfp} | ||
83 | # | ||
84 | # was changed to: | ||
85 | # | ||
86 | # %{msoft-float:-mfpu=softfpa} %{!msoft-float:-mfpu=softvfp} | ||
87 | # | ||
88 | # I also did the following: | ||
89 | # | ||
90 | # * Modified all TARGET_DEFAULT macros I could find to include ARM_FLAG_VFP, to | ||
91 | # be consistent with Nicholas' original patch. | ||
92 | # * Removed any "msoft-float" or "mhard-float" from all MULTILIB_DEFAULTS | ||
93 | # macros I could find. I think that if you compile without any options, you | ||
94 | # would like to get the defaults. :) | ||
95 | # * Removed the extra -lfloat option from LIBGCC_SPEC, since it isn't needed | ||
96 | # anymore. (The required functions are now in libgcc.) | ||
97 | |||
98 | diff -urNd gcc-3.4.0-orig/gcc/config/arm/coff.h gcc-3.4.0/gcc/config/arm/coff.h | ||
99 | --- gcc-3.4.0-orig/gcc/config/arm/coff.h 2004-02-24 15:25:22.000000000 +0100 | ||
100 | +++ gcc-3.4.0/gcc/config/arm/coff.h 2004-05-01 19:07:06.059409600 +0200 | ||
101 | @@ -31,11 +31,16 @@ | ||
102 | #define TARGET_VERSION fputs (" (ARM/coff)", stderr) | ||
103 | |||
104 | #undef TARGET_DEFAULT | ||
105 | -#define TARGET_DEFAULT (ARM_FLAG_SOFT_FLOAT | ARM_FLAG_APCS_32 | ARM_FLAG_APCS_FRAME | ARM_FLAG_MMU_TRAPS) | ||
106 | +#define TARGET_DEFAULT \ | ||
107 | + ( ARM_FLAG_SOFT_FLOAT \ | ||
108 | + | ARM_FLAG_VFP \ | ||
109 | + | ARM_FLAG_APCS_32 \ | ||
110 | + | ARM_FLAG_APCS_FRAME \ | ||
111 | + | ARM_FLAG_MMU_TRAPS ) | ||
112 | |||
113 | #ifndef MULTILIB_DEFAULTS | ||
114 | #define MULTILIB_DEFAULTS \ | ||
115 | - { "marm", "mlittle-endian", "msoft-float", "mapcs-32", "mno-thumb-interwork" } | ||
116 | + { "marm", "mlittle-endian", "mapcs-32", "mno-thumb-interwork" } | ||
117 | #endif | ||
118 | |||
119 | /* This is COFF, but prefer stabs. */ | ||
120 | diff -urNd gcc-3.4.0-orig/gcc/config/arm/elf.h gcc-3.4.0/gcc/config/arm/elf.h | ||
121 | --- gcc-3.4.0-orig/gcc/config/arm/elf.h 2004-02-24 15:25:22.000000000 +0100 | ||
122 | +++ gcc-3.4.0/gcc/config/arm/elf.h 2004-05-01 19:12:16.976486400 +0200 | ||
123 | @@ -46,7 +46,9 @@ | ||
124 | |||
125 | #ifndef SUBTARGET_ASM_FLOAT_SPEC | ||
126 | #define SUBTARGET_ASM_FLOAT_SPEC "\ | ||
127 | -%{mapcs-float:-mfloat} %{msoft-float:-mfpu=softfpa}" | ||
128 | +%{mapcs-float:-mfloat} \ | ||
129 | +%{mhard-float:-mfpu=fpa} \ | ||
130 | +%{!mhard-float: %{msoft-float:-mfpu=softfpa} %{!msoft-float:-mfpu=softvfp}}" | ||
131 | #endif | ||
132 | |||
133 | #ifndef ASM_SPEC | ||
134 | @@ -106,12 +108,17 @@ | ||
135 | #endif | ||
136 | |||
137 | #ifndef TARGET_DEFAULT | ||
138 | -#define TARGET_DEFAULT (ARM_FLAG_SOFT_FLOAT | ARM_FLAG_APCS_32 | ARM_FLAG_APCS_FRAME | ARM_FLAG_MMU_TRAPS) | ||
139 | +#define TARGET_DEFAULT \ | ||
140 | + ( ARM_FLAG_SOFT_FLOAT \ | ||
141 | + | ARM_FLAG_VFP \ | ||
142 | + | ARM_FLAG_APCS_32 \ | ||
143 | + | ARM_FLAG_APCS_FRAME \ | ||
144 | + | ARM_FLAG_MMU_TRAPS ) | ||
145 | #endif | ||
146 | |||
147 | #ifndef MULTILIB_DEFAULTS | ||
148 | #define MULTILIB_DEFAULTS \ | ||
149 | - { "marm", "mlittle-endian", "msoft-float", "mapcs-32", "mno-thumb-interwork", "fno-leading-underscore" } | ||
150 | + { "marm", "mlittle-endian", "mapcs-32", "mno-thumb-interwork", "fno-leading-underscore" } | ||
151 | #endif | ||
152 | |||
153 | #define TARGET_ASM_FILE_START_APP_OFF true | ||
154 | diff -urNd gcc-3.4.0-orig/gcc/config/arm/linux-elf.h gcc-3.4.0/gcc/config/arm/linux-elf.h | ||
155 | --- gcc-3.4.0-orig/gcc/config/arm/linux-elf.h 2004-01-31 07:18:11.000000000 +0100 | ||
156 | +++ gcc-3.4.0/gcc/config/arm/linux-elf.h 2004-05-01 19:19:06.935979200 +0200 | ||
157 | @@ -30,9 +30,27 @@ | ||
158 | /* Do not assume anything about header files. */ | ||
159 | #define NO_IMPLICIT_EXTERN_C | ||
160 | |||
161 | -/* Default is to use APCS-32 mode. */ | ||
162 | +/* | ||
163 | + * Default is to use APCS-32 mode with soft-vfp. | ||
164 | + * The old Linux default for floats can be achieved with -mhard-float | ||
165 | + * or with the configure --with-float=hard option. | ||
166 | + * If -msoft-float or --with-float=soft is used then software float | ||
167 | + * support will be used just like the default but with the legacy | ||
168 | + * big endian word ordering for double float representation instead. | ||
169 | + */ | ||
170 | + | ||
171 | #undef TARGET_DEFAULT | ||
172 | -#define TARGET_DEFAULT (ARM_FLAG_APCS_32 | ARM_FLAG_MMU_TRAPS) | ||
173 | +#define TARGET_DEFAULT \ | ||
174 | + ( ARM_FLAG_APCS_32 \ | ||
175 | + | ARM_FLAG_SOFT_FLOAT \ | ||
176 | + | ARM_FLAG_VFP \ | ||
177 | + | ARM_FLAG_MMU_TRAPS ) | ||
178 | + | ||
179 | +#undef SUBTARGET_EXTRA_ASM_SPEC | ||
180 | +#define SUBTARGET_EXTRA_ASM_SPEC "\ | ||
181 | +%{!mcpu=*:-mcpu=xscale} \ | ||
182 | +%{mhard-float:-mfpu=fpa} \ | ||
183 | +%{!mhard-float: %{msoft-float:-mfpu=softfpa} %{!msoft-float:-mfpu=softvfp}}" | ||
184 | |||
185 | #define SUBTARGET_CPU_DEFAULT TARGET_CPU_arm6 | ||
186 | |||
187 | @@ -40,7 +58,7 @@ | ||
188 | |||
189 | #undef MULTILIB_DEFAULTS | ||
190 | #define MULTILIB_DEFAULTS \ | ||
191 | - { "marm", "mlittle-endian", "mhard-float", "mapcs-32", "mno-thumb-interwork" } | ||
192 | + { "marm", "mlittle-endian", "mapcs-32", "mno-thumb-interwork" } | ||
193 | |||
194 | #define CPP_APCS_PC_DEFAULT_SPEC "-D__APCS_32__" | ||
195 | |||
196 | @@ -55,7 +73,7 @@ | ||
197 | %{shared:-lc} \ | ||
198 | %{!shared:%{profile:-lc_p}%{!profile:-lc}}" | ||
199 | |||
200 | -#define LIBGCC_SPEC "%{msoft-float:-lfloat} -lgcc" | ||
201 | +#define LIBGCC_SPEC "-lgcc" | ||
202 | |||
203 | /* Provide a STARTFILE_SPEC appropriate for GNU/Linux. Here we add | ||
204 | the GNU/Linux magical crtbegin.o file (see crtstuff.c) which | ||
205 | diff -urNd gcc-3.4.0-orig/gcc/config/arm/t-linux gcc-3.4.0/gcc/config/arm/t-linux | ||
206 | --- gcc-3.4.0-orig/gcc/config/arm/t-linux 2003-09-20 23:09:07.000000000 +0200 | ||
207 | +++ gcc-3.4.0/gcc/config/arm/t-linux 2004-05-01 20:31:59.102846400 +0200 | ||
208 | @@ -4,7 +4,10 @@ | ||
209 | LIBGCC2_DEBUG_CFLAGS = -g0 | ||
210 | |||
211 | LIB1ASMSRC = arm/lib1funcs.asm | ||
212 | -LIB1ASMFUNCS = _udivsi3 _divsi3 _umodsi3 _modsi3 _dvmd_lnx | ||
213 | +LIB1ASMFUNCS = _udivsi3 _divsi3 _umodsi3 _modsi3 _dvmd_lnx \ | ||
214 | + _negdf2 _addsubdf3 _muldivdf3 _cmpdf2 _unorddf2 _fixdfsi _fixunsdfsi \ | ||
215 | + _truncdfsf2 _negsf2 _addsubsf3 _muldivsf3 _cmpsf2 _unordsf2 \ | ||
216 | + _fixsfsi _fixunssfsi | ||
217 | |||
218 | # MULTILIB_OPTIONS = mhard-float/msoft-float | ||
219 | # MULTILIB_DIRNAMES = hard-float soft-float | ||
220 | diff -urNd gcc-3.4.0-orig/gcc/config/arm/unknown-elf.h gcc-3.4.0/gcc/config/arm/unknown-elf.h | ||
221 | --- gcc-3.4.0-orig/gcc/config/arm/unknown-elf.h 2004-02-24 15:25:22.000000000 +0100 | ||
222 | +++ gcc-3.4.0/gcc/config/arm/unknown-elf.h 2004-05-01 19:09:09.016212800 +0200 | ||
223 | @@ -30,7 +30,12 @@ | ||
224 | |||
225 | /* Default to using APCS-32 and software floating point. */ | ||
226 | #ifndef TARGET_DEFAULT | ||
227 | -#define TARGET_DEFAULT (ARM_FLAG_SOFT_FLOAT | ARM_FLAG_APCS_32 | ARM_FLAG_APCS_FRAME | ARM_FLAG_MMU_TRAPS) | ||
228 | +#define TARGET_DEFAULT \ | ||
229 | + ( ARM_FLAG_SOFT_FLOAT \ | ||
230 | + | ARM_FLAG_VFP \ | ||
231 | + | ARM_FLAG_APCS_32 \ | ||
232 | + | ARM_FLAG_APCS_FRAME \ | ||
233 | + | ARM_FLAG_MMU_TRAPS ) | ||
234 | #endif | ||
235 | |||
236 | /* Now we define the strings used to build the spec file. */ | ||
237 | diff -urNd gcc-3.4.0-orig/gcc/config/arm/xscale-elf.h gcc-3.4.0/gcc/config/arm/xscale-elf.h | ||
238 | --- gcc-3.4.0-orig/gcc/config/arm/xscale-elf.h 2003-07-02 01:26:43.000000000 +0200 | ||
239 | +++ gcc-3.4.0/gcc/config/arm/xscale-elf.h 2004-05-01 20:15:36.620105600 +0200 | ||
240 | @@ -49,11 +49,12 @@ | ||
241 | endian, regardless of the endian-ness of the memory | ||
242 | system. */ | ||
243 | |||
244 | -#define SUBTARGET_EXTRA_ASM_SPEC "%{!mcpu=*:-mcpu=xscale} \ | ||
245 | - %{mhard-float:-mfpu=fpa} \ | ||
246 | - %{!mhard-float: %{msoft-float:-mfpu=softfpa;:-mfpu=softvfp}}" | ||
247 | +#define SUBTARGET_EXTRA_ASM_SPEC "\ | ||
248 | +%{!mcpu=*:-mcpu=xscale} \ | ||
249 | +%{mhard-float:-mfpu=fpa} \ | ||
250 | +%{!mhard-float: %{msoft-float:-mfpu=softfpa} %{!msoft-float:-mfpu=softvfp}}" | ||
251 | |||
252 | #ifndef MULTILIB_DEFAULTS | ||
253 | #define MULTILIB_DEFAULTS \ | ||
254 | - { "mlittle-endian", "mno-thumb-interwork", "marm", "msoft-float" } | ||
255 | + { "mlittle-endian", "mno-thumb-interwork", "marm" } | ||
256 | #endif | ||