]>
Commit | Line | Data |
---|---|---|
cd1a2927 MT |
1 | diff -ur gcc-2.95.3.old/gcc/config/alpha/crtbegin.asm gcc-2.95.3/gcc/config/alpha/crtbegin.asm |
2 | --- gcc-2.95.3.old/gcc/config/alpha/crtbegin.asm 2004-02-02 12:13:24.000000000 +0000 | |
3 | +++ gcc-2.95.3/gcc/config/alpha/crtbegin.asm 2004-02-02 12:16:37.000000000 +0000 | |
4 | @@ -1,42 +1,46 @@ | |
5 | - # Copyright (C) 1996, 1998 Free Software Foundation, Inc. | |
6 | - # Contributed by Richard Henderson (rth@tamu.edu) | |
7 | - # | |
8 | - # This file is free software; you can redistribute it and/or modify it | |
9 | - # under the terms of the GNU General Public License as published by the | |
10 | - # Free Software Foundation; either version 2, or (at your option) any | |
11 | - # later version. | |
12 | - # | |
13 | - # In addition to the permissions in the GNU General Public License, the | |
14 | - # Free Software Foundation gives you unlimited permission to link the | |
15 | - # compiled version of this file with other programs, and to distribute | |
16 | - # those programs without any restriction coming from the use of this | |
17 | - # file. (The General Public License restrictions do apply in other | |
18 | - # respects; for example, they cover modification of the file, and | |
19 | - # distribution when not linked into another program.) | |
20 | - # | |
21 | - # This file is distributed in the hope that it will be useful, but | |
22 | - # WITHOUT ANY WARRANTY; without even the implied warranty of | |
23 | - # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
24 | - # General Public License for more details. | |
25 | - # | |
26 | - # You should have received a copy of the GNU General Public License | |
27 | - # along with this program; see the file COPYING. If not, write to | |
28 | - # the Free Software Foundation, 59 Temple Place - Suite 330, | |
29 | - # Boston, MA 02111-1307, USA. | |
30 | - # | |
31 | - # As a special exception, if you link this library with files | |
32 | - # compiled with GCC to produce an executable, this does not cause | |
33 | - # the resulting executable to be covered by the GNU General Public License. | |
34 | - # This exception does not however invalidate any other reasons why | |
35 | - # the executable file might be covered by the GNU General Public License. | |
36 | - | |
37 | - # | |
38 | - # Heads of the constructor/destructor lists. | |
39 | - # | |
40 | - | |
41 | - # The __*TOR_LIST__ symbols are not global because when this file is used | |
42 | - # in a shared library, we do not want the symbol to fall over to the | |
43 | - # application's lists. | |
44 | +/* Copyright (C) 1996, 1998 Free Software Foundation, Inc. | |
45 | + * Contributed by Richard Henderson (rth@tamu.edu) | |
46 | + * | |
47 | + * This file is free software; you can redistribute it and/or modify it | |
48 | + * under the terms of the GNU General Public License as published by the | |
49 | + * Free Software Foundation; either version 2, or (at your option) any | |
50 | + * later version. | |
51 | + * | |
52 | + * In addition to the permissions in the GNU General Public License, the | |
53 | + * Free Software Foundation gives you unlimited permission to link the | |
54 | + * compiled version of this file with other programs, and to distribute | |
55 | + * those programs without any restriction coming from the use of this | |
56 | + * file. (The General Public License restrictions do apply in other | |
57 | + * respects; for example, they cover modification of the file, and | |
58 | + * distribution when not linked into another program.) | |
59 | + * | |
60 | + * This file is distributed in the hope that it will be useful, but | |
61 | + * WITHOUT ANY WARRANTY; without even the implied warranty of | |
62 | + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
63 | + * General Public License for more details. | |
64 | + * | |
65 | + * You should have received a copy of the GNU General Public License | |
66 | + * along with this program; see the file COPYING. If not, write to | |
67 | + * the Free Software Foundation, 59 Temple Place - Suite 330, | |
68 | + * Boston, MA 02111-1307, USA. | |
69 | + * | |
70 | + * As a special exception, if you link this library with files | |
71 | + * compiled with GCC to produce an executable, this does not cause | |
72 | + * the resulting executable to be covered by the GNU General Public License. | |
73 | + * This exception does not however invalidate any other reasons why | |
74 | + * the executable file might be covered by the GNU General Public License. | |
75 | + */ | |
76 | + | |
77 | +#include "auto-host.h" | |
78 | + | |
79 | +/* | |
80 | + * Heads of the constructor/destructor lists. | |
81 | + */ | |
82 | + | |
83 | +/* The __*TOR_LIST__ symbols are not global because when this file is used | |
84 | + * in a shared library, we do not want the symbol to fall over to the | |
85 | + * application's lists. | |
86 | + */ | |
87 | ||
88 | .section .ctors,"aw" | |
89 | ||
90 | @@ -53,34 +57,34 @@ | |
91 | .section .eh_frame,"aw" | |
92 | __EH_FRAME_BEGIN__: | |
93 | ||
94 | - # | |
95 | - # Fragment of the ELF _fini routine that invokes our dtor cleanup. | |
96 | - # | |
97 | +/* | |
98 | + * Fragment of the ELF _fini routine that invokes our dtor cleanup. | |
99 | + */ | |
100 | ||
101 | .section .fini,"ax" | |
102 | ||
103 | - # Since the bits of the _fini function are spread across many | |
104 | - # object files, each potentially with its own GP, we must | |
105 | - # assume we need to load ours. Further, our .fini section | |
106 | - # can easily be more than 4MB away from our .text bits so we | |
107 | - # can't use bsr. | |
108 | + /* Since the bits of the _fini function are spread across many | |
109 | + object files, each potentially with its own GP, we must | |
110 | + assume we need to load ours. Further, our .fini section | |
111 | + can easily be more than 4MB away from our .text bits so we | |
112 | + can't use bsr. */ | |
113 | ||
114 | br $29,1f | |
115 | 1: ldgp $29,0($29) | |
116 | jsr $26,__do_global_dtors_aux | |
117 | ||
118 | - # Ideally this call would go in crtend.o, except that we can't | |
119 | - # get hold of __EH_FRAME_BEGIN__ there. | |
120 | + /* Ideally this call would go in crtend.o, except that we can't | |
121 | + get hold of __EH_FRAME_BEGIN__ there */ | |
122 | ||
123 | jsr $26,__do_frame_takedown | |
124 | ||
125 | - # Must match the alignment we got from crti.o else we get | |
126 | - # zero-filled holes in our _fini function and then SIGILL. | |
127 | + /* Must match the alignment we got from crti.o else we get | |
128 | + zero-filled holes in our _fini function and then SIGILL. */ | |
129 | .align 3 | |
130 | ||
131 | - # | |
132 | - # Fragment of the ELF _init routine that sets up the frame info. | |
133 | - # | |
134 | +/* | |
135 | + * Fragment of the ELF _init routine that sets up the frame info. | |
136 | + */ | |
137 | ||
138 | .section .init,"ax" | |
139 | br $29,1f | |
140 | @@ -88,13 +92,13 @@ | |
141 | jsr $26,__do_frame_setup | |
142 | .align 3 | |
143 | ||
144 | - # | |
145 | - # Invoke our destructors in order. | |
146 | - # | |
147 | +/* | |
148 | + * Invoke our destructors in order. | |
149 | + */ | |
150 | ||
151 | .data | |
152 | ||
153 | - # Support recursive calls to exit. | |
154 | +/* Support recursive calls to exit. */ | |
155 | $ptr: .quad __DTOR_LIST__ | |
156 | ||
157 | /* A globally unique widget for c++ local destructors to hang off. | |
158 | @@ -128,17 +132,28 @@ | |
159 | .ent __do_global_dtors_aux | |
160 | ||
161 | __do_global_dtors_aux: | |
162 | + ldgp $29,0($27) | |
163 | lda $30,-16($30) | |
164 | .frame $30,16,$26,0 | |
165 | stq $9,8($30) | |
166 | stq $26,0($30) | |
167 | .mask 0x4000200,-16 | |
168 | - .prologue 0 | |
169 | + .prologue 1 | |
170 | ||
171 | +#ifdef SHARED | |
172 | + /* Do c++ local destructors. */ | |
173 | + lda $1,__cxa_finalize | |
174 | + beq $1,2f | |
175 | + lda $16,__dso_handle | |
176 | + jsr $26,__cxa_finalize | |
177 | + ldgp $29,0($26) | |
178 | +2: | |
179 | +#endif | |
180 | lda $9,$ptr | |
181 | br 1f | |
182 | 0: stq $1,0($9) | |
183 | jsr $26,($27) | |
184 | + ldgp $29,0($26) | |
185 | 1: ldq $1,0($9) | |
186 | ldq $27,8($1) | |
187 | addq $1,8,$1 | |
188 | @@ -151,11 +166,11 @@ | |
189 | ||
190 | .end __do_global_dtors_aux | |
191 | ||
192 | - # | |
193 | - # Install our frame info. | |
194 | - # | |
195 | +/* | |
196 | + * Install our frame info. | |
197 | + */ | |
198 | ||
199 | - # ??? How can we rationally keep this size correct? | |
200 | +/* ??? How can we rationally keep this size correct? */ | |
201 | ||
202 | .section .bss | |
203 | .type $object,@object | |
204 | @@ -188,9 +203,9 @@ | |
205 | ||
206 | .end __do_frame_setup | |
207 | ||
208 | - # | |
209 | - # Remove our frame info. | |
210 | - # | |
211 | +/* | |
212 | + * Remove our frame info. | |
213 | + */ | |
214 | ||
215 | .align 3 | |
216 | .ent __do_frame_takedown | |
217 | @@ -215,3 +230,6 @@ | |
218 | ||
219 | .weak __register_frame_info | |
220 | .weak __deregister_frame_info | |
221 | +#ifdef SHARED | |
222 | +.weak __cxa_finalize | |
223 | +#endif | |
224 | diff -ur gcc-2.95.3.old/gcc/config/alpha/elf.h gcc-2.95.3/gcc/config/alpha/elf.h | |
225 | --- gcc-2.95.3.old/gcc/config/alpha/elf.h 1999-06-21 21:15:10.000000000 +0100 | |
226 | +++ gcc-2.95.3/gcc/config/alpha/elf.h 2004-02-02 12:16:37.000000000 +0000 | |
227 | @@ -513,7 +513,7 @@ | |
228 | #define STARTFILE_SPEC \ | |
229 | "%{!shared: \ | |
230 | %{pg:gcrt1.o%s} %{!pg:%{p:gcrt1.o%s} %{!p:crt1.o%s}}}\ | |
231 | - crti.o%s crtbegin.o%s" | |
232 | + crti.o%s %{shared:crtbeginS.o%s}%{!shared:crtbegin.o%s}" | |
233 | ||
234 | /* Provide a ENDFILE_SPEC appropriate for ELF. Here we tack on the | |
235 | magical crtend.o file which provides part of the support for | |
236 | @@ -522,7 +522,7 @@ | |
237 | ||
238 | #undef ENDFILE_SPEC | |
239 | #define ENDFILE_SPEC \ | |
240 | - "crtend.o%s crtn.o%s" | |
241 | + "%{shared:crtendS.o%s}%{!shared:crtend.o%s} crtn.o%s" | |
242 | ||
243 | /* We support #pragma. */ | |
244 | #define HANDLE_SYSV_PRAGMA | |
245 | diff -ur gcc-2.95.3.old/gcc/config/alpha/t-crtbe gcc-2.95.3/gcc/config/alpha/t-crtbe | |
246 | --- gcc-2.95.3.old/gcc/config/alpha/t-crtbe 1998-12-16 21:01:05.000000000 +0000 | |
247 | +++ gcc-2.95.3/gcc/config/alpha/t-crtbe 2004-02-02 12:16:37.000000000 +0000 | |
248 | @@ -3,7 +3,13 @@ | |
249 | ||
250 | # Assemble startup files. | |
251 | crtbegin.o: $(srcdir)/config/alpha/crtbegin.asm $(GCC_PASSES) | |
252 | - $(GCC_FOR_TARGET) -c -o crtbegin.o -x assembler $(srcdir)/config/alpha/crtbegin.asm | |
253 | + $(GCC_FOR_TARGET) -c -o crtbegin.o -x assembler-with-cpp -I. $(srcdir)/config/alpha/crtbegin.asm | |
254 | ||
255 | crtend.o: $(srcdir)/config/alpha/crtend.asm $(GCC_PASSES) | |
256 | $(GCC_FOR_TARGET) -c -o crtend.o -x assembler $(srcdir)/config/alpha/crtend.asm | |
257 | + | |
258 | +crtbeginS.o: $(srcdir)/config/alpha/crtbegin.asm $(GCC_PASSES) | |
259 | + $(GCC_FOR_TARGET) -DSHARED -c -o crtbeginS.o -x assembler-with-cpp -I. $(srcdir)/config/alpha/crtbegin.asm | |
260 | + | |
261 | +crtendS.o: $(srcdir)/config/alpha/crtend.asm $(GCC_PASSES) | |
262 | + $(GCC_FOR_TARGET) -c -o crtendS.o -x assembler -I. $(srcdir)/config/alpha/crtend.asm | |
263 | diff -ur gcc-2.95.3.old/gcc/configure.in gcc-2.95.3/gcc/configure.in | |
264 | --- gcc-2.95.3.old/gcc/configure.in 2004-02-02 12:13:24.000000000 +0000 | |
265 | +++ gcc-2.95.3/gcc/configure.in 2004-02-02 12:16:37.000000000 +0000 | |
266 | @@ -607,7 +607,7 @@ | |
267 | tm_file="${tm_file} alpha/elf.h alpha/linux.h alpha/linux-elf.h" | |
268 | target_cpu_default="MASK_GAS" | |
269 | tmake_file="t-linux t-linux-gnulibc1 alpha/t-linux alpha/t-crtbe alpha/t-ieee" | |
270 | - extra_parts="crtbegin.o crtend.o" | |
271 | + extra_parts="crtbegin.o crtend.o crtbeginS.o crtendS.o" | |
272 | xmake_file=none | |
273 | gas=yes gnu_ld=yes | |
274 | if test x$enable_threads = xyes; then | |
275 | @@ -618,7 +618,7 @@ | |
276 | tm_file="${tm_file} alpha/elf.h alpha/linux.h alpha/linux-elf.h" | |
277 | target_cpu_default="MASK_GAS" | |
278 | tmake_file="t-linux alpha/t-linux alpha/t-crtbe alpha/t-ieee" | |
279 | - extra_parts="crtbegin.o crtend.o" | |
280 | + extra_parts="crtbegin.o crtend.o crtbeginS.o crtendS.o" | |
281 | xmake_file=none | |
282 | gas=yes gnu_ld=yes | |
283 | if test x$enable_threads = xyes; then | |
284 | @@ -629,7 +629,7 @@ | |
285 | tm_file="${tm_file} alpha/elf.h alpha/netbsd.h alpha/netbsd-elf.h" | |
286 | target_cpu_default="MASK_GAS" | |
287 | tmake_file="alpha/t-crtbe alpha/t-ieee" | |
288 | - extra_parts="crtbegin.o crtend.o" | |
289 | + extra_parts="crtbegin.o crtend.o crtbeginS.o crtendS.o" | |
290 | xmake_file=none | |
291 | gas=yes gnu_ld=yes | |
292 | ;; | |
293 | --- gcc-2.95.3.old/gcc/configure 2004-02-02 12:13:24.000000000 +0000 | |
294 | +++ gcc-2.95.3/gcc/configure 2004-02-02 14:20:41.000000000 +0000 | |
295 | @@ -3041,7 +3041,7 @@ | |
296 | tm_file="${tm_file} alpha/elf.h alpha/linux.h alpha/linux-elf.h" | |
297 | target_cpu_default="MASK_GAS" | |
298 | tmake_file="t-linux t-linux-gnulibc1 alpha/t-linux alpha/t-crtbe alpha/t-ieee" | |
299 | - extra_parts="crtbegin.o crtend.o" | |
300 | + extra_parts="crtbegin.o crtbeginS.o crtend.o crtendS.o" | |
301 | xmake_file=none | |
302 | gas=yes gnu_ld=yes | |
303 | if test x$enable_threads = xyes; then | |
304 | @@ -3052,7 +3052,7 @@ | |
305 | tm_file="${tm_file} alpha/elf.h alpha/linux.h alpha/linux-elf.h" | |
306 | target_cpu_default="MASK_GAS" | |
307 | tmake_file="t-linux alpha/t-linux alpha/t-crtbe alpha/t-ieee" | |
308 | - extra_parts="crtbegin.o crtend.o" | |
309 | + extra_parts="crtbegin.o crtbeginS.o crtend.o crtendS.o" | |
310 | xmake_file=none | |
311 | gas=yes gnu_ld=yes | |
312 | if test x$enable_threads = xyes; then | |
313 | @@ -3063,7 +3063,7 @@ | |
314 | tm_file="${tm_file} alpha/elf.h alpha/netbsd.h alpha/netbsd-elf.h" | |
315 | target_cpu_default="MASK_GAS" | |
316 | tmake_file="alpha/t-crtbe alpha/t-ieee" | |
317 | - extra_parts="crtbegin.o crtend.o" | |
318 | + extra_parts="crtbegin.o crtbeginS.o crtend.o crtendS.o" | |
319 | xmake_file=none | |
320 | gas=yes gnu_ld=yes | |
321 | ;; |