1 /* Copyright
(C
) 2000, 2001, 2003 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 #
include "auto-host.h"
21 .
section .ctors
,"aw","progbits"
26 .
section .dtors
,"aw","progbits"
31 .
section .jcr
,"aw","progbits"
36 #ifdef HAVE_INITFINI_ARRAY
38 .
section .init_array
, "a"
39 data8
@fptr(__do_global_ctors_aux
)
41 #else
/* !HAVE_INITFINI_ARRAY
*/
43 * Fragment of the ELF _init routine that invokes our dtor cleanup.
45 * We make the
call by indirection
, because
in large programs the
46 * .fini
and .init sections are
not in range of the destination
, and
47 * we cannot allow the linker to insert a stub at the
end of
this
48 * fragment of the _fini function. Further
, Itanium does
not implement
49 * the long branch instructions
, and we do
not wish every program to
50 * trap to the kernel for emulation.
52 * Note that we require __do_global_ctors_aux to preserve the GP
,
53 * so that the next fragment
in .fini gets the right value.
55 .
section .init
,"ax","progbits"
57 movl r2 = @pcrel(__do_global_ctors_aux - 16)
67 br.call.sptk.many b0 = b6
70 #endif
/* !HAVE_INITFINI_ARRAY
*/
74 .
proc __do_global_ctors_aux
75 __do_global_ctors_aux:
78 for
(loc0
= __CTOR_END__
-1; *p != -1; --p)
82 alloc loc2
= ar.pfs
, 0, 5, 0, 0
83 movl loc0
= @gprel(__CTOR_END__
- 8)
94 cmp.
eq p6
, p0
= -1, loc3
96 (p6
) br.cond.spnt.few .exit
98 .
loop: ld8 r15
= [loc3
], 8
103 ld8 loc3
= [loc0
], -8
105 br.
call.sptk.many rp
= b6
108 cmp.ne p6
, p0
= -1, loc3
110 (p6
) br.cond.sptk.few .
loop
117 .
endp __do_global_ctors_aux