aboutsummaryrefslogtreecommitdiff
path: root/sysdeps
diff options
context:
space:
mode:
Diffstat (limited to 'sysdeps')
-rw-r--r--sysdeps/alpha/elf/Dist2
-rw-r--r--sysdeps/alpha/elf/Makefile4
-rw-r--r--sysdeps/alpha/elf/crtbegin.S92
-rw-r--r--sysdeps/alpha/elf/crtend.S93
-rw-r--r--sysdeps/alpha/elf/initfini.c98
-rw-r--r--sysdeps/generic/inttypes.h4
6 files changed, 101 insertions, 192 deletions
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