From 1bc83d2bb213bb32d8f7ae42595bbc1fec91094e Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Sat, 1 Sep 2001 19:24:55 +0000 Subject: [PATCH] Update. 2001-09-01 Richard Henderson * 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 * iconv/tst-iconv1.c: Include for wchar_t. * iconv/tst-iconv3.c: Likewise. 2001-09-01 Jakub Jelinek * sysdeps/generic/inttypes.h (__gwchar_t): Define to wchar_t for C++. handle it like 'I' for symmetry with strftime. --- ChangeLog | 19 ++++++++- iconv/tst-iconv1.c | 1 + iconv/tst-iconv3.c | 1 + sysdeps/alpha/elf/Dist | 2 - sysdeps/alpha/elf/Makefile | 4 -- sysdeps/alpha/elf/crtbegin.S | 92 ----------------------------------------- sysdeps/alpha/elf/crtend.S | 93 ----------------------------------------- sysdeps/alpha/elf/initfini.c | 98 ++++++++++++++++++++++++++++++++++++++++++++ sysdeps/generic/inttypes.h | 4 +- 9 files changed, 121 insertions(+), 193 deletions(-) delete mode 100644 sysdeps/alpha/elf/Dist delete mode 100644 sysdeps/alpha/elf/Makefile delete mode 100644 sysdeps/alpha/elf/crtbegin.S delete mode 100644 sysdeps/alpha/elf/crtend.S create mode 100644 sysdeps/alpha/elf/initfini.c diff --git a/ChangeLog b/ChangeLog index 9c7fdd0..d33a7d1 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,20 @@ +2001-09-01 Richard Henderson + + * 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 + + * iconv/tst-iconv1.c: Include for wchar_t. + * iconv/tst-iconv3.c: Likewise. + +2001-09-01 Jakub Jelinek + + * sysdeps/generic/inttypes.h (__gwchar_t): Define to wchar_t for C++. + 2001-09-01 Ulrich Drepper * iconv/gconv_cache.c: Rename variable cache to __gconv_cache and @@ -10,7 +27,7 @@ 2001-08-31 Ulrich Drepper * time/strptime.c (strptime_internal): Recognize 'l' format and - handle it like 'I' for symmatry with strftime. + handle it like 'I' for symmetry with strftime. 2001-08-31 Richard Henderson diff --git a/iconv/tst-iconv1.c b/iconv/tst-iconv1.c index d40fe53..d806ce6 100644 --- a/iconv/tst-iconv1.c +++ b/iconv/tst-iconv1.c @@ -1,6 +1,7 @@ /* Test case by yaoz@nih.gov. */ #include +#include #include #include diff --git a/iconv/tst-iconv3.c b/iconv/tst-iconv3.c index 60aa5c3..f613ed9 100644 --- a/iconv/tst-iconv3.c +++ b/iconv/tst-iconv3.c @@ -2,6 +2,7 @@ #include #include +#include #include #define BUFSIZE 10000 diff --git a/sysdeps/alpha/elf/Dist b/sysdeps/alpha/elf/Dist deleted file mode 100644 index 3e70101..0000000 --- a/sysdeps/alpha/elf/Dist +++ /dev/null @@ -1,2 +0,0 @@ -crtbegin.S -crtend.S diff --git a/sysdeps/alpha/elf/Makefile b/sysdeps/alpha/elf/Makefile deleted file mode 100644 index db849bd..0000000 --- a/sysdeps/alpha/elf/Makefile +++ /dev/null @@ -1,4 +0,0 @@ -ifeq ($(subdir), csu) -extra-objs += crtbegin.o crtend.o -install-lib += crtbegin.o crtend.o -endif diff --git a/sysdeps/alpha/elf/crtbegin.S b/sysdeps/alpha/elf/crtbegin.S deleted file mode 100644 index 08f6c04..0000000 --- a/sysdeps/alpha/elf/crtbegin.S +++ /dev/null @@ -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 diff --git a/sysdeps/alpha/elf/crtend.S b/sysdeps/alpha/elf/crtend.S deleted file mode 100644 index 576b868..0000000 --- a/sysdeps/alpha/elf/crtend.S +++ /dev/null @@ -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 diff --git a/sysdeps/alpha/elf/initfini.c b/sysdeps/alpha/elf/initfini.c new file mode 100644 index 0000000..e1c0f1c --- /dev/null +++ b/sysdeps/alpha/elf/initfini.c @@ -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*/ +"); diff --git a/sysdeps/generic/inttypes.h b/sysdeps/generic/inttypes.h index 0549a6a..f0ae774 100644 --- a/sysdeps/generic/inttypes.h +++ b/sysdeps/generic/inttypes.h @@ -29,7 +29,9 @@ /* Get a definition for wchar_t. But we must not define wchar_t itself. */ #ifndef ____gwchar_t_defined -# ifdef __WCHAR_TYPE__ +# ifdef __cplusplus +# define __gwchar_t wchar_t +# elif defined __WCHAR_TYPE__ typedef __WCHAR_TYPE__ __gwchar_t; # else # defined __need_wchar_t -- 2.7.4