mirror of https://gitee.com/Nocallback/glibc.git
Browse Source
2001-09-01 Richard Henderson <rth@redhat.com> * sysdeps/alpha/elf/Dist: Remove file. * sysdeps/alpha/elf/Makefile: Remove file. * sysdeps/alpha/elf/crtbegin.S: Remove file. * sysdeps/alpha/elf/crtend.S: Remove file. * sysdeps/alpha/elf/initfini.c: New file. 2001-09-01 Mark Kettenis <kettenis@gnu.org> * iconv/tst-iconv1.c: Include <stddef.h> for wchar_t. * iconv/tst-iconv3.c: Likewise. 2001-09-01 Jakub Jelinek <jakub@redhat.com> * sysdeps/generic/inttypes.h (__gwchar_t): Define to wchar_t for C++. handle it like 'I' for symmetry with strftime.cvs/glibc-2-2-branch
9 changed files with 121 additions and 193 deletions
@ -1,2 +0,0 @@ |
|||
crtbegin.S |
|||
crtend.S |
|||
@ -1,4 +0,0 @@ |
|||
ifeq ($(subdir), csu) |
|||
extra-objs += crtbegin.o crtend.o |
|||
install-lib += crtbegin.o crtend.o |
|||
endif |
|||
@ -1,92 +0,0 @@ |
|||
/* Copyright (C) 1996 Free Software Foundation, Inc. |
|||
This file is part of the GNU C Library. |
|||
Contributed by Richard Henderson (rth@tamu.edu) |
|||
|
|||
The GNU C Library is free software; you can redistribute it and/or |
|||
modify it under the terms of the GNU Lesser General Public |
|||
License as published by the Free Software Foundation; either |
|||
version 2.1 of the License, or (at your option) any later version. |
|||
|
|||
The GNU C Library 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 |
|||
Lesser General Public License for more details. |
|||
|
|||
You should have received a copy of the GNU Lesser General Public |
|||
License along with the GNU C Library; if not, write to the Free |
|||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA |
|||
02111-1307 USA. */ |
|||
|
|||
|
|||
/* |
|||
* Heads of the constructor/destructor lists. |
|||
*/ |
|||
|
|||
/* The __*TOR_LIST__ symbols are not global because when this file is used |
|||
in a shared library, we do not want the symbol to fall over to the |
|||
application's lists. */ |
|||
|
|||
.section .ctors,"aw" |
|||
|
|||
.align 3 |
|||
__CTOR_LIST__: |
|||
.quad -1 |
|||
|
|||
.section .dtors,"aw" |
|||
|
|||
.align 3 |
|||
__DTOR_LIST__: |
|||
.quad -1 |
|||
|
|||
|
|||
/* |
|||
* Fragment of the ELF _fini routine that invokes our dtor cleanup. |
|||
*/ |
|||
|
|||
.section .fini,"ax" |
|||
|
|||
/* Since the bits of the _fini function are spread across many |
|||
object files, each potentially with its own GP, we must |
|||
assume we need to load ours. Further, our .fini section |
|||
can easily be more than 4MB away from our .text bits so we |
|||
can't use bsr. */ |
|||
|
|||
br $gp,1f |
|||
1: ldgp $gp,0($gp) |
|||
jsr $26,__do_global_dtors_aux |
|||
|
|||
/* Must match the alignment we got from crti.o else we get |
|||
zero-filled holes in our _fini function and then SIGILL. */ |
|||
.align 3 |
|||
|
|||
/* |
|||
* Invoke our destructors in order. |
|||
*/ |
|||
|
|||
.text |
|||
|
|||
.align 3 |
|||
.ent __do_global_dtors_aux |
|||
|
|||
__do_global_dtors_aux: |
|||
.frame $sp,16,$26,0 |
|||
/* GP already loaded in .fini */ |
|||
lda $sp,-16($sp) |
|||
stq $9,8($sp) |
|||
stq $26,0($sp) |
|||
.mask (1<<26)|(1<<9), -16 |
|||
.prologue 0 |
|||
|
|||
lda $9,__DTOR_LIST__ |
|||
br 1f |
|||
0: jsr $26,($27) |
|||
1: ldq $27,8($9) |
|||
addq $9,8,$9 |
|||
bne $27,0b |
|||
|
|||
ldq $26,0($sp) |
|||
ldq $9,8($sp) |
|||
lda $sp,16($sp) |
|||
ret |
|||
|
|||
.end __do_global_dtors_aux |
|||
@ -1,93 +0,0 @@ |
|||
/* Copyright (C) 1996 Free Software Foundation, Inc. |
|||
This file is part of the GNU C Library. |
|||
Contributed by Richard Henderson (rth@tamu.edu) |
|||
|
|||
The GNU C Library is free software; you can redistribute it and/or |
|||
modify it under the terms of the GNU Lesser General Public |
|||
License as published by the Free Software Foundation; either |
|||
version 2.1 of the License, or (at your option) any later version. |
|||
|
|||
The GNU C Library 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 |
|||
Lesser General Public License for more details. |
|||
|
|||
You should have received a copy of the GNU Lesser General Public |
|||
License along with the GNU C Library; if not, write to the Free |
|||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA |
|||
02111-1307 USA. */ |
|||
|
|||
|
|||
/* |
|||
* Tails of the constructor/destructor lists. |
|||
*/ |
|||
|
|||
/* The __*TOR_END__ symbols are not global because when this file is used |
|||
in a shared library, we do not want the symbol to fall over to the |
|||
application's lists. */ |
|||
|
|||
.section .ctors,"aw" |
|||
|
|||
.align 3 |
|||
__CTOR_END__: |
|||
.quad 0 |
|||
|
|||
.section .dtors,"aw" |
|||
|
|||
.align 3 |
|||
__DTOR_END__: |
|||
.quad 0 |
|||
|
|||
|
|||
/* |
|||
* Fragment of the ELF _init routine that invokes our ctor startup |
|||
*/ |
|||
|
|||
.section .init,"ax" |
|||
|
|||
/* Since the bits of the _init function are spread across many |
|||
object files, each potentially with its own GP, we must |
|||
assume we need to load ours. Further, our .init section |
|||
can easily be more than 4MB away from our .text bits so we |
|||
can't use bsr. */ |
|||
|
|||
br $gp,1f |
|||
1: ldgp $gp,0($gp) |
|||
jsr $26,__do_global_ctors_aux |
|||
|
|||
/* Must match the alignment we got from crti.o else we get |
|||
zero-filled holes in our _init function and thense SIGILL. */ |
|||
.align 3 |
|||
|
|||
/* |
|||
* Invoke our destructors in order. |
|||
*/ |
|||
|
|||
.text |
|||
|
|||
.align 3 |
|||
.ent __do_global_ctors_aux |
|||
|
|||
__do_global_ctors_aux: |
|||
.frame $sp,16,$26,0 |
|||
/* GP already loaded in .init. */ |
|||
lda $sp,-16($sp) |
|||
stq $9,8($sp) |
|||
stq $26,0($sp) |
|||
.mask (1<<26)|(1<<9), -16 |
|||
.prologue 0 |
|||
|
|||
lda $9,__CTOR_END__ |
|||
br 1f |
|||
0: jsr $26,($27) |
|||
1: ldq $27,-8($9) |
|||
subq $9,8,$9 |
|||
not $27,$0 |
|||
bne $0,0b |
|||
|
|||
ldq $26,0($sp) |
|||
ldq $9,8($sp) |
|||
lda $sp,16($sp) |
|||
ret |
|||
|
|||
.end __do_global_ctors_aux |
|||
@ -0,0 +1,98 @@ |
|||
/* Special .init and .fini section support for Alpha.
|
|||
Copyright (C) 2001 Free Software Foundation, Inc. |
|||
This file is part of the GNU C Library. |
|||
|
|||
The GNU C Library is free software; you can redistribute it and/or |
|||
modify it under the terms of the GNU Lesser General Public |
|||
License as published by the Free Software Foundation; either |
|||
version 2.1 of the License, or (at your option) any later version. |
|||
|
|||
The GNU C Library 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 |
|||
Lesser General Public License for more details. |
|||
|
|||
You should have received a copy of the GNU Lesser General Public |
|||
License along with the GNU C Library; if not, write to the Free |
|||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA |
|||
02111-1307 USA. */ |
|||
|
|||
/* This file is compiled into assembly code which is then munged by a sed
|
|||
script into two files: crti.s and crtn.s. |
|||
|
|||
* crti.s puts a function prologue at the beginning of the .init and .fini |
|||
sections and defines global symbols for those addresses, so they can be |
|||
called as functions. |
|||
|
|||
* crtn.s puts the corresponding function epilogues in the .init and .fini |
|||
sections. |
|||
|
|||
This differs from what would be generated by the generic code in that |
|||
we save and restore the GP within the function. In order for linker |
|||
relaxation to work, the value in the GP register on exit from a function |
|||
must be valid for the function entry point. Normally, a function is |
|||
contained within one object file and this is not an issue, provided |
|||
that the function reloads the gp after making any function calls. |
|||
However, _init and _fini are constructed from pieces of many object |
|||
files, all of which may have different GP values. So we must reload |
|||
the GP value from crti.o in crtn.o. */ |
|||
|
|||
__asm__ (" |
|||
|
|||
#include \"defs.h\" |
|||
|
|||
/*@HEADER_ENDS*/ |
|||
|
|||
/*@_init_PROLOG_BEGINS*/ |
|||
.section .init, \"ax\", @progbits |
|||
.globl _init |
|||
.ent _init |
|||
_init: |
|||
ldgp $29, 0($27) |
|||
subq $30, 16, $30 |
|||
lda $27, __gmon_start__ |
|||
stq $26, 0($30) |
|||
stq $29, 8($30) |
|||
.prologue 1 |
|||
beq $27, 1f |
|||
jsr $26, ($27), __gmon_start__ |
|||
ldq $29, 8($30) |
|||
1: |
|||
.align 3 |
|||
.end _init |
|||
.size _init, 0 |
|||
/*@_init_PROLOG_ENDS*/ |
|||
|
|||
/*@_init_EPILOG_BEGINS*/ |
|||
.section .init, \"ax\", @progbits |
|||
ldq $26, 0($30) |
|||
ldq $29, 8($30) |
|||
addq $30, 16, $30 |
|||
ret |
|||
/*@_init_EPILOG_ENDS*/ |
|||
|
|||
/*@_fini_PROLOG_BEGINS*/ |
|||
.section .fini, \"ax\", @progbits |
|||
.globl _fini |
|||
.ent _fini |
|||
_fini: |
|||
ldgp $29, 0($27) |
|||
subq $30, 16, $30 |
|||
stq $26, 0($30) |
|||
stq $29, 8($30) |
|||
.prologue 1 |
|||
.align 3 |
|||
.end _fini |
|||
.size _fini, 0 |
|||
/*@_fini_PROLOG_ENDS*/ |
|||
|
|||
/*@_fini_EPILOG_BEGINS*/ |
|||
.section .fini, \"ax\", @progbits |
|||
ldq $26, 0($30) |
|||
ldq $29, 8($30) |
|||
addq $30, 16, $30 |
|||
ret |
|||
/*@_fini_EPILOG_ENDS*/ |
|||
|
|||
/*@TRAILER_BEGINS*/ |
|||
"); |
|||
Loading…
Reference in new issue