diff options
Diffstat (limited to 'contrib/gcc/config/rs6000/eabi.asm')
-rw-r--r-- | contrib/gcc/config/rs6000/eabi.asm | 299 |
1 files changed, 0 insertions, 299 deletions
diff --git a/contrib/gcc/config/rs6000/eabi.asm b/contrib/gcc/config/rs6000/eabi.asm deleted file mode 100644 index b5d4505d9ed3..000000000000 --- a/contrib/gcc/config/rs6000/eabi.asm +++ /dev/null @@ -1,299 +0,0 @@ -/* - * Special support for eabi and SVR4 - * - * Copyright (C) 1995, 1996, 1998, 2000, 2001 Free Software Foundation, Inc. - * Written By Michael Meissner - * - * This file is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by the - * Free Software Foundation; either version 2, or (at your option) any - * later version. - * - * In addition to the permissions in the GNU General Public License, the - * Free Software Foundation gives you unlimited permission to link the - * compiled version of this file with other programs, and to distribute - * those programs without any restriction coming from the use of this - * file. (The General Public License restrictions do apply in other - * respects; for example, they cover modification of the file, and - * distribution when not linked into another program.) - * - * This file is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; see the file COPYING. If not, write to - * the Free Software Foundation, 51 Franklin Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - * - * As a special exception, if you link this library with files - * compiled with GCC to produce an executable, this does not cause - * the resulting executable to be covered by the GNU General Public License. - * This exception does not however invalidate any other reasons why - * the executable file might be covered by the GNU General Public License. - */ - -/* Do any initializations needed for the eabi environment */ - - .file "eabi.asm" - .section ".text" - #include "ppc-asm.h" - -#ifndef __powerpc64__ - - .section ".got2","aw" - .align 2 -.LCTOC1 = . /* +32768 */ - -/* Table of addresses */ -.Ltable = .-.LCTOC1 - .long .LCTOC1 /* address we are really at */ - -.Lsda = .-.LCTOC1 - .long _SDA_BASE_ /* address of the first small data area */ - -.Lsdas = .-.LCTOC1 - .long __SDATA_START__ /* start of .sdata/.sbss section */ - -.Lsdae = .-.LCTOC1 - .long __SBSS_END__ /* end of .sdata/.sbss section */ - -.Lsda2 = .-.LCTOC1 - .long _SDA2_BASE_ /* address of the second small data area */ - -.Lsda2s = .-.LCTOC1 - .long __SDATA2_START__ /* start of .sdata2/.sbss2 section */ - -.Lsda2e = .-.LCTOC1 - .long __SBSS2_END__ /* end of .sdata2/.sbss2 section */ - -#ifdef _RELOCATABLE -.Lgots = .-.LCTOC1 - .long __GOT_START__ /* Global offset table start */ - -.Lgotm1 = .-.LCTOC1 - .long _GLOBAL_OFFSET_TABLE_-4 /* end of GOT ptrs before BLCL + 3 reserved words */ - -.Lgotm2 = .-.LCTOC1 - .long _GLOBAL_OFFSET_TABLE_+12 /* start of GOT ptrs after BLCL + 3 reserved words */ - -.Lgote = .-.LCTOC1 - .long __GOT_END__ /* Global offset table end */ - -.Lgot2s = .-.LCTOC1 - .long __GOT2_START__ /* -mrelocatable GOT pointers start */ - -.Lgot2e = .-.LCTOC1 - .long __GOT2_END__ /* -mrelocatable GOT pointers end */ - -.Lfixups = .-.LCTOC1 - .long __FIXUP_START__ /* start of .fixup section */ - -.Lfixupe = .-.LCTOC1 - .long __FIXUP_END__ /* end of .fixup section */ - -.Lctors = .-.LCTOC1 - .long __CTOR_LIST__ /* start of .ctor section */ - -.Lctore = .-.LCTOC1 - .long __CTOR_END__ /* end of .ctor section */ - -.Ldtors = .-.LCTOC1 - .long __DTOR_LIST__ /* start of .dtor section */ - -.Ldtore = .-.LCTOC1 - .long __DTOR_END__ /* end of .dtor section */ - -.Lexcepts = .-.LCTOC1 - .long __EXCEPT_START__ /* start of .gcc_except_table section */ - -.Lexcepte = .-.LCTOC1 - .long __EXCEPT_END__ /* end of .gcc_except_table section */ - -.Linit = .-.LCTOC1 - .long .Linit_p /* address of variable to say we've been called */ - - .text - .align 2 -.Lptr: - .long .LCTOC1-.Laddr /* PC relative pointer to .got2 */ -#endif - - .data - .align 2 -.Linit_p: - .long 0 - - .text - -FUNC_START(__eabi) - -/* Eliminate -mrelocatable code if not -mrelocatable, so that this file can - be assembled with other assemblers than GAS. */ - -#ifndef _RELOCATABLE - addis 10,0,.Linit_p@ha /* init flag */ - addis 11,0,.LCTOC1@ha /* load address of .LCTOC1 */ - lwz 9,.Linit_p@l(10) /* init flag */ - addi 11,11,.LCTOC1@l - cmplwi 2,9,0 /* init flag != 0? */ - bnelr 2 /* return now, if we've been called already */ - stw 1,.Linit_p@l(10) /* store a nonzero value in the done flag */ - -#else /* -mrelocatable */ - mflr 0 - bl .Laddr /* get current address */ -.Laddr: - mflr 12 /* real address of .Laddr */ - lwz 11,(.Lptr-.Laddr)(12) /* linker generated address of .LCTOC1 */ - add 11,11,12 /* correct to real pointer */ - lwz 12,.Ltable(11) /* get linker's idea of where .Laddr is */ - lwz 10,.Linit(11) /* address of init flag */ - subf. 12,12,11 /* calculate difference */ - lwzx 9,10,12 /* done flag */ - cmplwi 2,9,0 /* init flag != 0? */ - mtlr 0 /* restore in case branch was taken */ - bnelr 2 /* return now, if we've been called already */ - stwx 1,10,12 /* store a nonzero value in the done flag */ - beq+ 0,.Lsdata /* skip if we don't need to relocate */ - -/* We need to relocate the .got2 pointers. */ - - lwz 3,.Lgot2s(11) /* GOT2 pointers start */ - lwz 4,.Lgot2e(11) /* GOT2 pointers end */ - add 3,12,3 /* adjust pointers */ - add 4,12,4 - bl FUNC_NAME(__eabi_convert) /* convert pointers in .got2 section */ - -/* Fixup the .ctor section for static constructors */ - - lwz 3,.Lctors(11) /* constructors pointers start */ - lwz 4,.Lctore(11) /* constructors pointers end */ - bl FUNC_NAME(__eabi_convert) /* convert constructors */ - -/* Fixup the .dtor section for static destructors */ - - lwz 3,.Ldtors(11) /* destructors pointers start */ - lwz 4,.Ldtore(11) /* destructors pointers end */ - bl FUNC_NAME(__eabi_convert) /* convert destructors */ - -/* Fixup the .gcc_except_table section for G++ exceptions */ - - lwz 3,.Lexcepts(11) /* exception table pointers start */ - lwz 4,.Lexcepte(11) /* exception table pointers end */ - bl FUNC_NAME(__eabi_convert) /* convert exceptions */ - -/* Fixup the addresses in the GOT below _GLOBAL_OFFSET_TABLE_-4 */ - - lwz 3,.Lgots(11) /* GOT table pointers start */ - lwz 4,.Lgotm1(11) /* GOT table pointers below _GLOBAL_OFFSET_TABLE-4 */ - bl FUNC_NAME(__eabi_convert) /* convert lower GOT */ - -/* Fixup the addresses in the GOT above _GLOBAL_OFFSET_TABLE_+12 */ - - lwz 3,.Lgotm2(11) /* GOT table pointers above _GLOBAL_OFFSET_TABLE+12 */ - lwz 4,.Lgote(11) /* GOT table pointers end */ - bl FUNC_NAME(__eabi_convert) /* convert lower GOT */ - -/* Fixup any user initialized pointers now (the compiler drops pointers to */ -/* each of the relocs that it does in the .fixup section). */ - -.Lfix: - lwz 3,.Lfixups(11) /* fixup pointers start */ - lwz 4,.Lfixupe(11) /* fixup pointers end */ - bl FUNC_NAME(__eabi_uconvert) /* convert user initialized pointers */ - -.Lsdata: - mtlr 0 /* restore link register */ -#endif /* _RELOCATABLE */ - -/* Only load up register 13 if there is a .sdata and/or .sbss section */ - lwz 3,.Lsdas(11) /* start of .sdata/.sbss section */ - lwz 4,.Lsdae(11) /* end of .sdata/.sbss section */ - cmpw 1,3,4 /* .sdata/.sbss section non-empty? */ - beq- 1,.Lsda2l /* skip loading r13 */ - - lwz 13,.Lsda(11) /* load r13 with _SDA_BASE_ address */ - -/* Only load up register 2 if there is a .sdata2 and/or .sbss2 section */ - -.Lsda2l: - lwz 3,.Lsda2s(11) /* start of .sdata/.sbss section */ - lwz 4,.Lsda2e(11) /* end of .sdata/.sbss section */ - cmpw 1,3,4 /* .sdata/.sbss section non-empty? */ - beq+ 1,.Ldone /* skip loading r2 */ - - lwz 2,.Lsda2(11) /* load r2 with _SDA2_BASE_ address */ - -/* Done adjusting pointers, return by way of doing the C++ global constructors. */ - -.Ldone: - b FUNC_NAME(__init) /* do any C++ global constructors (which returns to caller) */ -FUNC_END(__eabi) - -/* Special subroutine to convert a bunch of pointers directly. - r0 has original link register - r3 has low pointer to convert - r4 has high pointer to convert - r5 .. r10 are scratch registers - r11 has the address of .LCTOC1 in it. - r12 has the value to add to each pointer - r13 .. r31 are unchanged */ - -FUNC_START(__eabi_convert) - cmplw 1,3,4 /* any pointers to convert? */ - subf 5,3,4 /* calculate number of words to convert */ - bclr 4,4 /* return if no pointers */ - - srawi 5,5,2 - addi 3,3,-4 /* start-4 for use with lwzu */ - mtctr 5 - -.Lcvt: - lwzu 6,4(3) /* pointer to convert */ - cmpwi 0,6,0 - beq- .Lcvt2 /* if pointer is null, don't convert */ - - add 6,6,12 /* convert pointer */ - stw 6,0(3) -.Lcvt2: - bdnz+ .Lcvt - blr - -FUNC_END(__eabi_convert) - -/* Special subroutine to convert the pointers the user has initialized. The - compiler has placed the address of the initialized pointer into the .fixup - section. - - r0 has original link register - r3 has low pointer to convert - r4 has high pointer to convert - r5 .. r10 are scratch registers - r11 has the address of .LCTOC1 in it. - r12 has the value to add to each pointer - r13 .. r31 are unchanged */ - -FUNC_START(__eabi_uconvert) - cmplw 1,3,4 /* any pointers to convert? */ - subf 5,3,4 /* calculate number of words to convert */ - bclr 4,4 /* return if no pointers */ - - srawi 5,5,2 - addi 3,3,-4 /* start-4 for use with lwzu */ - mtctr 5 - -.Lucvt: - lwzu 6,4(3) /* next pointer to pointer to convert */ - add 6,6,12 /* adjust pointer */ - lwz 7,0(6) /* get the pointer it points to */ - stw 6,0(3) /* store adjusted pointer */ - add 7,7,12 /* adjust */ - stw 7,0(6) - bdnz+ .Lucvt - blr - -FUNC_END(__eabi_uconvert) - -#endif |