1 /* Copyright
(C
) 2000 Free Software Foundation
, Inc.
2 Contributed by Jes Sorensen
, <Jes.Sorensen
@cern.
ch>
4 The GNU C Library is free software
; you can redistribute it and/or
5 modify it under the terms of the GNU Library General
Public License as
6 published by the Free Software Foundation
; either version 2 of the
7 License
, or (at your option
) any later version.
9 The GNU C Library is distributed
in the hope that it will be useful
,
10 but WITHOUT ANY WARRANTY
; without even the implied warranty of
11 MERCHANTABILITY
or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 Library General
Public License for more details.
14 You should have received a copy of the GNU Library General
Public
15 License along with the GNU C Library
; see the file COPYING.LIB. If not,
16 write to the Free Software Foundation
, Inc.
, 59 Temple Place
- Suite
330,
17 Boston
, MA
02111-1307, USA.
*/
19 .
section .ctors
,"aw","progbits"
24 .
section .dtors
,"aw","progbits"
30 .
type dtor_ptr#
,@object
33 data8 __DTOR_LIST__#
+ 8
36 .
type __ia64_app_header#
,@object
37 .
size __ia64_app_header#
,8
38 .
global __ia64_app_header
40 data8
@segrel(.Lsegrel_ref#
)
43 /* A handle for __cxa_finalize to manage c
++ local destructors.
*/
45 .
type __dso_handle#
,@object
60 * Fragment of the ELF _fini routine that invokes our dtor cleanup.
62 * We make the
call by indirection
, because
in large programs the
63 * .fini
and .init sections are
not in range of the destination
, and
64 * we cannot allow the linker to insert a stub at the
end of
this
65 * fragment of the _fini function. Further
, Itanium does
not implement
66 * the long branch instructions
, and we do
not wish every program to
67 * trap to the kernel for emulation.
69 * Note that we require __do_global_dtors_aux to preserve the GP
,
70 * so that the next fragment
in .fini gets the right value.
72 .
section .fini
,"ax","progbits"
74 movl r2 = @gprel(__do_global_dtors_aux#)
84 br.call.sptk.many b0 = b6
90 * Fragment of the ELF _init routine that
sets up __ia64_app_header
93 .
section .init
,"ax","progbits"
96 addl r2 = @gprel(__ia64_app_header), gp
113 .
proc __do_global_dtors_aux#
114 __do_global_dtors_aux:
117 alloc loc3 = ar.pfs, 0, 4, 1, 0
118 addl loc0 = @gprel(dtor_ptr#), gp
129 __cxa_finalize
(__dso_handle
)
132 alloc loc3 = ar.pfs, 0, 4, 1, 0
133 addl loc0 = @gprel(dtor_ptr#), gp
134 addl r16 = @ltoff(@fptr(__cxa_finalize#)), gp
140 addl out0 = @ltoff(__dso_handle#), gp
141 cmp.ne p7, p0 = r0, r16
146 (p7) ld8 r18 = [r16], 8
157 (p7) br.call.sptk.many b0 = b6
178 br.call.sptk.many b0 = b6
188 cmp.ne p6, p0 = r0, r16
189 (p6) br.cond.sptk.few 0b
200 .
endp __do_global_dtors_aux#
203 .weak __cxa_finalize#