1#   Copyright (C) 2001, 2004 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 makes sure that the .fini and .init sections do in
35# fact return.  Users may put any desired instructions in those sections.
36# This file is the last thing linked into any executable.
37
38	# Note - this macro is complemented by the FUNC_START macro
39	# in crti.asm.  If you change this macro you must also change
40	# that macro match.
41	#
42	# Note - we do not try any fancy optimizations of the return
43	# sequences here, it is just not worth it.  Instead keep things
44	# simple.  Restore all the save resgisters, including the link
45	# register and then perform the correct function return instruction.
46	# We also save/restore r3 to ensure stack alignment.
47.macro FUNC_END
48#ifdef __thumb__
49	.thumb
50	
51	pop	{r3, r4, r5, r6, r7}
52	pop	{r3}
53	mov	lr, r3
54#else
55	.arm
56	
57	sub	sp, fp, #40
58	ldmfd	sp, {r4, r5, r6, r7, r8, r9, sl, fp, sp, lr}
59#endif
60	
61#if defined __THUMB_INTERWORK__ || defined __thumb__
62	bx	lr
63#else
64	mov	pc, lr
65#endif
66.endm
67		
68	
69	.file		"crtn.asm"
70
71	.section	".init"
72	;;
73	FUNC_END
74	
75	.section	".fini"
76	;;
77	FUNC_END
78	
79# end of crtn.asm
80