OSDN Git Service

* Makefile.in (CRTSTUFF_CFLAGS): New.
authorrth <rth@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 27 Jan 2002 04:18:12 +0000 (04:18 +0000)
committerrth <rth@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 27 Jan 2002 04:18:12 +0000 (04:18 +0000)
(crtbegin.o, crtend.o, crtbeginS.o, crtendS.o, crtbeginT.o): Use it.
* config.gcc (alpha-linux, alpha-freebsd, alpha-netbsd): Use plain
crtstuff.c instead of alpha assembly version.
* crtstuff.c (CRT_CALL_STATIC_FUNCTION): Rewrite to assume the
entire dummy function sequence.  Use FORCE_CODE_SECTION_ALIGN
not FORCE_{INIT,FINI}_SECTION_ALIGN.
(__do_global_dtors_aux): Mark used.
(frame_dummy, __do_global_ctors_aux): Mark used.
(fini_dummy, init_dummy): Remove.

* config/alpha/crtbegin.asm: Remove file.
* config/alpha/crtend.asm: Remove file.
* config/alpha/t-crtbe: Remove file.
* config/alpha/elf.h (CRT_CALL_STATIC_FUNCTION): New.
(LINK_EH_SPEC): New.

* config/cris/cris.h (CRT_CALL_STATIC_FUNCTION): Rewrite old
FORCE_INIT_SECTION_ALIGN hack.  Register __fini_start before
calling constructors.
* config/cris/linux.h (CRT_CALL_STATIC_FUNCTION): Undef.

* config/i386/i386.h (CRT_CALL_STATIC_FUNCTION): New.
* config/i386/linux.h (CRT_CALL_STATIC_FUNCTION): Replace old
CRT_END_INIT_DUMMY hack.
* config/i386/sol2.h (FORCE_CODE_SECTION_ALIGN): Replace
FORCE_{INIT,FINI}_SECTION_ALIGN.

* config/mcore/mcore-elf.h (FORCE_CODE_SECTION_ALIGN): Replace
FORCE_{INIT,FINI}_SECTION_ALIGN.

* config/s390/s390.h (CRT_CALL_STATIC_FUNCTION): Update for new
invocation sequence.
* config/sh/sh.h (CRT_CALL_STATIC_FUNCTION): Likewise.

* doc/tm.texi (CRT_CALL_STATIC_FUNCTION): Update.
(FORCE_CODE_SECTION_ALIGN): New.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@49261 138bc75d-0d04-0410-961f-82ee72b054a4

17 files changed:
gcc/ChangeLog
gcc/Makefile.in
gcc/config.gcc
gcc/config/alpha/crtbegin.asm [deleted file]
gcc/config/alpha/crtend.asm [deleted file]
gcc/config/alpha/elf.h
gcc/config/alpha/t-crtbe [deleted file]
gcc/config/cris/cris.h
gcc/config/cris/linux.h
gcc/config/i386/i386.h
gcc/config/i386/linux.h
gcc/config/i386/sol2.h
gcc/config/mcore/mcore-elf.h
gcc/config/s390/s390.h
gcc/config/sh/sh.h
gcc/crtstuff.c
gcc/doc/tm.texi

index 57fd4b9..f2a2e5d 100644 (file)
@@ -1,5 +1,45 @@
 2002-01-26  Richard Henderson  <rth@redhat.com>
 
+       * Makefile.in (CRTSTUFF_CFLAGS): New.
+       (crtbegin.o, crtend.o, crtbeginS.o, crtendS.o, crtbeginT.o): Use it.
+       * config.gcc (alpha-linux, alpha-freebsd, alpha-netbsd): Use plain
+       crtstuff.c instead of alpha assembly version.
+       * crtstuff.c (CRT_CALL_STATIC_FUNCTION): Rewrite to assume the
+       entire dummy function sequence.  Use FORCE_CODE_SECTION_ALIGN
+       not FORCE_{INIT,FINI}_SECTION_ALIGN.
+       (__do_global_dtors_aux): Mark used.
+       (frame_dummy, __do_global_ctors_aux): Mark used.
+       (fini_dummy, init_dummy): Remove.
+
+       * config/alpha/crtbegin.asm: Remove file.
+       * config/alpha/crtend.asm: Remove file.
+       * config/alpha/t-crtbe: Remove file.
+       * config/alpha/elf.h (CRT_CALL_STATIC_FUNCTION): New.
+       (LINK_EH_SPEC): New.
+
+       * config/cris/cris.h (CRT_CALL_STATIC_FUNCTION): Rewrite old
+       FORCE_INIT_SECTION_ALIGN hack.  Register __fini_start before
+       calling constructors.
+       * config/cris/linux.h (CRT_CALL_STATIC_FUNCTION): Undef.
+
+       * config/i386/i386.h (CRT_CALL_STATIC_FUNCTION): New.
+       * config/i386/linux.h (CRT_CALL_STATIC_FUNCTION): Replace old
+       CRT_END_INIT_DUMMY hack.
+       * config/i386/sol2.h (FORCE_CODE_SECTION_ALIGN): Replace
+       FORCE_{INIT,FINI}_SECTION_ALIGN.
+
+       * config/mcore/mcore-elf.h (FORCE_CODE_SECTION_ALIGN): Replace
+       FORCE_{INIT,FINI}_SECTION_ALIGN.
+
+       * config/s390/s390.h (CRT_CALL_STATIC_FUNCTION): Update for new
+       invocation sequence.
+       * config/sh/sh.h (CRT_CALL_STATIC_FUNCTION): Likewise.
+
+       * doc/tm.texi (CRT_CALL_STATIC_FUNCTION): Update.
+       (FORCE_CODE_SECTION_ALIGN): New.
+
+2002-01-26  Richard Henderson  <rth@redhat.com>
+
        * config/cris/cris.c (cris_print_operand): Handle 64-bit CONST_INT.
 
 2002-01-26  Richard Henderson  <rth@redhat.com>
index 0d4bdd4..835bebc 100644 (file)
@@ -370,6 +370,10 @@ LIBGCC2_INCLUDES =
 # Additional target-dependent options for compiling libgcc2.a.
 TARGET_LIBGCC2_CFLAGS =
 
+# Options to use when compiling crtbegin/end.
+CRTSTUFF_CFLAGS = -O2 $(GCC_CFLAGS) $(INCLUDES) $(MULTILIB_CFLAGS) -g0 \
+  -finhibit-size-directive -fno-inline-functions -fno-exceptions
+
 # Additional sources to handle exceptions; overridden on ia64.
 LIB2ADDEH = $(srcdir)/unwind-dw2.c $(srcdir)/unwind-dw2-fde.c \
   $(srcdir)/unwind-sjlj.c
@@ -1067,42 +1071,34 @@ stmp-multilib: $(LIBGCC_DEPS)
 # constructors.
 $(T)crtbegin.o: crtstuff.c $(GCC_PASSES) $(TCONFIG_H) auto-host.h \
   gbl-ctors.h stmp-int-hdrs tsystem.h
-       $(GCC_FOR_TARGET) $(GCC_CFLAGS) $(INCLUDES) $(MULTILIB_CFLAGS) -g0 \
-         -finhibit-size-directive -fno-inline-functions \
-         -fno-exceptions $(CRTSTUFF_T_CFLAGS) @inhibit_libc@ \
-         -c $(srcdir)/crtstuff.c -DCRT_BEGIN -o $(T)crtbegin$(objext)
+       $(GCC_FOR_TARGET) $(CRTSTUFF_CFLAGS) $(CRTSTUFF_T_CFLAGS) \
+         @inhibit_libc@ -c $(srcdir)/crtstuff.c -DCRT_BEGIN \
+         -o $(T)crtbegin$(objext)
 
 $(T)crtend.o: crtstuff.c $(GCC_PASSES) $(TCONFIG_H) auto-host.h \
   gbl-ctors.h stmp-int-hdrs tsystem.h
-       $(GCC_FOR_TARGET) $(GCC_CFLAGS) $(INCLUDES) $(MULTILIB_CFLAGS) -g0 \
-         -finhibit-size-directive -fno-inline-functions \
-         -fno-exceptions $(CRTSTUFF_T_CFLAGS) @inhibit_libc@ \
-         -c $(srcdir)/crtstuff.c -DCRT_END -o $(T)crtend$(objext)
+       $(GCC_FOR_TARGET) $(CRTSTUFF_CFLAGS) $(CRTSTUFF_T_CFLAGS) \
+         @inhibit_libc@ -c $(srcdir)/crtstuff.c -DCRT_END \
+         -o $(T)crtend$(objext)
 
 # These are versions of crtbegin and crtend for shared libraries.
 $(T)crtbeginS.o: crtstuff.c $(GCC_PASSES) $(TCONFIG_H) auto-host.h \
   gbl-ctors.h stmp-int-hdrs tsystem.h
-       $(GCC_FOR_TARGET) $(GCC_CFLAGS) $(INCLUDES) $(MULTILIB_CFLAGS) -g0 \
-         -finhibit-size-directive -fno-inline-functions \
-         -fno-exceptions $(CRTSTUFF_T_CFLAGS_S) @inhibit_libc@ \
-         -c $(srcdir)/crtstuff.c -DCRT_BEGIN -DCRTSTUFFS_O \
+       $(GCC_FOR_TARGET) $(CRTSTUFF_CFLAGS) $(CRTSTUFF_T_CFLAGS_S) \
+         @inhibit_libc@ -c $(srcdir)/crtstuff.c -DCRT_BEGIN -DCRTSTUFFS_O \
          -o $(T)crtbeginS$(objext)
 
 $(T)crtendS.o: crtstuff.c $(GCC_PASSES) $(TCONFIG_H) auto-host.h \
   gbl-ctors.h stmp-int-hdrs tsystem.h
-       $(GCC_FOR_TARGET) $(GCC_CFLAGS) $(INCLUDES) $(MULTILIB_CFLAGS) -g0 \
-         -finhibit-size-directive -fno-inline-functions \
-         -fno-exceptions $(CRTSTUFF_T_CFLAGS_S) @inhibit_libc@ \
-         -c $(srcdir)/crtstuff.c -DCRT_END -DCRTSTUFFS_O \
+       $(GCC_FOR_TARGET) $(CRTSTUFF_CFLAGS) $(CRTSTUFF_T_CFLAGS_S) \
+         @inhibit_libc@ -c $(srcdir)/crtstuff.c -DCRT_END -DCRTSTUFFS_O \
          -o $(T)crtendS$(objext)
 
 # This is a version of crtbegin for -static links.
 $(T)crtbeginT.o: crtstuff.c $(GCC_PASSES) $(TCONFIG_H) auto-host.h \
   gbl-ctors.h stmp-int-hdrs tsystem.h
-       $(GCC_FOR_TARGET) $(GCC_CFLAGS) $(INCLUDES) $(MULTILIB_CFLAGS) -g0 \
-         -finhibit-size-directive -fno-inline-functions \
-         -fno-exceptions $(CRTSTUFF_T_CFLAGS) @inhibit_libc@ \
-         -c $(srcdir)/crtstuff.c -DCRT_BEGIN -DCRTSTUFFT_O \
+       $(GCC_FOR_TARGET) $(CRTSTUFF_CFLAGS) $(CRTSTUFF_T_CFLAGS) \
+         @inhibit_libc@ -c $(srcdir)/crtstuff.c -DCRT_BEGIN -DCRTSTUFFT_O \
          -o $(T)crtbeginT$(objext)
 
 # Compile the start modules crt0.o and mcrt0.o that are linked with
index 10d6e1f..63cef2b 100644 (file)
@@ -461,7 +461,8 @@ alpha*-*-linux*ecoff*)
 alpha*-*-linux*libc1*)
        tm_file="${tm_file} alpha/elf.h alpha/linux.h alpha/linux-elf.h"
        target_cpu_default="MASK_GAS"
-       tmake_file="t-slibgcc-elf-ver t-linux t-linux-gnulibc1 alpha/t-alpha alpha/t-crtbe alpha/t-crtfm alpha/t-ieee"
+       tmake_file="t-slibgcc-elf-ver t-linux t-linux-gnulibc1 alpha/t-alpha alpha/t-crtfm alpha/t-ieee"
+       extra_parts="crtbegin.o crtend.o crtbeginS.o crtendS.o crtbeginT.o"
        gas=yes gnu_ld=yes
        if test x$enable_threads = xyes; then
                thread_file='posix'
@@ -470,7 +471,8 @@ alpha*-*-linux*libc1*)
 alpha*-*-linux*)
        tm_file="${tm_file} alpha/elf.h alpha/linux.h alpha/linux-elf.h"
        target_cpu_default="MASK_GAS"
-       tmake_file="t-slibgcc-elf-ver t-linux alpha/t-crtbe alpha/t-crtfm alpha/t-alpha alpha/t-ieee"
+       tmake_file="t-slibgcc-elf-ver t-linux alpha/t-crtfm alpha/t-alpha alpha/t-ieee"
+       extra_parts="crtbegin.o crtend.o crtbeginS.o crtendS.o crtbeginT.o"
        gas=yes gnu_ld=yes
        if test x$enable_threads = xyes; then
                thread_file='posix'
@@ -479,12 +481,14 @@ alpha*-*-linux*)
 alpha*-*-freebsd*)
        tm_file="${tm_file} ${fbsd_tm_file} alpha/elf.h alpha/freebsd.h"
        target_cpu_default="MASK_GAS"
-       tmake_file="${tmake_file} alpha/t-crtbe alpha/t-crtfm alpha/t-alpha alpha/t-ieee"
+       tmake_file="${tmake_file} alpha/t-crtfm alpha/t-alpha alpha/t-ieee"
+       extra_parts="crtbegin.o crtend.o crtbeginS.o crtendS.o crtbeginT.o"
        ;;
 alpha*-*-netbsd*)
        tm_file="${tm_file} netbsd.h alpha/elf.h netbsd-elf.h alpha/netbsd.h"
        target_cpu_default="MASK_GAS"
-       tmake_file="${tmake_file} alpha/t-alpha alpha/t-crtbe alpha/t-ieee"
+       tmake_file="${tmake_file} alpha/t-alpha alpha/t-ieee"
+       extra_parts="crtbegin.o crtend.o crtbeginS.o crtendS.o crtbeginT.o"
        ;;
 
 alpha*-*-openbsd*)
diff --git a/gcc/config/alpha/crtbegin.asm b/gcc/config/alpha/crtbegin.asm
deleted file mode 100644 (file)
index 96725b0..0000000
+++ /dev/null
@@ -1,228 +0,0 @@
-/*
- * Copyright (C) 1996, 1998, 2000 Free Software Foundation, Inc.
- *  Contributed by Richard Henderson (rth@tamu.edu)
- *
- * 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, 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, 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.
- */
-
-#include "auto-host.h"
-
-
-/*
- * 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
-
-.section .jcr,"aw"
-       .align 3
-__JCR_LIST__:
-
-.section .eh_frame,"aw"
-__EH_FRAME_BEGIN__:
-
-/*
- * 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      $29,1f
-1:     ldgp    $29,0($29)
-       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
-
-/*
- * Fragment of the ELF _init routine that sets up the frame info.
- */
-
-.section .init,"ax"
-       br      $29,1f
-1:     ldgp    $29,0($29)
-       jsr     $26,__do_frame_setup
-       .align 3
-
-/*
- * Invoke our destructors in order.
- */
-
-.section .sdata
-
-/* Support recursive calls to exit.  */
-       .type dtor_ptr,@object
-       .size dtor_ptr,4
-dtor_ptr:
-       .gprel32 __DTOR_LIST__ + 8
-
-/* A globally unique widget for c++ local destructors to hang off.
-
-   This has a unique value in every dso; in the main program its
-   value is zero.  The object should be protected.  This means the
-   instance in any dso or the main program is not used in any other
-   dso.  The dynamic linker takes care of this.  */
-       .global __dso_handle
-       .type __dso_handle,@object
-       .size __dso_handle,8
-#ifdef SHARED
-.section .data
-       .align 3
-__dso_handle:
-       .quad   __dso_handle
-#else
-.section .bss
-       .align 3
-__dso_handle:
-       .zero 8
-#endif
-#ifdef HAVE_GAS_HIDDEN
-       .hidden __dso_handle
-#endif
-
-.text
-
-       .align 3
-       .ent __do_global_dtors_aux
-
-__do_global_dtors_aux:
-       ldgp    $29,0($27)
-       lda     $30,-16($30)
-       .frame  $30,16,$26,0
-       stq     $9,8($30)
-       stq     $26,0($30)
-       .mask   0x4000200,-16
-       .prologue 1
-
-#ifdef SHARED
-       /* Do c++ local destructors.  */
-       lda     $1,__cxa_finalize
-       beq     $1,0f
-       lda     $16,__dso_handle
-       jsr     $26,__cxa_finalize
-       ldgp    $29,0($26)
-#endif
-
-0:     lda     $9,dtor_ptr
-       br      2f
-1:     stl     $1,0($9)
-       jsr     $26,($27)
-       ldgp    $29,0($26)
-2:     ldl     $1,0($9)
-       addq    $1,$29,$2
-       ldq     $27,0($2)
-       addl    $1,8,$1
-       bne     $27,1b
-
-       /* Remove our frame info.  */
-       lda     $1,__deregister_frame_info
-       beq     $1,3f
-       lda     $16,__EH_FRAME_BEGIN__
-       jsr     $26,__deregister_frame_info
-       ldgp    $29,0($26)
-
-3:     ldq     $26,0($30)
-       ldq     $9,8($30)
-       lda     $30,16($30)
-       ret
-
-       .end __do_global_dtors_aux
-
-/*
- * Install our frame info; register java classes, if any.
- */
-
-.section .bss
-       .type frame_object,@object
-       .size frame_object, 48
-       .align 3
-frame_object:
-       .zero 48
-
-.text 
-
-       .align 3
-       .ent __do_frame_setup
-
-__do_frame_setup:
-       ldgp    $29,0($27)
-       lda     $30,-16($30)
-       .frame  $30,16,$26,0
-       stq     $26,0($30)
-       .mask   0x4000000,-16
-       .prologue 1
-
-       lda     $1,__register_frame_info
-       beq     $1,0f
-       lda     $16,__EH_FRAME_BEGIN__
-       lda     $17,frame_object
-       jsr     $26,__register_frame_info
-       ldgp    $29,0($26)
-
-0:     lda     $1,_Jv_RegisterClasses
-       lda     $16,__JCR_LIST__
-       beq     $1,0f
-       ldq     $2,8($16)
-       beq     $2,0f
-       jsr     $26,_Jv_RegisterClasses
-       ldgp    $29,0($26)
-
-0:     ldq     $26,0($30)
-       lda     $30,16($30)
-       ret
-
-       .end __do_frame_setup
-
-.weak __register_frame_info
-.weak __deregister_frame_info
-#ifdef SHARED
-.weak __cxa_finalize
-#endif
-.weak _Jv_RegisterClasses
diff --git a/gcc/config/alpha/crtend.asm b/gcc/config/alpha/crtend.asm
deleted file mode 100644 (file)
index 1ffd808..0000000
+++ /dev/null
@@ -1,113 +0,0 @@
-/*
- * Copyright (C) 1996, 2000 Free Software Foundation, Inc.
- *  Contributed by Richard Henderson (rth@tamu.edu)
- *
- * 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, 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, 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.
- */
-
-/*
- * 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
-
-.section .jcr,"aw"
-       .align 3
-__JCR_END__:
-       .quad   0
-
-.section .eh_frame,"aw"
-__FRAME_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      $29,1f
-1:     ldgp    $29,0($29)
-       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 constructors in order.
- */
-
-.text
-
-       .align 3
-       .ent __do_global_ctors_aux
-
-__do_global_ctors_aux:
-       ldgp    $29,0($27)
-       lda     $30,-16($30)
-       .frame  $30,16,$26,0
-       stq     $9,8($30)
-       stq     $26,0($30)
-       .mask   0x4000200,-16
-       .prologue 1
-
-       lda     $9,__CTOR_END__-8
-       br      1f
-0:     jsr     $26,($27)
-1:     ldq     $27,0($9)
-       subq    $9,8,$9
-       not     $27,$0
-       bne     $0,0b
-
-       ldq     $26,0($30)
-       ldq     $9,8($30)
-       lda     $30,16($30)
-       ret
-
-       .end __do_global_ctors_aux
index 7e9b4d8..b4ed0d0 100644 (file)
@@ -1,5 +1,5 @@
 /* Definitions of target machine for GNU compiler, for DEC Alpha w/ELF.
-   Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001
+   Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002
    Free Software Foundation, Inc.
    Contributed by Richard Henderson (rth@tamu.edu).
 
@@ -642,3 +642,25 @@ do {                                                                       \
   alpha_this_gpdisp_sequence_number = 0)
 extern int alpha_this_literal_sequence_number;
 extern int alpha_this_gpdisp_sequence_number;
+
+/* Since the bits of the _init and _fini function is spread across
+   many object files, each potentially with its own GP, we must assume
+   we need to load our GP.  Further, the .init/.fini section can
+   easily be more than 4MB away from the function to call so we can't
+   use bsr.  */
+#define CRT_CALL_STATIC_FUNCTION(SECTION_OP, FUNC)     \
+   asm (SECTION_OP "\n"                                        \
+"      br $29,1f\n"                                    \
+"1:    ldgp $29,0($29)\n"                              \
+"      unop\n"                                         \
+"      jsr $26," USER_LABEL_PREFIX #FUNC "\n"          \
+"      .align 3\n"                                     \
+"      .previous");
+
+/* If we have the capability create headers for efficient EH lookup.
+   As of Jan 2002, only glibc 2.2.4 can actually make use of this, but
+   I imagine that other systems will catch up.  In the meantime, it
+   doesn't harm to make sure that the data exists to be used later.  */
+#if defined(HAVE_LD_EH_FRAME_HDR)
+#define LINK_EH_SPEC "%{!static:--eh-frame-hdr} "
+#endif
diff --git a/gcc/config/alpha/t-crtbe b/gcc/config/alpha/t-crtbe
deleted file mode 100644 (file)
index 384237b..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-# Effectively disable the crtbegin/end rules using crtstuff.c
-T = disable
-
-EXTRA_PARTS += crtbegin.o crtend.o crtbeginS.o crtendS.o
-
-# Assemble startup files.
-crtbegin.o: $(srcdir)/config/alpha/crtbegin.asm $(GCC_PASSES)
-       $(GCC_FOR_TARGET) -c -o crtbegin.o -x assembler-with-cpp -I. $(srcdir)/config/alpha/crtbegin.asm
-crtend.o: $(srcdir)/config/alpha/crtend.asm $(GCC_PASSES)
-       $(GCC_FOR_TARGET) -c -o crtend.o -x assembler-with-cpp -I. $(srcdir)/config/alpha/crtend.asm
-crtbeginS.o: $(srcdir)/config/alpha/crtbegin.asm $(GCC_PASSES)
-       $(GCC_FOR_TARGET) -DSHARED -c -o crtbeginS.o -x assembler-with-cpp -I. $(srcdir)/config/alpha/crtbegin.asm
-crtendS.o: $(srcdir)/config/alpha/crtend.asm $(GCC_PASSES)
-       $(GCC_FOR_TARGET) -DSHARED -c -o crtendS.o -x assembler-with-cpp -I. $(srcdir)/config/alpha/crtend.asm
index 5999bfb..f92a3b3 100644 (file)
@@ -1451,14 +1451,20 @@ struct cum_args {int regs;};
 /* We pull a little trick to register the _fini function with atexit,
    after (presumably) registering the eh frame info, since we don't handle
    _fini (a.k.a. ___fini_start) in crt0 or have a crti for "pure" ELF.  */
-#ifdef CRT_BEGIN
-#define FORCE_INIT_SECTION_ALIGN               \
- do                                            \
-   {                                           \
-     extern void __fini__start (void);         \
-     atexit (__fini__start);                   \
-   }                                           \
- while (0)
+#ifdef CRT_END
+# define CRT_CALL_STATIC_FUNCTION(SECTION_OP, FUNC)            \
+static void __attribute__((__used__))                          \
+call_ ## FUNC (void)                                           \
+{                                                              \
+  asm (SECTION_OP);                                            \
+  if (__builtin_strcmp (#FUNC, "__do_global_ctors_aux") == 0)  \
+   {                                                           \
+     extern void __fini__start (void);                         \
+     atexit (__fini__start);                                   \
+   }                                                           \
+  FUNC ();                                                     \
+  asm (TEXT_SECTION_ASM_OP);                                   \
+}
 #endif
 
 /* Node: PIC */
index 54a1808..5949937 100644 (file)
@@ -102,8 +102,8 @@ Boston, MA 02111-1307, USA.  */
 /* Node: Sections */
 
 /* GNU/Linux has crti and crtn and does not need the
-   FORCE_INIT_SECTION_ALIGN trick in cris.h.  */
-#undef FORCE_INIT_SECTION_ALIGN
+   CRT_CALL_STATIC_FUNCTION trick in cris.h.  */
+#undef CRT_CALL_STATIC_FUNCTION
 
 /*
  * Local variables:
index 4f2b903..25705e6 100644 (file)
@@ -2911,6 +2911,14 @@ extern int const svr4_dbx_register_map[FIRST_PSEUDO_REGISTER];
 
 #define ASM_SIMPLIFY_DWARF_ADDR(X) \
   i386_simplify_dwarf_addr (X)
+
+/* Switch to init or fini section via SECTION_OP, emit a call to FUNC,
+   and switch back.  For x86 we do this only to save a few bytes that
+   would otherwise be unused in the text section.  */
+#define CRT_CALL_STATIC_FUNCTION(SECTION_OP, FUNC)     \
+   asm (SECTION_OP "\n\t"                              \
+       "call " USER_LABEL_PREFIX #FUNC "\n"            \
+       TEXT_SECTION_ASM_OP);
 \f
 /* Print operand X (an rtx) in assembler syntax to file FILE.
    CODE is a letter or dot (`z' in `%z0') or 0 if no letter was specified.
index 63006b3..de634d3 100644 (file)
@@ -1,5 +1,6 @@
 /* Definitions for Intel 386 running Linux-based GNU systems with ELF format.
-   Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2001 Free Software Foundation, Inc.
+   Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2001, 2002
+   Free Software Foundation, Inc.
    Contributed by Eric Youngdale.
    Modified for stabs-in-ELF by H.J. Lu.
 
@@ -167,20 +168,20 @@ Boston, MA 02111-1307, USA.  */
 
 #if defined(__PIC__) && defined (USE_GNULIBC_1)
 /* This is a kludge. The i386 GNU/Linux dynamic linker needs ___brk_addr,
-   __environ and atexit (). We have to make sure they are in the .dynsym
-   section. We accomplish it by making a dummy call here. This
-   code is never reached.  */
-         
-#define CRT_END_INIT_DUMMY             \
-  do                                   \
-    {                                  \
-      extern void *___brk_addr;                \
-      extern char **__environ;         \
-                                       \
-      ___brk_addr = __environ;         \
-      atexit (0);                      \
-    }                                  \
-  while (0)
+   __environ and atexit We have to make sure they are in the .dynsym
+   section.  We do this by forcing the assembler to create undefined 
+   references to these symbols in the object file.  */
+#undef CRT_CALL_STATIC_FUNCTION
+#define CRT_CALL_STATIC_FUNCTION(SECTION_OP, FUNC)     \
+   asm (SECTION_OP "\n\t"                              \
+       "call " USER_LABEL_PREFIX #FUNC "\n"            \
+       TEXT_SECTION_ASM_OP "\n\t"                      \
+       ".extern ___brk_addr\n\t"                       \
+       ".type ___brk_addr,@object\n\t"                 \
+       ".extern __environ\n\t"                         \
+       ".type __environ,@object\n\t"                   \
+       ".extern atexit\n\t"                            \
+       ".type atexit,@function");
 #endif
 
 /* Handle special EH pointer encodings.  Absolute, pc-relative, and
index ff1585e..fb9d745 100644 (file)
@@ -1,5 +1,5 @@
 /* Target definitions for GNU compiler for Intel 80386 running Solaris 2
-   Copyright (C) 1993, 1995, 1996, 1997, 1998, 1999, 2000, 2001
+   Copyright (C) 1993, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002
    Free Software Foundation, Inc.
    Contributed by Fred Fish (fnf@cygnus.com).
 
@@ -56,9 +56,7 @@ Boston, MA 02111-1307, USA.  */
    two 0x00000090 ints, which generates a segmentation violation when
    executed.  This macro forces the assembler to do the padding, since
    it knows what it is doing.  */
-
-#define FORCE_INIT_SECTION_ALIGN asm (ALIGN_ASM_OP ## "16")
-#define FORCE_FINI_SECTION_ALIGN FORCE_INIT_SECTION_ALIGN
+#define FORCE_CODE_SECTION_ALIGN  asm(ALIGN_ASM_OP "16");
 
 /* Select a format to encode pointers in exception handling data.  CODE
    is 0 for data, 1 for code labels, 2 for function pointers.  GLOBAL is
index 45cb3e8..8cb8d1b 100644 (file)
@@ -1,5 +1,5 @@
 /* Definitions of MCore target. 
-   Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
+   Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
    Contributed by Cygnus Solutions.
 
 This file is part of GNU CC.
@@ -158,11 +158,9 @@ exports_section ()                                         \
 #undef  ENDFILE_SPEC
 #define ENDFILE_SPEC  "%{!mno-lsim:-lsim} crtend.o%s crtn.o%s"
 
-
 /* The subroutine calls in the .init and .fini sections create literal
    pools which must be jumped around...  */
-#define FORCE_INIT_SECTION_ALIGN       asm ("br 1f ; .literals ; 1:")
-#define FORCE_FINI_SECTION_ALIGN       asm ("br 1f ; .literals ; 1:")
+#define FORCE_CODE_SECTION_ALIGN       asm ("br 1f ; .literals ; 1:");
 
 #undef  CTORS_SECTION_ASM_OP
 #define CTORS_SECTION_ASM_OP   "\t.section\t.ctors,\"aw\""
index 57e39aa..99e1ef9 100644 (file)
@@ -1299,15 +1299,13 @@ extern struct rtx_def *s390_compare_op0, *s390_compare_op1;
 /* S/390 constant pool breaks the devices in crtstuff.c to control section
    in where code resides.  We have to write it as asm code.  */
 #ifndef __s390x__
-#define CRT_CALL_STATIC_FUNCTION(func) \
-  if (0) \
-     func (); /* ... to avoid warnings.  */ \
-  else \
-    asm \
-      ("bras\t%%r2,1f\n\
-0:     .long\t" #func " - 0b\n\
+#define CRT_CALL_STATIC_FUNCTION(SECTION_OP, FUNC) \
+    asm (SECTION_OP "\n\
+       bras\t%%r2,1f\n\
+0:     .long\t" USER_LABEL_PREFIX #FUNC " - 0b\n\
 1:     l\t%%r3,0(%%r2)\n\
-       bas\t%%r14,0(%%r3,%%r2)" : : : "2", "3", "cc", "memory");
+       bas\t%%r14,0(%%r3,%%r2)\n\
+       .previous");
 #endif
 
 /* Constant Pool for all symbols operands which are changed with
index 98939de..0985a37 100644 (file)
@@ -2301,21 +2301,15 @@ extern struct rtx_def *fpscr_rtx;
 
 /* SH constant pool breaks the devices in crtstuff.c to control section
    in where code resides.  We have to write it as asm code.  */
-#define CRT_CALL_STATIC_FUNCTION(func) \
-  if (0) \
-     /* This avoids warnings about the static function being unused.  */ \
-     func (); \
-  else \
-    /* We should be passing FUNC to the asm statement as an asm input  \
-       operand, but this breaks with -fPIC.  FIXME.  */                        \
-    asm \
-      ("mov.l  1f,r1\n\
+#define CRT_CALL_STATIC_FUNCTION(SECTION_OP, FUNC) \
+   asm (SECTION_OP "\n\
+       mov.l   1f,r1\n\
        mova    2f,r0\n\
        braf    r1\n\
        lds     r0,pr\n\
 0:     .p2align 2\n\
-1:     .long   " USER_LABEL_PREFIX #func " - 0b\n\
-2:")
+1:     .long   " USER_LABEL_PREFIX #FUNC " - 0b\n\
+2:\n" TEXT_SECTION_ASM_OP);
 
 #define ALLOCATE_INITIAL_VALUE(hard_reg) \
   (REGNO (hard_reg) == PR_REG \
index 4c6fc58..e3b2607 100644 (file)
@@ -1,7 +1,7 @@
 /* Specialized bits of code needed to support construction and
    destruction of file-scope objects in C++ code.
    Copyright (C) 1991, 1994, 1995, 1996, 1997, 1998,
-   1999, 2000, 2001 Free Software Foundation, Inc.
+   1999, 2000, 2001, 2002 Free Software Foundation, Inc.
    Contributed by Ron Guilmette (rfg@monkeys.com).
 
 This file is part of GCC.
@@ -62,8 +62,20 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA
 #include "tsystem.h"
 #include "unwind-dw2-fde.h"
 
+#ifndef FORCE_CODE_SECTION_ALIGN
+# define FORCE_CODE_SECTION_ALIGN
+#endif
+
 #ifndef CRT_CALL_STATIC_FUNCTION
-# define CRT_CALL_STATIC_FUNCTION(func) func ()
+# define CRT_CALL_STATIC_FUNCTION(SECTION_OP, FUNC)    \
+static void __attribute__((__used__))                  \
+call_ ## FUNC (void)                                   \
+{                                                      \
+  asm (SECTION_OP);                                    \
+  FUNC ();                                             \
+  FORCE_CODE_SECTION_ALIGN                             \
+  asm (TEXT_SECTION_ASM_OP);                           \
+}
 #endif
 
 #if defined(OBJECT_FORMAT_ELF) && defined(HAVE_LD_EH_FRAME_HDR) \
@@ -237,11 +249,11 @@ extern void __cxa_finalize (void *) TARGET_ATTRIBUTE_WEAK;
    the list we left off processing, and we resume at that point,
    should we be re-invoked.  */
 
-static void
+static void __attribute__((used))
 __do_global_dtors_aux (void)
 {
   static func_ptr *p = __DTOR_LIST__ + 1;
-  static int completed;
+  static _Bool completed;
   func_ptr f;
 
   if (__builtin_expect (completed, 0))
@@ -273,26 +285,15 @@ __do_global_dtors_aux (void)
   completed = 1;
 }
 
-
 /* Stick a call to __do_global_dtors_aux into the .fini section.  */
-
-static void __attribute__ ((__unused__))
-fini_dummy (void)
-{
-  asm (FINI_SECTION_ASM_OP);
-  CRT_CALL_STATIC_FUNCTION (__do_global_dtors_aux);
-#ifdef FORCE_FINI_SECTION_ALIGN
-  FORCE_FINI_SECTION_ALIGN;
-#endif
-  asm (TEXT_SECTION_ASM_OP);
-}
+CRT_CALL_STATIC_FUNCTION (FINI_SECTION_ASM_OP, __do_global_dtors_aux)
 
 #if defined(USE_EH_FRAME_REGISTRY) || defined(JCR_SECTION_NAME)
 /* Stick a call to __register_frame_info into the .init section.  For some
    reason calls with no arguments work more reliably in .init, so stick the
    call in another function.  */
 
-static void
+static void __attribute__((used))
 frame_dummy (void)
 {
 #ifdef USE_EH_FRAME_REGISTRY
@@ -322,16 +323,7 @@ frame_dummy (void)
 #endif /* JCR_SECTION_NAME */
 }
 
-static void __attribute__ ((__unused__))
-init_dummy (void)
-{
-  asm (INIT_SECTION_ASM_OP);
-  CRT_CALL_STATIC_FUNCTION (frame_dummy);
-#ifdef FORCE_INIT_SECTION_ALIGN
-  FORCE_INIT_SECTION_ALIGN;
-#endif
-  asm (TEXT_SECTION_ASM_OP);
-}
+CRT_CALL_STATIC_FUNCTION (INIT_SECTION_ASM_OP, frame_dummy)
 #endif /* EH_FRAME_SECTION_NAME || JCR_SECTION_NAME */
 
 #else  /* OBJECT_FORMAT_ELF */
@@ -373,12 +365,10 @@ asm (INIT_SECTION_ASM_OP);        /* cc1 doesn't know that we are switching! */
    such a thing) so that we can properly perform the construction of
    file-scope static-storage C++ objects within shared libraries.  */
 
-static void
+static void __attribute__((used))
 __do_global_ctors_aux (void)   /* prologue goes in .init section */
 {
-#ifdef FORCE_INIT_SECTION_ALIGN
-  FORCE_INIT_SECTION_ALIGN;    /* Explicit align before switch to .text */
-#endif
+  FORCE_CODE_SECTION_ALIGN     /* explicit align before switch to .text */
   asm (TEXT_SECTION_ASM_OP);   /* don't put epilogue and body in .init */
   DO_GLOBAL_CTORS_BODY;
   atexit (__do_global_dtors);
@@ -486,8 +476,7 @@ STATIC void *__JCR_END__[1]
 #ifdef INIT_SECTION_ASM_OP
 
 #ifdef OBJECT_FORMAT_ELF
-
-static void
+static void __attribute__((used))
 __do_global_ctors_aux (void)
 {
   func_ptr *p;
@@ -496,21 +485,7 @@ __do_global_ctors_aux (void)
 }
 
 /* Stick a call to __do_global_ctors_aux into the .init section.  */
-
-static void __attribute__ ((__unused__))
-init_dummy (void)
-{
-  asm (INIT_SECTION_ASM_OP);
-  CRT_CALL_STATIC_FUNCTION (__do_global_ctors_aux);
-#ifdef FORCE_INIT_SECTION_ALIGN
-  FORCE_INIT_SECTION_ALIGN;
-#endif
-  asm (TEXT_SECTION_ASM_OP);
-#ifdef CRT_END_INIT_DUMMY
-  CRT_END_INIT_DUMMY;
-#endif
-}
-
+CRT_CALL_STATIC_FUNCTION (INIT_SECTION_ASM_OP, __do_global_ctors_aux)
 #else  /* OBJECT_FORMAT_ELF */
 
 /* Stick the real initialization code, followed by a normal sort of
@@ -542,10 +517,7 @@ __do_global_ctors_aux (void)       /* prologue goes in .text section */
   atexit (__do_global_dtors);
 }                              /* epilogue and body go in .init section */
 
-#ifdef FORCE_INIT_SECTION_ALIGN
-FORCE_INIT_SECTION_ALIGN;
-#endif
-
+FORCE_CODE_SECTION_ALIGN
 asm (TEXT_SECTION_ASM_OP);
 
 #endif /* OBJECT_FORMAT_ELF */
index 706cca4..a7a7c5b 100644 (file)
@@ -5458,16 +5458,24 @@ finalization code.  If not defined, GCC will assume such a section does
 not exist.
 
 @findex CRT_CALL_STATIC_FUNCTION
-@item CRT_CALL_STATIC_FUNCTION
-If defined, a C statement that calls the function named as the sole
-argument of this macro.  This is used in @file{crtstuff.c} if
-@code{INIT_SECTION_ASM_OP} or @code{FINI_SECTION_ASM_OP} to calls to
-initialization and finalization functions from the init and fini
-sections.  By default, this macro is a simple function call.  Some
+@item CRT_CALL_STATIC_FUNCTION (@var{section_op}, @var{function})
+If defined, an ASM statement that switches to a different section
+via @var{section_op}, calls @var{function}, and switches back to
+the text section.  This is used in @file{crtstuff.c} if
+@code{INIT_SECTION_ASM_OP} or @code{FINI_SECTION_ASM_OP} to calls
+to initialization and finalization functions from the init and fini
+sections.  By default, this macro uses a simple function call.  Some
 ports need hand-crafted assembly code to avoid dependencies on
 registers initialized in the function prologue or to ensure that
 constant pools don't end up too far way in the text section.
 
+@findex FORCE_CODE_SECTION_ALIGN
+@item FORCE_CODE_SECTION_ALIGN
+If defined, an ASM statement that aligns a code section to some
+arbitrary boundary.  This is used to force all fragments of the
+@code{.init} and @code{.fini} sections to have to same alignment
+and thus prevent the linker from having to add any padding.
+
 @findex EXTRA_SECTIONS
 @findex in_text
 @findex in_data