crtn.asm revision 259065
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