crti.S revision 1.1.1.4
1# Copyright (C) 2001-2017 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# This file just make a stack frame for the contents of the .fini and 30# .init sections. Users may put any desired instructions in those 31# sections. 32 33#ifdef __ELF__ 34#define TYPE(x) .type x,function 35#else 36#define TYPE(x) 37#endif 38#ifdef __ARM_EABI__ 39/* Some attributes that are common to all routines in this file. */ 40 /* Tag_ABI_align_needed: This code does not require 8-byte 41 alignment from the caller. */ 42 /* .eabi_attribute 24, 0 -- default setting. */ 43 /* Tag_ABI_align_preserved: This code preserves 8-byte 44 alignment in any callee. */ 45 .eabi_attribute 25, 1 46#endif /* __ARM_EABI__ */ 47 48 # Note - this macro is complemented by the FUNC_END macro 49 # in crtn.S. If you change this macro you must also change 50 # that macro match. 51.macro FUNC_START 52#ifdef __thumb__ 53 .thumb 54 55 push {r3, r4, r5, r6, r7, lr} 56#else 57 .arm 58 # Create a stack frame and save any call-preserved registers 59 mov ip, sp 60 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, sl, fp, ip, lr, pc} 61 sub fp, ip, #4 62#endif 63.endm 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.S 87