1# crti.s for sysv4
2
3#   Copyright (C) 1996-2022 Free Software Foundation, Inc.
4#   Written By Michael Meissner
5#
6# This file is free software; you can redistribute it and/or modify it
7# under the terms of the GNU General Public License as published by the
8# Free Software Foundation; either version 3, or (at your option) any
9# later version.
10#
11# This file is distributed in the hope that it will be useful, but
12# WITHOUT ANY WARRANTY; without even the implied warranty of
13# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14# General Public License for more details.
15#
16# Under Section 7 of GPL version 3, you are granted additional
17# permissions described in the GCC Runtime Library Exception, version
18# 3.1, as published by the Free Software Foundation.
19#
20# You should have received a copy of the GNU General Public License and
21# a copy of the GCC Runtime Library Exception along with this program;
22# see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
23# <http://www.gnu.org/licenses/>.
24
25# This file just supplies labeled starting points for the .got* and other
26# special sections.  It is linked in first before other modules.
27
28          .ident    "GNU C scrti.s"
29
30#ifndef __powerpc64__
31# Start of .text
32          .section ".text"
33          .globl    _ex_text0
34_ex_text0:
35
36# Exception range
37          .section ".exception_ranges","aw"
38          .globl    _ex_range0
39_ex_range0:
40
41# List of C++ constructors
42          .section ".ctors","aw"
43          .globl    __CTOR_LIST__
44          .type     __CTOR_LIST__,@object
45__CTOR_LIST__:
46
47# List of C++ destructors
48          .section ".dtors","aw"
49          .globl    __DTOR_LIST__
50          .type     __DTOR_LIST__,@object
51__DTOR_LIST__:
52
53# Head of _init function used for static constructors
54          .section ".init","ax"
55          .align 2
56          .globl _init
57          .type _init,@function
58_init:    stwu      %r1,-16(%r1)
59          mflr      %r0
60          stw       %r31,12(%r1)
61          stw       %r0,16(%r1)
62
63          bl        _GLOBAL_OFFSET_TABLE_-4       # get the GOT address
64          mflr      %r31
65
66#         lwz       %r3,_ex_shared0@got(%r31)
67#         lwz       %r4,-8(%r3)                   # _ex_register or 0
68#         cmpi      %cr0,%r4,0
69#         beq       .Lno_reg
70#         mtlr      %r4
71#         blrl
72#.Lno_reg:
73
74# Head of _fini function used for static destructors
75          .section ".fini","ax"
76          .align 2
77          .globl _fini
78          .type _fini,@function
79_fini:    stwu      %r1,-16(%r1)
80          mflr      %r0
81          stw       %r31,12(%r1)
82          stw       %r0,16(%r1)
83
84          bl        _GLOBAL_OFFSET_TABLE_-4       # get the GOT address
85          mflr      %r31
86
87# _environ and its evil twin environ, pointing to the environment
88          .section ".sdata","aw"
89          .align 2
90          .globl _environ
91          .space 4
92          .weak     environ
93          .set      environ,_environ
94#endif
95