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, 59 Temple Place - Suite 330, 25# Boston, MA 02111-1307, 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 optimisations 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.macro FUNC_END 47#ifdef __thumb__ 48 .thumb 49 50 pop {r4, r5, r6, r7} 51 pop {r3} 52 mov lr, r3 53#else 54 .arm 55 56 ldmdb fp, {r4, r5, r6, r7, r8, r9, sl, fp, sp, lr} 57#endif 58 59#if defined __THUMB_INTERWORK__ || defined __thumb__ 60 bx lr 61#else 62#ifdef __APCS_26__ 63 movs pc, lr 64#else 65 mov pc, lr 66#endif 67#endif 68.endm 69 70 71 .file "crtn.asm" 72 73 .section ".init" 74 ;; 75 FUNC_END 76 77 .section ".fini" 78 ;; 79 FUNC_END 80 81# end of crtn.asm 82