s390: Convert to crt[in].S.
authorRichard Henderson <rth@twiddle.net>
Thu, 16 Feb 2012 03:58:28 +0000 (19:58 -0800)
committerRichard Henderson <rth@twiddle.net>
Thu, 16 Feb 2012 17:24:19 +0000 (09:24 -0800)
ChangeLog
nptl/ChangeLog
nptl/sysdeps/unix/sysv/linux/s390/s390-32/pt-initfini.c [deleted file]
nptl/sysdeps/unix/sysv/linux/s390/s390-64/pt-initfini.c [deleted file]
sysdeps/s390/s390-32/crti.S [new file with mode: 0644]
sysdeps/s390/s390-32/crtn.S [new file with mode: 0644]
sysdeps/s390/s390-32/initfini.c [deleted file]
sysdeps/s390/s390-64/crti.S [new file with mode: 0644]
sysdeps/s390/s390-64/crtn.S [new file with mode: 0644]
sysdeps/s390/s390-64/initfini.c [deleted file]

index 08460a5..58d02d6 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2012-02-16  Richard Henderson  <rth@redhat.com>
+
+       * sysdeps/s390/s390-32/crti.S, sysdeps/s390/s390-32/crtn.S: New files.
+       * sysdeps/s390/s390-32/initfini.c: Remove.
+       * sysdeps/s390/s390-64/crti.S, sysdeps/s390/s390-64/crtn.S:
+       * sysdeps/s390/s390-64/initfini.c: Remove.
+
 2012-02-15  Kaz Kojima  <kkojima@rr.iij4u.or.jp>
 
        * sysdeps/sh/crti.S, sysdeps/sh/crtn.S: New files, based on
index 7dee1ad..b8e1e4a 100644 (file)
@@ -1,3 +1,8 @@
+2012-02-16  Richard Henderson  <rth@twiddle.net>
+
+       * nptl/sysdeps/unix/sysv/linux/s390/s390-32/pt-initfini.c: Remove file.
+       * nptl/sysdeps/unix/sysv/linux/s390/s390-64/pt-initfini.c: Remove file.
+
 2012-02-15  Kaz Kojima  <kkojima@rr.iij4u.or.jp>
 
        * sysdeps/unix/sysv/linux/sh/pt-initfini.c: Remove file.
diff --git a/nptl/sysdeps/unix/sysv/linux/s390/s390-32/pt-initfini.c b/nptl/sysdeps/unix/sysv/linux/s390/s390-32/pt-initfini.c
deleted file mode 100644 (file)
index 7b6daee..0000000
+++ /dev/null
@@ -1,145 +0,0 @@
-/* Special .init and .fini section support for S/390.
-   Copyright (C) 2003, 2009 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.
-
-   In addition to the permissions in the GNU Lesser 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 Lesser 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.)
-
-   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; see the file COPYING.LIB.  If
-   not, see <http://www.gnu.org/licenses/>.  */
-
-/* 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. */
-
-__asm__ ("\
-\n\
-#include \"defs.h\"\n\
-\n\
-/*@HEADER_ENDS*/\n\
-\n\
-/*@TESTS_BEGIN*/\n\
-\n\
-/*@TESTS_END*/\n\
-\n\
-/*@_init_PROLOG_BEGINS*/\n\
-\n\
-       .section .init\n\
-#NO_APP\n\
-       .align 4\n\
-.globl _init\n\
-       .type    _init,@function\n\
-_init:\n\
-#      leaf function           0\n\
-#      automatics              0\n\
-#      outgoing args           0\n\
-#      need frame pointer      0\n\
-#      call alloca             0\n\
-#      has varargs             0\n\
-#      incoming args (stack)   0\n\
-#      function length         36\n\
-       STM     6,15,24(15)\n\
-       BRAS    13,.LTN1_0\n\
-.LT1_0:\n\
-.LC13:\n\
-       .long   __pthread_initialize_minimal_internal-.LT1_0\n\
-.LC15:\n\
-       .long   _GLOBAL_OFFSET_TABLE_-.LT1_0\n\
-.LTN1_0:\n\
-       LR      1,15\n\
-       AHI     15,-96\n\
-       ST      1,0(15)\n\
-       L       12,.LC15-.LT1_0(13)\n\
-       AR      12,13\n\
-       L     1,.LC13-.LT1_0(13)\n\
-       LA    1,0(1,13)\n\
-       BASR  14,1\n\
-#APP\n\
-       .align 4,0x07\n\
-       END_INIT\n\
-\n\
-/*@_init_PROLOG_ENDS*/\n\
-\n\
-/*@_init_EPILOG_BEGINS*/\n\
-       .align 4\n\
-       .section .init\n\
-#NO_APP\n\
-       .align 4\n\
-       L       4,152(15)\n\
-       LM      6,15,120(15)\n\
-       BR      4\n\
-#APP\n\
-       END_INIT\n\
-\n\
-/*@_init_EPILOG_ENDS*/\n\
-\n\
-/*@_fini_PROLOG_BEGINS*/\n\
-       .section .fini\n\
-#NO_APP\n\
-       .align 4\n\
-.globl _fini\n\
-       .type    _fini,@function\n\
-_fini:\n\
-#      leaf function           0\n\
-#      automatics              0\n\
-#      outgoing args           0\n\
-#      need frame pointer      0\n\
-#      call alloca             0\n\
-#      has varargs             0\n\
-#      incoming args (stack)   0\n\
-#      function length         30\n\
-       STM     6,15,24(15)\n\
-       BRAS    13,.LTN2_0\n\
-.LT2_0:\n\
-.LC17:\n\
-       .long   _GLOBAL_OFFSET_TABLE_-.LT2_0\n\
-.LTN2_0:\n\
-       LR      1,15\n\
-       AHI     15,-96\n\
-       ST      1,0(15)\n\
-       L       12,.LC17-.LT2_0(13)\n\
-       AR      12,13\n\
-#APP\n\
-       .align 4,0x07\n\
-       END_FINI\n\
-\n\
-/*@_fini_PROLOG_ENDS*/\n\
-\n\
-/*@_fini_EPILOG_BEGINS*/\n\
-       .align 4\n\
-       .section .fini\n\
-#NO_APP\n\
-       .align 4\n\
-       L       4,152(15)\n\
-       LM      6,15,120(15)\n\
-       BR      4\n\
-#APP\n\
-       END_FINI\n\
-\n\
-/*@_fini_EPILOG_ENDS*/\n\
-\n\
-/*@TRAILER_BEGINS*/\
-");
diff --git a/nptl/sysdeps/unix/sysv/linux/s390/s390-64/pt-initfini.c b/nptl/sysdeps/unix/sysv/linux/s390/s390-64/pt-initfini.c
deleted file mode 100644 (file)
index a77ae43..0000000
+++ /dev/null
@@ -1,129 +0,0 @@
-/* Special .init and .fini section support for 64 bit S/390.
-   Copyright (C) 2003, 2009 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.
-
-   In addition to the permissions in the GNU Lesser 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 Lesser 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.)
-
-   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; see the file COPYING.LIB.  If
-   not, see <http://www.gnu.org/licenses/>.  */
-
-/* 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. */
-
-__asm__ ("\
-\n\
-#include \"defs.h\"\n\
-\n\
-/*@HEADER_ENDS*/\n\
-\n\
-/*@TESTS_BEGIN*/\n\
-\n\
-/*@TESTS_END*/\n\
-\n\
-/*@_init_PROLOG_BEGINS*/\n\
-\n\
-       .section .init\n\
-#NO_APP\n\
-       .align 4\n\
-.globl _init\n\
-       .type    _init,@function\n\
-_init:\n\
-#      leaf function           0\n\
-#      automatics              0\n\
-#      outgoing args           0\n\
-#      need frame pointer      0\n\
-#      call alloca             0\n\
-#      has varargs             0\n\
-#      incoming args (stack)   0\n\
-#      function length         36\n\
-       STMG    6,15,48(15)\n\
-       LGR     1,15\n\
-       AGHI    15,-160\n\
-       STG     1,0(15)\n\
-       LARL    12,_GLOBAL_OFFSET_TABLE_\n\
-       BRASL   14,__pthread_initialize_minimal_internal\n\
-#APP\n\
-       .align 4,0x07\n\
-       END_INIT\n\
-\n\
-/*@_init_PROLOG_ENDS*/\n\
-\n\
-/*@_init_EPILOG_BEGINS*/\n\
-       .align 4\n\
-       .section .init\n\
-#NO_APP\n\
-       .align 4\n\
-       LG      4,272(15)\n\
-       LMG     6,15,208(15)\n\
-       BR      4\n\
-#APP\n\
-       END_INIT\n\
-\n\
-/*@_init_EPILOG_ENDS*/\n\
-\n\
-/*@_fini_PROLOG_BEGINS*/\n\
-       .section .fini\n\
-#NO_APP\n\
-       .align 4\n\
-.globl _fini\n\
-       .type    _fini,@function\n\
-_fini:\n\
-#      leaf function           0\n\
-#      automatics              0\n\
-#      outgoing args           0\n\
-#      need frame pointer      0\n\
-#      call alloca             0\n\
-#      has varargs             0\n\
-#      incoming args (stack)   0\n\
-#      function length         30\n\
-       STMG    6,15,48(15)\n\
-       LGR     1,15\n\
-       AGHI    15,-160\n\
-       STG     1,0(15)\n\
-       LARL    12,_GLOBAL_OFFSET_TABLE_\n\
-#APP\n\
-       .align 4,0x07\n\
-       END_FINI\n\
-\n\
-/*@_fini_PROLOG_ENDS*/\n\
-\n\
-/*@_fini_EPILOG_BEGINS*/\n\
-       .align 4\n\
-       .section .fini\n\
-#NO_APP\n\
-       .align 4\n\
-       LG      4,272(15)\n\
-       LMG     6,15,208(15)\n\
-       BR      4\n\
-#APP\n\
-       END_FINI\n\
-\n\
-/*@_fini_EPILOG_ENDS*/\n\
-\n\
-/*@TRAILER_BEGINS*/\n\
-       ");
diff --git a/sysdeps/s390/s390-32/crti.S b/sysdeps/s390/s390-32/crti.S
new file mode 100644 (file)
index 0000000..df5855a
--- /dev/null
@@ -0,0 +1,102 @@
+/* Special .init and .fini section support for S/390.
+   Copyright (C) 2000, 2001, 2002, 2012 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.
+
+   In addition to the permissions in the GNU Lesser 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 GNU Lesser 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.)
+
+   Note that people who make modified versions of this file are not
+   obligated to grant this special exception for their modified
+   versions; it is their choice whether to do so. The GNU Lesser
+   General Public License gives permission to release a modified
+   version without this exception; this exception also makes it
+   possible to release a modified version which carries forward this
+   exception.
+
+   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, see
+   <http://www.gnu.org/licenses/>.  */
+
+/* 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.  The symbols _init and _fini are
+   magic and cause the linker to emit DT_INIT and DT_FINI.  */
+
+#include <libc-symbols.h>
+#include <sysdep.h>
+
+#ifndef PREINIT_FUNCTION
+# define PREINIT_FUNCTION __gmon_start__
+#endif
+
+#ifndef PREINIT_FUNCTION_WEAK
+# define PREINIT_FUNCTION_WEAK 1
+#endif
+
+#if PREINIT_FUNCTION_WEAK
+       weak_extern (PREINIT_FUNCTION)
+#else
+       .hidden PREINIT_FUNCTION
+#endif
+
+       .section .init,"ax",@progbits
+       .globl  _init
+       .type   _init,@function
+       .align  4
+_init:
+       stm     %r6,%r15,24(%r15)
+       bras    %r13,1f
+0:
+#if PREINIT_FUNCTION_WEAK
+       .long   PREINIT_FUNCTION@GOT
+#else
+       .long   PREINIT_FUNCTION-0b
+#endif
+       .long   _GLOBAL_OFFSET_TABLE_-0b
+1:     lr      %r1,%r15
+       ahi     %r15,-96
+       st      %r1,0(%r15)
+       l       %r12,4(%r13)
+       ar      %r12,%r13
+       l       %r1,0(%r13)
+#if PREINIT_FUNCTION_WEAK
+       l       %r1,0(%r1,%r12)
+       ltr     %r1,%r1
+       je      2f
+#else
+       la      %r1,0(%r1,%r13)
+#endif
+       basr    %r14,%r1
+       .align  4,0x07
+2:
+
+       .section .fini,"ax",@progbits
+       .globl  _fini
+       .type   _fini,@function
+       .align  4
+_fini:
+       stm     %r6,%r15,24(%r15)
+       bras    %r13,1f
+0:     .long   _GLOBAL_OFFSET_TABLE_-0b
+1:     lr      %r1,%r15
+       ahi     %r15,-96
+       st      %r1,0(%r15)
+       l       %r12,0(%r13)
+       ar      %r12,%r13
+       .align  4,0x07
diff --git a/sysdeps/s390/s390-32/crtn.S b/sysdeps/s390/s390-32/crtn.S
new file mode 100644 (file)
index 0000000..1147636
--- /dev/null
@@ -0,0 +1,47 @@
+/* Special .init and .fini section support for S/390.
+   Copyright (C) 2000, 2001, 2002, 2012 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.
+
+   In addition to the permissions in the GNU Lesser 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 GNU Lesser 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.)
+
+   Note that people who make modified versions of this file are not
+   obligated to grant this special exception for their modified
+   versions; it is their choice whether to do so. The GNU Lesser
+   General Public License gives permission to release a modified
+   version without this exception; this exception also makes it
+   possible to release a modified version which carries forward this
+   exception.
+
+   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, see
+   <http://www.gnu.org/licenses/>.  */
+
+/* crtn.S puts function epilogues in the .init and .fini sections
+   corresponding to the prologues in crti.S. */
+
+       .section .init,"ax",@progbits
+       l       %r4,152(%r15)
+       lm      %r6,%r15,120(%r15)
+       br      %r4
+
+       .section .fini,"ax",@progbits
+       l       %r4,152(%r15)
+       lm      %r6,%r15,120(%r15)
+       br      %r4
diff --git a/sysdeps/s390/s390-32/initfini.c b/sysdeps/s390/s390-32/initfini.c
deleted file mode 100644 (file)
index ed6b34e..0000000
+++ /dev/null
@@ -1,156 +0,0 @@
-/* Special .init and .fini section support for S/390.
-   Copyright (C) 2000, 2001, 2002 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.
-
-   In addition to the permissions in the GNU Lesser 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 GNU Lesser 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.)
-
-   Note that people who make modified versions of this file are not
-   obligated to grant this special exception for their modified
-   versions; it is their choice whether to do so. The GNU Lesser
-   General Public License gives permission to release a modified
-   version without this exception; this exception also makes it
-   possible to release a modified version which carries forward this
-   exception.
-
-   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, see
-   <http://www.gnu.org/licenses/>.  */
-
-/* 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. */
-
-__asm__ ("\
-\n\
-#include \"defs.h\"\n\
-\n\
-/*@HEADER_ENDS*/\n\
-\n\
-/*@TESTS_BEGIN*/\n\
-\n\
-/*@TESTS_END*/\n\
-\n\
-/*@_init_PROLOG_BEGINS*/\n\
-\n\
-       .section .init\n\
-#NO_APP\n\
-       .align 4\n\
-.globl _init\n\
-       .type    _init,@function\n\
-_init:\n\
-#      leaf function           0\n\
-#      automatics              0\n\
-#      outgoing args           0\n\
-#      need frame pointer      0\n\
-#      call alloca             0\n\
-#      has varargs             0\n\
-#      incoming args (stack)   0\n\
-#      function length         36\n\
-       STM     6,15,24(15)\n\
-       BRAS    13,.LTN1_0\n\
-.LT1_0:\n\
-.LC14:\n\
-       .long   __gmon_start__@GOT\n\
-.LC15:\n\
-       .long   _GLOBAL_OFFSET_TABLE_-.LT1_0\n\
-.LTN1_0:\n\
-       LR      1,15\n\
-       AHI     15,-96\n\
-       ST      1,0(15)\n\
-       L       12,.LC15-.LT1_0(13)\n\
-       AR      12,13\n\
-       L     1,.LC14-.LT1_0(13)\n\
-       L     1,0(1,12)\n\
-       LTR   1,1\n\
-       JE    .L22\n\
-       BASR  14,1\n\
-.L22:\n\
-#APP\n\
-       .align 4,0x07\n\
-       END_INIT\n\
-\n\
-/*@_init_PROLOG_ENDS*/\n\
-\n\
-/*@_init_EPILOG_BEGINS*/\n\
-       .align 4\n\
-       .section .init\n\
-#NO_APP\n\
-       .align 4\n\
-       L       4,152(15)\n\
-       LM      6,15,120(15)\n\
-       BR      4\n\
-#APP\n\
-       END_INIT\n\
-\n\
-/*@_init_EPILOG_ENDS*/\n\
-\n\
-/*@_fini_PROLOG_BEGINS*/\n\
-       .section .fini\n\
-#NO_APP\n\
-       .align 4\n\
-.globl _fini\n\
-       .type    _fini,@function\n\
-_fini:\n\
-#      leaf function           0\n\
-#      automatics              0\n\
-#      outgoing args           0\n\
-#      need frame pointer      0\n\
-#      call alloca             0\n\
-#      has varargs             0\n\
-#      incoming args (stack)   0\n\
-#      function length         30\n\
-       STM     6,15,24(15)\n\
-       BRAS    13,.LTN2_0\n\
-.LT2_0:\n\
-.LC17:\n\
-       .long   _GLOBAL_OFFSET_TABLE_-.LT2_0\n\
-.LTN2_0:\n\
-       LR      1,15\n\
-       AHI     15,-96\n\
-       ST      1,0(15)\n\
-       L       12,.LC17-.LT2_0(13)\n\
-       AR      12,13\n\
-#APP\n\
-       .align 4,0x07\n\
-       END_FINI\n\
-\n\
-/*@_fini_PROLOG_ENDS*/\n\
-\n\
-/*@_fini_EPILOG_BEGINS*/\n\
-       .align 4\n\
-       .section .fini\n\
-#NO_APP\n\
-       .align 4\n\
-       L       4,152(15)\n\
-       LM      6,15,120(15)\n\
-       BR      4\n\
-#APP\n\
-       END_FINI\n\
-\n\
-/*@_fini_EPILOG_ENDS*/\n\
-\n\
-/*@TRAILER_BEGINS*/\
-");
diff --git a/sysdeps/s390/s390-64/crti.S b/sysdeps/s390/s390-64/crti.S
new file mode 100644 (file)
index 0000000..7605f2d
--- /dev/null
@@ -0,0 +1,91 @@
+/* Special .init and .fini section support for 64 bit S/390.
+   Copyright (C) 2001, 2012 Free Software Foundation, Inc.
+   Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com).
+   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.
+
+   In addition to the permissions in the GNU Lesser 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 GNU Lesser 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.)
+
+   Note that people who make modified versions of this file are not
+   obligated to grant this special exception for their modified
+   versions; it is their choice whether to do so. The GNU Lesser
+   General Public License gives permission to release a modified
+   version without this exception; this exception also makes it
+   possible to release a modified version which carries forward this
+   exception.
+
+   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, see
+   <http://www.gnu.org/licenses/>.  */
+
+/* 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.  The symbols _init and _fini are
+   magic and cause the linker to emit DT_INIT and DT_FINI.  */
+
+#include <libc-symbols.h>
+#include <sysdep.h>
+
+#ifndef PREINIT_FUNCTION
+# define PREINIT_FUNCTION __gmon_start__
+#endif
+
+#ifndef PREINIT_FUNCTION_WEAK
+# define PREINIT_FUNCTION_WEAK 1
+#endif
+
+#if PREINIT_FUNCTION_WEAK
+       weak_extern (PREINIT_FUNCTION)
+#else
+       .hidden PREINIT_FUNCTION
+#endif
+
+       .section .init,"ax",@progbits
+       .align 4
+       .globl  _init
+       .type   _init,@function
+_init:
+       stmg    %r6,%r15,48(%r15)
+       lgr     %r1,%r15
+       aghi    %r15,-160
+       stg     %r1,0(%r15)
+       larl    %r12,_GLOBAL_OFFSET_TABLE_
+#if PREINIT_FUNCTION_WEAK
+       larl    %r1,PREINIT_FUNCTION@GOTENT
+       lg      %r1,0(%r1)
+       ltgr    %r1,%r1
+       je      1f
+       basr    %r14,%r1
+#else
+       brasl   %r14,PREINIT_FUNCTION
+#endif
+       .align  4,0x07
+1:
+
+       .section .fini,"ax",@progbits
+       .align 4
+       .globl  _fini
+       .type   _fini,@function
+_fini:
+       stmg    %r6,%r15,48(%r15)
+       lgr     %r1,%r15
+       aghi    %r15,-160
+       stg     %r1,0(%r15)
+       larl    %r12,_GLOBAL_OFFSET_TABLE_
+       .align  4,0x07
diff --git a/sysdeps/s390/s390-64/crtn.S b/sysdeps/s390/s390-64/crtn.S
new file mode 100644 (file)
index 0000000..bf72d56
--- /dev/null
@@ -0,0 +1,50 @@
+/* Special .init and .fini section support for 64 bit S/390.
+   Copyright (C) 2001, 2012 Free Software Foundation, Inc.
+   Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com).
+   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.
+
+   In addition to the permissions in the GNU Lesser 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 GNU Lesser 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.)
+
+   Note that people who make modified versions of this file are not
+   obligated to grant this special exception for their modified
+   versions; it is their choice whether to do so. The GNU Lesser
+   General Public License gives permission to release a modified
+   version without this exception; this exception also makes it
+   possible to release a modified version which carries forward this
+   exception.
+
+   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, see
+   <http://www.gnu.org/licenses/>.  */
+
+/* crtn.S puts function epilogues in the .init and .fini sections
+   corresponding to the prologues in crti.S. */
+
+       .section .init
+       .align  4
+       lg      %r4,272(%r15)
+       lmg     %r6,%r15,208(%r15)
+       br      %r4
+
+       .section .fini
+       .align  4
+       lg      %r4,272(%r15)
+       lmg     %r6,%r15,208(%r15)
+       br      %r4
diff --git a/sysdeps/s390/s390-64/initfini.c b/sysdeps/s390/s390-64/initfini.c
deleted file mode 100644 (file)
index fe448de..0000000
+++ /dev/null
@@ -1,143 +0,0 @@
-/* Special .init and .fini section support for 64 bit S/390.
-   Copyright (C) 2001 Free Software Foundation, Inc.
-   Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com).
-   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.
-
-   In addition to the permissions in the GNU Lesser 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 GNU Lesser 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.)
-
-   Note that people who make modified versions of this file are not
-   obligated to grant this special exception for their modified
-   versions; it is their choice whether to do so. The GNU Lesser
-   General Public License gives permission to release a modified
-   version without this exception; this exception also makes it
-   possible to release a modified version which carries forward this
-   exception.
-
-   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, see
-   <http://www.gnu.org/licenses/>.  */
-
-/* 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. */
-
-__asm__ ("\
-\n\
-#include \"defs.h\"\n\
-\n\
-/*@HEADER_ENDS*/\n\
-\n\
-/*@TESTS_BEGIN*/\n\
-\n\
-/*@TESTS_END*/\n\
-\n\
-/*@_init_PROLOG_BEGINS*/\n\
-\n\
-       .section .init\n\
-#NO_APP\n\
-       .align 4\n\
-.globl _init\n\
-       .type    _init,@function\n\
-_init:\n\
-#      leaf function           0\n\
-#      automatics              0\n\
-#      outgoing args           0\n\
-#      need frame pointer      0\n\
-#      call alloca             0\n\
-#      has varargs             0\n\
-#      incoming args (stack)   0\n\
-#      function length         36\n\
-       STMG    6,15,48(15)\n\
-       LGR     1,15\n\
-       AGHI    15,-160\n\
-       STG     1,0(15)\n\
-        LARL    12,_GLOBAL_OFFSET_TABLE_\n\
-       LARL    1,__gmon_start__@GOTENT\n\
-       LG      1,0(1)\n\
-       LTGR    1,1\n\
-       JE      .L22\n\
-       BASR    14,1\n\
-.L22:\n\
-#APP\n\
-       .align 4,0x07\n\
-       END_INIT\n\
-\n\
-/*@_init_PROLOG_ENDS*/\n\
-\n\
-/*@_init_EPILOG_BEGINS*/\n\
-       .align 4\n\
-       .section .init\n\
-#NO_APP\n\
-       .align 4\n\
-       LG      4,272(15)\n\
-       LMG     6,15,208(15)\n\
-       BR      4\n\
-#APP\n\
-       END_INIT\n\
-\n\
-/*@_init_EPILOG_ENDS*/\n\
-\n\
-/*@_fini_PROLOG_BEGINS*/\n\
-       .section .fini\n\
-#NO_APP\n\
-       .align 4\n\
-.globl _fini\n\
-       .type    _fini,@function\n\
-_fini:\n\
-#      leaf function           0\n\
-#      automatics              0\n\
-#      outgoing args           0\n\
-#      need frame pointer      0\n\
-#      call alloca             0\n\
-#      has varargs             0\n\
-#      incoming args (stack)   0\n\
-#      function length         30\n\
-       STMG    6,15,48(15)\n\
-       LGR     1,15\n\
-       AGHI    15,-160\n\
-       STG     1,0(15)\n\
-       LARL    12,_GLOBAL_OFFSET_TABLE_\n\
-#APP\n\
-       .align 4,0x07\n\
-       END_FINI\n\
-\n\
-/*@_fini_PROLOG_ENDS*/\n\
-\n\
-/*@_fini_EPILOG_BEGINS*/\n\
-       .align 4\n\
-       .section .fini\n\
-#NO_APP\n\
-       .align 4\n\
-       LG      4,272(15)\n\
-       LMG     6,15,208(15)\n\
-       BR      4\n\
-#APP\n\
-       END_FINI\n\
-\n\
-/*@_fini_EPILOG_ENDS*/\n\
-\n\
-       /*@TRAILER_BEGINS*/\
-");