Update to LGPL v2.1.
[kopensolaris-gnu/glibc.git] / sysdeps / s390 / s390-32 / initfini.c
1 /* Special .init and .fini section support for S/390.
2    Copyright (C) 2000, 2001 Free Software Foundation, Inc.
3    This file is part of the GNU C Library.
4
5    The GNU C Library is free software; you can redistribute it and/or
6    modify it under the terms of the GNU Lesser General Public
7    License as published by the Free Software Foundation; either
8    version 2.1 of the License, or (at your option) any later version.
9
10    The GNU C Library is distributed in the hope that it will be useful,
11    but WITHOUT ANY WARRANTY; without even the implied warranty of
12    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13    Lesser General Public License for more details.
14
15    You should have received a copy of the GNU Lesser General Public
16    License along with the GNU C Library; if not, write to the Free
17    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
18    02111-1307 USA.  */
19
20 /* This file is compiled into assembly code which is then munged by a sed
21    script into two files: crti.s and crtn.s.
22
23    * crti.s puts a function prologue at the beginning of the
24    .init and .fini sections and defines global symbols for
25    those addresses, so they can be called as functions.
26
27    * crtn.s puts the corresponding function epilogues
28    in the .init and .fini sections. */
29
30 __asm__ ("
31
32 #include \"defs.h\"
33
34 /*@HEADER_ENDS*/
35
36 /*@TESTS_BEGIN*/
37
38 /*@TESTS_END*/
39
40 /*@_init_PROLOG_BEGINS*/
41
42         .section .init
43 #NO_APP
44         .align 4
45 .globl _init
46         .type    _init,@function
47 _init:
48 #       leaf function           0
49 #       automatics              0
50 #       outgoing args           0
51 #       need frame pointer      0
52 #       call alloca             0
53 #       has varargs             0
54 #       incoming args (stack)   0
55 #       function length         36
56         STM     6,15,24(15)
57         BRAS    13,.LTN1_0
58 .LT1_0:
59 .LC14:
60         .long   __gmon_start__@GOT
61 .LC15:
62         .long   _GLOBAL_OFFSET_TABLE_-.LT1_0
63 .LTN1_0:
64         LR      1,15
65         AHI     15,-96
66         ST      1,0(15)
67         L       12,.LC15-.LT1_0(13)
68         AR      12,13
69         L     1,.LC14-.LT1_0(13)
70         L     1,0(1,12)
71         LTR   1,1
72         JE    .L22
73         BASR  14,1
74 .L22:
75 #APP
76         .align 4,0x07
77         END_INIT
78
79 /*@_init_PROLOG_ENDS*/
80
81 /*@_init_EPILOG_BEGINS*/
82         .align 4
83         .section .init
84 #NO_APP
85         .align 4
86         L       4,152(15)
87         LM      6,15,120(15)
88         BR      4
89 #APP
90         END_INIT
91
92 /*@_init_EPILOG_ENDS*/
93
94 /*@_fini_PROLOG_BEGINS*/
95         .section .fini
96 #NO_APP
97         .align 4
98 .globl _fini
99         .type    _fini,@function
100 _fini:
101 #       leaf function           0
102 #       automatics              0
103 #       outgoing args           0
104 #       need frame pointer      0
105 #       call alloca             0
106 #       has varargs             0
107 #       incoming args (stack)   0
108 #       function length         30
109         STM     6,15,24(15)
110         BRAS    13,.LTN2_0
111 .LT2_0:
112 .LC17:
113         .long   _GLOBAL_OFFSET_TABLE_-.LT2_0
114 .LTN2_0:
115         LR      1,15
116         AHI     15,-96
117         ST      1,0(15)
118         L       12,.LC17-.LT2_0(13)
119         AR      12,13
120 #APP
121         .align 4,0x07
122         END_FINI
123
124 /*@_fini_PROLOG_ENDS*/
125
126 /*@_fini_EPILOG_BEGINS*/
127         .align 4
128         .section .fini
129 #NO_APP
130         .align 4
131         L       4,152(15)
132         LM      6,15,120(15)
133         BR      4
134 #APP
135         END_FINI
136
137 /*@_fini_EPILOG_ENDS*/
138
139 /*@TRAILER_BEGINS*/
140 ");