URL
https://opencores.org/ocsvn/openrisc_me/openrisc_me/trunk
Subversion Repositories openrisc_me
[/] [openrisc/] [trunk/] [gnu-src/] [gcc-4.5.1/] [gcc/] [config/] [sh/] [crti.asm] - Rev 282
Compare with Previous | Blame | View Log
/* Copyright (C) 2000, 2001, 2009 Free Software Foundation, Inc.This file was adapted from glibc sources.This file is part of GCC.GCC is free software; you can redistribute it and/or modify itunder the terms of the GNU General Public License as published by theFree Software Foundation; either version 3, or (at your option) anylater version.GCC is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; without even the implied warranty ofMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNUGeneral Public License for more details.Under Section 7 of GPL version 3, you are granted additionalpermissions described in the GCC Runtime Library Exception, version3.1, as published by the Free Software Foundation.You should have received a copy of the GNU General Public License anda copy of the GCC Runtime Library Exception along with this program;see the files COPYING3 and COPYING.RUNTIME respectively. If not, see<http://www.gnu.org/licenses/>. *//* The code in sections .init and .fini is supposed to be a singleregular function. The function in .init is called directly fromstart in crt1.asm. The function in .fini is atexit()ed in crt1.asmtoo.crti.asm contributes the prologue of a function to these sections,and crtn.asm comes up the epilogue. STARTFILE_SPEC should listcrti.o before any other object files that might add code to .initor .fini sections, and ENDFILE_SPEC should list crtn.o after anysuch object files. */.section .init/* The alignment below can't be smaller, otherwise the mova belowbreaks. Yes, we might align just the label, but then we'd beexchanging an alignment here for one there, since the code fragmentbelow ensures 4-byte alignment on __ELF__. */#ifdef __ELF__.p2align 2#else.p2align 1#endif.global _init_init:#if __SHMEDIA__addi r15, -16, r15st.q r15, 8, r14st.q r15, 0, r18add r15, r63, r14#elif __SH5__ && ! __SHMEDIA__mov r15,r0add #-8,r15mov.l r14,@-r0sts.l pr,@-r0mov r15,r14nop#else#ifdef __ELF__mov.l r12,@-r15mova 0f,r0mov.l 0f,r12#endifmov.l r14,@-r15#ifdef __ELF__add r0,r12#endifsts.l pr,@-r15#ifdef __ELF__bra 1f#endifmov r15,r14#ifdef __ELF__0: .long _GLOBAL_OFFSET_TABLE_1:#endif#endif /* __SHMEDIA__ */.section .fini/* The alignment below can't be smaller, otherwise the mova belowbreaks. Yes, we might align just the label, but then we'd beexchanging an alignment here for one there, since the code fragmentbelow ensures 4-byte alignment on __ELF__. */#ifdef __ELF__.p2align 2#else.p2align 1#endif.global _fini_fini:#if __SHMEDIA__addi r15, -16, r15st.q r15, 8, r14st.q r15, 0, r18add r15, r63, r14#elif __SH5__ && ! __SHMEDIA__mov r15,r0add #-8,r15mov.l r14,@-r0sts.l pr,@-r0mov r15,r14nop#else#ifdef __ELF__mov.l r12,@-r15mova 0f,r0mov.l 0f,r12#endifmov.l r14,@-r15#ifdef __ELF__add r0,r12#endifsts.l pr,@-r15#ifdef __ELF__bra 1f#endifmov r15,r14#ifdef __ELF__0: .long _GLOBAL_OFFSET_TABLE_1:#endif#endif /* __SHMEDIA__ */
