Contents of /trunk/gcc/patches/gcc-3.4.3-linkonce-1.patch
Parent Directory | Revision Log
Revision 169 -
(show annotations)
(download)
Tue May 8 21:36:54 2007 UTC (17 years, 4 months ago) by niro
File size: 12526 byte(s)
Tue May 8 21:36:54 2007 UTC (17 years, 4 months ago) by niro
File size: 12526 byte(s)
-moved to patches subdir
1 | Submitted By: Jim Gifford (patches at jg555 dot com) |
2 | Date: 2004-11-05 |
3 | Initial Package Version: 3.4.3 |
4 | Origin: Jim Gifford |
5 | Upstream Status: Delayed till 3.4.4 |
6 | Description: Fixes linkone/comdat issue |
7 | |
8 | diff -Naur gcc-3.4.3.orig/gcc/config/alpha/alpha.c gcc-3.4.3/gcc/config/alpha/alpha.c |
9 | --- gcc-3.4.3.orig/gcc/config/alpha/alpha.c 2004-09-30 17:45:48.000000000 +0000 |
10 | +++ gcc-3.4.3/gcc/config/alpha/alpha.c 2004-11-05 17:08:46.220272104 +0000 |
11 | @@ -10169,6 +10169,8 @@ |
12 | # define TARGET_SECTION_TYPE_FLAGS unicosmk_section_type_flags |
13 | # undef TARGET_ASM_UNIQUE_SECTION |
14 | # define TARGET_ASM_UNIQUE_SECTION unicosmk_unique_section |
15 | +#undef TARGET_ASM_FUNCTION_RODATA_SECTION |
16 | +#define TARGET_ASM_FUNCTION_RODATA_SECTION default_no_function_rodata_section |
17 | # undef TARGET_ASM_GLOBALIZE_LABEL |
18 | # define TARGET_ASM_GLOBALIZE_LABEL hook_void_FILEptr_constcharptr |
19 | #endif |
20 | diff -Naur gcc-3.4.3.orig/gcc/config/arm/pe.h gcc-3.4.3/gcc/config/arm/pe.h |
21 | --- gcc-3.4.3.orig/gcc/config/arm/pe.h 2004-02-24 14:25:22.000000000 +0000 |
22 | +++ gcc-3.4.3/gcc/config/arm/pe.h 2004-11-05 17:08:46.225271344 +0000 |
23 | @@ -97,6 +97,7 @@ |
24 | #define MULTIPLE_SYMBOL_SPACES |
25 | |
26 | #define TARGET_ASM_UNIQUE_SECTION arm_pe_unique_section |
27 | +#define TARGET_ASM_FUNCTION_RODATA_SECTION default_no_function_rodata_section |
28 | |
29 | #define SUPPORTS_ONE_ONLY 1 |
30 | |
31 | diff -Naur gcc-3.4.3.orig/gcc/config/avr/avr.c gcc-3.4.3/gcc/config/avr/avr.c |
32 | --- gcc-3.4.3.orig/gcc/config/avr/avr.c 2004-09-28 01:13:55.000000000 +0000 |
33 | +++ gcc-3.4.3/gcc/config/avr/avr.c 2004-11-05 17:56:54.764146688 +0000 |
34 | @@ -229,6 +229,8 @@ |
35 | #define TARGET_ASM_FUNCTION_EPILOGUE avr_output_function_epilogue |
36 | #undef TARGET_ATTRIBUTE_TABLE |
37 | #define TARGET_ATTRIBUTE_TABLE avr_attribute_table |
38 | +#undef TARGET_ASM_FUNCTION_RODATA_SECTION |
39 | +#define TARGET_ASM_FUNCTION_RODATA_SECTION default_no_function_rodata_section |
40 | #undef TARGET_INSERT_ATTRIBUTES |
41 | #define TARGET_INSERT_ATTRIBUTES avr_insert_attributes |
42 | #undef TARGET_SECTION_TYPE_FLAGS |
43 | diff -Naur gcc-3.4.3.orig/gcc/config/darwin.h gcc-3.4.3/gcc/config/darwin.h |
44 | --- gcc-3.4.3.orig/gcc/config/darwin.h 2004-09-11 20:32:17.000000000 +0000 |
45 | +++ gcc-3.4.3/gcc/config/darwin.h 2004-11-05 17:08:46.300259944 +0000 |
46 | @@ -686,6 +686,9 @@ |
47 | #undef TARGET_ASM_SELECT_RTX_SECTION |
48 | #define TARGET_ASM_SELECT_RTX_SECTION machopic_select_rtx_section |
49 | |
50 | +#undef TARGET_ASM_FUNCTION_RODATA_SECTION |
51 | +#define TARGET_ASM_FUNCTION_RODATA_SECTION default_no_function_rodata_section |
52 | + |
53 | #define ASM_DECLARE_UNRESOLVED_REFERENCE(FILE,NAME) \ |
54 | do { \ |
55 | if (FILE) { \ |
56 | diff -Naur gcc-3.4.3.orig/gcc/config/i386/cygming.h gcc-3.4.3/gcc/config/i386/cygming.h |
57 | --- gcc-3.4.3.orig/gcc/config/i386/cygming.h 2004-06-08 06:30:13.000000000 +0000 |
58 | +++ gcc-3.4.3/gcc/config/i386/cygming.h 2004-11-05 17:08:46.304259336 +0000 |
59 | @@ -255,6 +255,7 @@ |
60 | |
61 | extern void i386_pe_unique_section (TREE, int); |
62 | #define TARGET_ASM_UNIQUE_SECTION i386_pe_unique_section |
63 | +#define TARGET_ASM_FUNCTION_RODATA_SECTION default_no_function_rodata_section |
64 | |
65 | #define SUPPORTS_ONE_ONLY 1 |
66 | |
67 | diff -Naur gcc-3.4.3.orig/gcc/config/i386/i386-interix.h gcc-3.4.3/gcc/config/i386/i386-interix.h |
68 | --- gcc-3.4.3.orig/gcc/config/i386/i386-interix.h 2004-01-31 06:18:20.000000000 +0000 |
69 | +++ gcc-3.4.3/gcc/config/i386/i386-interix.h 2004-11-05 17:08:46.307258880 +0000 |
70 | @@ -344,6 +344,7 @@ |
71 | |
72 | extern void i386_pe_unique_section (tree, int); |
73 | #define TARGET_ASM_UNIQUE_SECTION i386_pe_unique_section |
74 | +#define TARGET_ASM_FUNCTION_RODATA_SECTION default_no_function_rodata_section |
75 | |
76 | #define SUPPORTS_ONE_ONLY 1 |
77 | #endif /* 0 */ |
78 | diff -Naur gcc-3.4.3.orig/gcc/config/ip2k/ip2k.c gcc-3.4.3/gcc/config/ip2k/ip2k.c |
79 | --- gcc-3.4.3.orig/gcc/config/ip2k/ip2k.c 2004-01-31 06:18:25.000000000 +0000 |
80 | +++ gcc-3.4.3/gcc/config/ip2k/ip2k.c 2004-11-05 17:08:46.352252040 +0000 |
81 | @@ -98,6 +98,9 @@ |
82 | #undef TARGET_ASM_UNIQUE_SECTION |
83 | #define TARGET_ASM_UNIQUE_SECTION unique_section |
84 | |
85 | +#undef TARGET_ASM_FUNCTION_RODATA_SECTION |
86 | +#define TARGET_ASM_FUNCTION_RODATA_SECTION default_no_function_rodata_section |
87 | + |
88 | #undef TARGET_ATTRIBUTE_TABLE |
89 | #define TARGET_ATTRIBUTE_TABLE ip2k_attribute_table |
90 | |
91 | diff -Naur gcc-3.4.3.orig/gcc/config/mcore/mcore.c gcc-3.4.3/gcc/config/mcore/mcore.c |
92 | --- gcc-3.4.3.orig/gcc/config/mcore/mcore.c 2004-01-31 06:18:29.000000000 +0000 |
93 | +++ gcc-3.4.3/gcc/config/mcore/mcore.c 2004-11-05 17:08:46.384247176 +0000 |
94 | @@ -165,6 +165,8 @@ |
95 | #define TARGET_ATTRIBUTE_TABLE mcore_attribute_table |
96 | #undef TARGET_ASM_UNIQUE_SECTION |
97 | #define TARGET_ASM_UNIQUE_SECTION mcore_unique_section |
98 | +#undef TARGET_ASM_FUNCTION_RODATA_SECTION |
99 | +#define TARGET_ASM_FUNCTION_RODATA_SECTION default_no_function_rodata_section |
100 | #undef TARGET_ENCODE_SECTION_INFO |
101 | #define TARGET_ENCODE_SECTION_INFO mcore_encode_section_info |
102 | #undef TARGET_STRIP_NAME_ENCODING |
103 | diff -Naur gcc-3.4.3.orig/gcc/config/rs6000/xcoff.h gcc-3.4.3/gcc/config/rs6000/xcoff.h |
104 | --- gcc-3.4.3.orig/gcc/config/rs6000/xcoff.h 2004-01-31 06:18:34.000000000 +0000 |
105 | +++ gcc-3.4.3/gcc/config/rs6000/xcoff.h 2004-11-05 17:08:46.000000000 +0000 |
106 | @@ -172,6 +172,7 @@ |
107 | #define TARGET_ASM_SELECT_SECTION rs6000_xcoff_select_section |
108 | #define TARGET_ASM_SELECT_RTX_SECTION rs6000_xcoff_select_rtx_section |
109 | #define TARGET_ASM_UNIQUE_SECTION rs6000_xcoff_unique_section |
110 | +#define TARGET_ASM_FUNCTION_RODATA_SECTION default_no_function_rodata_section |
111 | #define TARGET_STRIP_NAME_ENCODING rs6000_xcoff_strip_name_encoding |
112 | #define TARGET_SECTION_TYPE_FLAGS rs6000_xcoff_section_type_flags |
113 | |
114 | diff -Naur gcc-3.4.3.orig/gcc/doc/tm.texi gcc-3.4.3/gcc/doc/tm.texi |
115 | --- gcc-3.4.3.orig/gcc/doc/tm.texi 2004-10-13 14:16:27.000000000 +0000 |
116 | +++ gcc-3.4.3/gcc/doc/tm.texi 2004-11-05 17:08:46.503229088 +0000 |
117 | @@ -6003,6 +6003,15 @@ |
118 | Whatever the actual target object format, this is often good enough. |
119 | @end deftypefn |
120 | |
121 | +@deftypefn {Target Hook} void TARGET_ASM_FUNCTION_RODATA_SECTION (tree @var{decl}) |
122 | +Switches to a readonly data section associated with |
123 | +@samp{DECL_SECTION_NAME (@var{decl})}. |
124 | +The default version of this function switches to @code{.gnu.linkonce.r.name} |
125 | +section if function's section is @code{.gnu.linkonce.t.name}, to |
126 | +@code{.rodata.name} if function is in @code{.text.name} section |
127 | +and otherwise switches to the normal readonly data section. |
128 | +@end deftypefn |
129 | + |
130 | @deftypefn {Target Hook} void TARGET_ASM_SELECT_RTX_SECTION (enum machine_mode @var{mode}, rtx @var{x}, unsigned HOST_WIDE_INT @var{align}) |
131 | Switches to the appropriate section for output of constant pool entry |
132 | @var{x} in @var{mode}. You can assume that @var{x} is some kind of |
133 | diff -Naur gcc-3.4.3.orig/gcc/final.c gcc-3.4.3/gcc/final.c |
134 | --- gcc-3.4.3.orig/gcc/final.c 2004-01-18 22:39:57.000000000 +0000 |
135 | +++ gcc-3.4.3/gcc/final.c 2004-11-05 17:08:46.542223160 +0000 |
136 | @@ -1881,7 +1881,7 @@ |
137 | { |
138 | int log_align; |
139 | |
140 | - readonly_data_section (); |
141 | + targetm.asm_out.function_rodata_section (current_function_decl); |
142 | |
143 | #ifdef ADDR_VEC_ALIGN |
144 | log_align = ADDR_VEC_ALIGN (NEXT_INSN (insn)); |
145 | diff -Naur gcc-3.4.3.orig/gcc/output.h gcc-3.4.3/gcc/output.h |
146 | --- gcc-3.4.3.orig/gcc/output.h 2004-01-18 22:39:57.000000000 +0000 |
147 | +++ gcc-3.4.3/gcc/output.h 2004-11-05 17:08:46.549222096 +0000 |
148 | @@ -500,6 +500,8 @@ |
149 | unsigned HOST_WIDE_INT, int); |
150 | extern void default_unique_section (tree, int); |
151 | extern void default_unique_section_1 (tree, int, int); |
152 | +extern void default_function_rodata_section (tree); |
153 | +extern void default_no_function_rodata_section (tree); |
154 | extern void default_select_rtx_section (enum machine_mode, rtx, |
155 | unsigned HOST_WIDE_INT); |
156 | extern void default_elf_select_rtx_section (enum machine_mode, rtx, |
157 | diff -Naur gcc-3.4.3.orig/gcc/target-def.h gcc-3.4.3/gcc/target-def.h |
158 | --- gcc-3.4.3.orig/gcc/target-def.h 2004-08-23 18:02:40.000000000 +0000 |
159 | +++ gcc-3.4.3/gcc/target-def.h 2004-11-05 17:08:46.553221488 +0000 |
160 | @@ -78,6 +78,10 @@ |
161 | #define TARGET_ASM_UNIQUE_SECTION default_unique_section |
162 | #endif |
163 | |
164 | +#ifndef TARGET_ASM_FUNCTION_RODATA_SECTION |
165 | +#define TARGET_ASM_FUNCTION_RODATA_SECTION default_function_rodata_section |
166 | +#endif |
167 | + |
168 | #ifndef TARGET_ASM_SELECT_RTX_SECTION |
169 | #define TARGET_ASM_SELECT_RTX_SECTION default_select_rtx_section |
170 | #endif |
171 | @@ -201,6 +205,7 @@ |
172 | TARGET_ASM_SELECT_SECTION, \ |
173 | TARGET_ASM_SELECT_RTX_SECTION, \ |
174 | TARGET_ASM_UNIQUE_SECTION, \ |
175 | + TARGET_ASM_FUNCTION_RODATA_SECTION, \ |
176 | TARGET_ASM_CONSTRUCTOR, \ |
177 | TARGET_ASM_DESTRUCTOR, \ |
178 | TARGET_ASM_OUTPUT_MI_THUNK, \ |
179 | diff -Naur gcc-3.4.3.orig/gcc/target.h gcc-3.4.3/gcc/target.h |
180 | --- gcc-3.4.3.orig/gcc/target.h 2004-08-23 18:02:41.000000000 +0000 |
181 | +++ gcc-3.4.3/gcc/target.h 2004-11-05 17:08:46.558220728 +0000 |
182 | @@ -118,6 +118,10 @@ |
183 | for SELECT_SECTION. */ |
184 | void (* unique_section) (tree, int); |
185 | |
186 | + /* Tell assembler to switch to the readonly data section associated |
187 | + with function DECL. */ |
188 | + void (* function_rodata_section) (tree); |
189 | + |
190 | /* Output a constructor for a symbol with a given priority. */ |
191 | void (* constructor) (rtx, int); |
192 | |
193 | diff -Naur gcc-3.4.3.orig/gcc/testsuite/g++.old-deja/g++.other/comdat4-aux.cc gcc-3.4.3/gcc/testsuite/g++.old-deja/g++.other/comdat4-aux.cc |
194 | --- gcc-3.4.3.orig/gcc/testsuite/g++.old-deja/g++.other/comdat4-aux.cc 1970-01-01 00:00:00.000000000 +0000 |
195 | +++ gcc-3.4.3/gcc/testsuite/g++.old-deja/g++.other/comdat4-aux.cc 2004-11-05 17:08:46.560220424 +0000 |
196 | @@ -0,0 +1,40 @@ |
197 | +extern void |
198 | +bar (int x); |
199 | + |
200 | +inline void |
201 | +foo (int i) |
202 | +{ |
203 | + switch (i) |
204 | + { |
205 | + case 3: |
206 | + case 5: |
207 | + case 6: |
208 | + case 9: |
209 | + case 15: |
210 | + bar (1); |
211 | + break; |
212 | + case 2: |
213 | + case 4: |
214 | + case 7: |
215 | + case 10: |
216 | + case 11: |
217 | + case 12: |
218 | + bar (2); |
219 | + break; |
220 | + case 0: |
221 | + case 1: |
222 | + case 8: |
223 | + case 13: |
224 | + case 16: |
225 | + bar (3); |
226 | + break; |
227 | + case 14: |
228 | + bar (4); |
229 | + break; |
230 | + default: |
231 | + bar (5); |
232 | + break; |
233 | + } |
234 | +} |
235 | + |
236 | +void *fooaddr2 = (void *) foo; |
237 | diff -Naur gcc-3.4.3.orig/gcc/testsuite/g++.old-deja/g++.other/comdat4.C gcc-3.4.3/gcc/testsuite/g++.old-deja/g++.other/comdat4.C |
238 | --- gcc-3.4.3.orig/gcc/testsuite/g++.old-deja/g++.other/comdat4.C 1970-01-01 00:00:00.000000000 +0000 |
239 | +++ gcc-3.4.3/gcc/testsuite/g++.old-deja/g++.other/comdat4.C 2004-11-05 17:08:46.562220120 +0000 |
240 | @@ -0,0 +1,57 @@ |
241 | +// PR c++/16276 |
242 | +// { dg-do link } |
243 | +// { dg-additional-sources " comdat4-aux.cc" } |
244 | +// { dg-options "-O2" } |
245 | + |
246 | +extern void |
247 | +bar (int x); |
248 | + |
249 | +inline void |
250 | +foo (int i) |
251 | +{ |
252 | + switch (i) |
253 | + { |
254 | + case 3: |
255 | + case 5: |
256 | + case 6: |
257 | + case 9: |
258 | + case 15: |
259 | + bar (1); |
260 | + break; |
261 | + case 2: |
262 | + case 4: |
263 | + case 7: |
264 | + case 10: |
265 | + case 11: |
266 | + case 12: |
267 | + bar (2); |
268 | + break; |
269 | + case 0: |
270 | + case 1: |
271 | + case 8: |
272 | + case 13: |
273 | + case 16: |
274 | + bar (3); |
275 | + break; |
276 | + case 14: |
277 | + bar (4); |
278 | + break; |
279 | + default: |
280 | + bar (5); |
281 | + break; |
282 | + } |
283 | +} |
284 | + |
285 | +void *fooaddr = (void *) foo; |
286 | + |
287 | +void |
288 | +bar (int x) |
289 | +{ |
290 | + __asm __volatile ("" : : "r" (x)); |
291 | +} |
292 | + |
293 | +int |
294 | +main (void) |
295 | +{ |
296 | + return 0; |
297 | +} |
298 | diff -Naur gcc-3.4.3.orig/gcc/varasm.c gcc-3.4.3/gcc/varasm.c |
299 | --- gcc-3.4.3.orig/gcc/varasm.c 2004-10-31 09:10:03.000000000 +0000 |
300 | +++ gcc-3.4.3/gcc/varasm.c 2004-11-05 17:08:46.603213888 +0000 |
301 | @@ -535,6 +535,53 @@ |
302 | text_section (); |
303 | } |
304 | |
305 | +/* Switch to read-only data section associated with function DECL. */ |
306 | + |
307 | +void |
308 | +default_function_rodata_section (tree decl) |
309 | +{ |
310 | + if (decl != NULL_TREE && DECL_SECTION_NAME (decl)) |
311 | + { |
312 | + const char *name = TREE_STRING_POINTER (DECL_SECTION_NAME (decl)); |
313 | + |
314 | + /* For .gnu.linkonce.t.foo we want to use .gnu.linkonce.r.foo. */ |
315 | + if (DECL_ONE_ONLY (decl) && strncmp (name, ".gnu.linkonce.t.", 16) == 0) |
316 | + { |
317 | + size_t len = strlen (name) + 1; |
318 | + char *rname = alloca (len); |
319 | + |
320 | + memcpy (rname, name, len); |
321 | + rname[14] = 'r'; |
322 | + named_section_flags (rname, SECTION_LINKONCE); |
323 | + return; |
324 | + } |
325 | + /* For .text.foo we want to use .rodata.foo. */ |
326 | + else if (flag_function_sections && flag_data_sections |
327 | + && strncmp (name, ".text.", 6) == 0) |
328 | + { |
329 | + size_t len = strlen (name) + 1; |
330 | + char *rname = alloca (len + 2); |
331 | + |
332 | + memcpy (rname, ".rodata", 7); |
333 | + memcpy (rname + 7, name + 5, len - 5); |
334 | + named_section_flags (rname, 0); |
335 | + return; |
336 | + } |
337 | + } |
338 | + |
339 | + readonly_data_section (); |
340 | +} |
341 | + |
342 | +/* Switch to read-only data section associated with function DECL |
343 | + for targets where that section should be always the single |
344 | + readonly data section. */ |
345 | + |
346 | +void |
347 | +default_no_function_rodata_section (tree decl ATTRIBUTE_UNUSED) |
348 | +{ |
349 | + readonly_data_section (); |
350 | +} |
351 | + |
352 | /* Switch to section for variable DECL. RELOC is the same as the |
353 | argument to SELECT_SECTION. */ |
354 |
Properties
Name | Value |
---|---|
svn:executable | * |