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