1#   Copyright (C) 2001 Free Software Foundation, Inc.
2#   Written By Nick Clifton
3# 
4# This file is free software; you can redistribute it and/or modify it
5# under the terms of the GNU General Public License as published by the
6# Free Software Foundation; either version 2, or (at your option) any
7# later version.
8# 
9# In addition to the permissions in the GNU General Public License, the
10# Free Software Foundation gives you unlimited permission to link the
11# compiled version of this file with other programs, and to distribute
12# those programs without any restriction coming from the use of this
13# file.  (The General Public License restrictions do apply in other
14# respects; for example, they cover modification of the file, and
15# distribution when not linked into another program.)
16# 
17# This file is distributed in the hope that it will be useful, but
18# WITHOUT ANY WARRANTY; without even the implied warranty of
19# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
20# General Public License for more details.
21# 
22# You should have received a copy of the GNU General Public License
23# along with this program; see the file COPYING.  If not, write to
24# the Free Software Foundation, 51 Franklin Street, Fifth Floor,
25# Boston, MA 02110-1301, USA.
26# 
27#    As a special exception, if you link this library with files
28#    compiled with GCC to produce an executable, this does not cause
29#    the resulting executable to be covered by the GNU General Public License.
30#    This exception does not however invalidate any other reasons why
31#    the executable file might be covered by the GNU General Public License.
32# 
33
34# This file just make a stack frame for the contents of the .fini and
35# .init sections.  Users may put any desired instructions in those
36# sections.
37
38#ifdef __ELF__
39#define TYPE(x) .type x,function
40#else
41#define TYPE(x)
42#endif
43
44	# Note - this macro is complemented by the FUNC_END macro
45	# in crtn.asm.  If you change this macro you must also change
46	# that macro match.
47.macro FUNC_START
48#ifdef __thumb__
49	.thumb
50	
51	push	{r3, r4, r5, r6, r7, lr}
52#else
53	.arm
54	#  Create a stack frame and save any call-preserved registers
55	mov	ip, sp
56	stmdb	sp!, {r3, r4, r5, r6, r7, r8, r9, sl, fp, ip, lr, pc}
57	sub	fp, ip, #4
58#endif
59.endm
60		
61	.file		"crti.asm"
62
63	.section .note.GNU-stack,"",%progbits
64
65	.section	".init"
66	.align 2
67	.global	_init
68#ifdef __thumb__
69	.thumb_func
70#endif
71	TYPE(_init)
72_init:
73	FUNC_START
74	
75		
76	.section	".fini"
77	.align	2
78	.global	_fini
79#ifdef __thumb__
80	.thumb_func
81#endif
82	TYPE(_fini)
83_fini:
84	FUNC_START
85	
86# end of crti.asm
87