1# Copyright (C) 2001-2020 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 3, or (at your option) any 7# later version. 8# 9# This file is distributed in the hope that it will be useful, but 10# WITHOUT ANY WARRANTY; without even the implied warranty of 11# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12# General Public License for more details. 13# 14# Under Section 7 of GPL version 3, you are granted additional 15# permissions described in the GCC Runtime Library Exception, version 16# 3.1, as published by the Free Software Foundation. 17# 18# You should have received a copy of the GNU General Public License and 19# a copy of the GCC Runtime Library Exception along with this program; 20# see the files COPYING3 and COPYING.RUNTIME respectively. If not, see 21# <http://www.gnu.org/licenses/>. 22 23/* An executable stack is *not* required for these functions. */ 24#if defined(__ELF__) && defined(__linux__) 25.section .note.GNU-stack,"",%progbits 26.previous 27#endif 28 29#ifdef __ARM_EABI__ 30/* Some attributes that are common to all routines in this file. */ 31 /* Tag_ABI_align_needed: This code does not require 8-byte 32 alignment from the caller. */ 33 /* .eabi_attribute 24, 0 -- default setting. */ 34 /* Tag_ABI_align_preserved: This code preserves 8-byte 35 alignment in any callee. */ 36 .eabi_attribute 25, 1 37#endif /* __ARM_EABI__ */ 38 39# This file just makes sure that the .fini and .init sections do in 40# fact return. Users may put any desired instructions in those sections. 41# This file is the last thing linked into any executable. 42 43 # Note - this macro is complemented by the FUNC_START macro 44 # in crti.S. If you change this macro you must also change 45 # that macro match. 46 # 47 # Note - we do not try any fancy optimizations of the return 48 # sequences here, it is just not worth it. Instead keep things 49 # simple. Restore all the save registers, including the link 50 # register and then perform the correct function return instruction. 51 # We also save/restore r3 to ensure stack alignment. 52.macro FUNC_END 53#ifdef __thumb__ 54 .thumb 55 56 pop {r3, r4, r5, r6, r7} 57 pop {r3} 58 mov lr, r3 59#else 60 .arm 61 62 sub sp, fp, #40 63 ldmfd sp, {r4, r5, r6, r7, r8, r9, sl, fp, sp, lr} 64#endif 65 66#if defined __THUMB_INTERWORK__ || defined __thumb__ 67 bx lr 68#else 69 mov pc, lr 70#endif 71.endm 72 73 74 .section ".init" 75 ;; 76 FUNC_END 77 78 .section ".fini" 79 ;; 80 FUNC_END 81 82# end of crtn.S 83