crtbegin.asm, [...]: New files.
authorRichard Henderson <rth@cygnus.com>
Wed, 8 Apr 1998 18:22:54 +0000 (11:22 -0700)
committerRichard Henderson <rth@gcc.gnu.org>
Wed, 8 Apr 1998 18:22:54 +0000 (11:22 -0700)
* alpha/crtbegin.asm, alpha/crtend.asm, alpha/t-crtb: New files.
* configure.in (alpha-*-linux*): Use them.

From-SVN: r19051

gcc/ChangeLog
gcc/config/alpha/crtbegin.asm [new file with mode: 0644]
gcc/config/alpha/crtend.asm [new file with mode: 0644]
gcc/config/alpha/t-crtbe [new file with mode: 0644]
gcc/configure
gcc/configure.in

index 6a1030314adb14f318471803525b4668b6aadce2..54d72b583e6766b8d3f51c5d2e86516732283563 100644 (file)
@@ -1,3 +1,8 @@
+Wed Apr  8 18:21:30 1998  Richard Henderson  <rth@cygnus.com>
+
+       * alpha/crtbegin.asm, alpha/crtend.asm, alpha/t-crtb: New files.
+       * configure.in (alpha-*-linux*): Use them.
+
 Fri Apr  3 17:02:13 1998  Alexandre Petit-Bianco  <apbianco@cygnus.com>
  
        * tree.def (EXPR_WITH_FILE_LOCATION): New tree node definition.
diff --git a/gcc/config/alpha/crtbegin.asm b/gcc/config/alpha/crtbegin.asm
new file mode 100644 (file)
index 0000000..dfb11e5
--- /dev/null
@@ -0,0 +1,104 @@
+ # Copyright (C) 1996, 1998 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.
+
+ #
+ # 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      $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
+
+ #
+ # Invoke our destructors in order.
+ #
+
+.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     $26,0($30)
+       .mask   0x4000000,-16
+       .prologue 1
+
+       lda     $1,__DTOR_LIST__
+       br      1f
+0:     stq     $1,8($30)
+       jsr     $26,($27)
+       ldq     $1,8($30)
+1:     ldq     $27,8($1)
+       addq    $1,8,$1
+       bne     $27,0b
+
+       ldq     $26,0($30)
+       lda     $30,16($30)
+       ret
+
+       .end __do_global_dtors_aux
diff --git a/gcc/config/alpha/crtend.asm b/gcc/config/alpha/crtend.asm
new file mode 100644 (file)
index 0000000..36f11b9
--- /dev/null
@@ -0,0 +1,105 @@
+ # Copyright (C) 1996 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
+
+
+ #
+ # 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 destructors 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__
+       br      1f
+0:     jsr     $26,($27)
+1:     ldq     $27,-8($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
diff --git a/gcc/config/alpha/t-crtbe b/gcc/config/alpha/t-crtbe
new file mode 100644 (file)
index 0000000..5e82b92
--- /dev/null
@@ -0,0 +1,9 @@
+# Effectively disable the crtbegin/end rules using crtstuff.c
+T = disable
+
+# Assemble startup files.
+crtbegin.o: $(srcdir)/config/alpha/crtbegin.asm $(GCC_PASSES)
+       $(GCC_FOR_TARGET) -c -o crtbegin.o -x assembler $(srcdir)/config/alpha/crtbegin.asm
+
+crtend.o: $(srcdir)/config/alpha/crtend.asm $(GCC_PASSES)
+       $(GCC_FOR_TARGET) -c -o crtend.o -x assembler $(srcdir)/config/alpha/crtend.asm
index 93c8a463dd5217793338568bd092453b4c7e6376..05ecc76ee363995c26c6424187aa60dddfd5cc42 100755 (executable)
@@ -2016,7 +2016,8 @@ for machine in $build $host $target; do
                tm_file="${tm_file} alpha/elf.h alpha/linux-elf.h alpha/linux.h"
                xm_defines=USE_BFD
                target_cpu_default="MASK_GAS"
-               tmake_file="t-linux t-linux-gnulibc1 alpha/t-linux"
+               tmake_file="t-linux t-linux-gnulibc1 alpha/t-linux alpha/t-crtbe"
+               extra_parts="crtbegin.o crtend.o"
                xmake_file=none
                gas=yes gnu_ld=yes
                if [ x$enable_threads = xyes ]; then
@@ -2027,7 +2028,8 @@ for machine in $build $host $target; do
                tm_file="${tm_file} alpha/elf.h alpha/linux-elf.h alpha/linux.h"
                xm_defines=USE_BFD
                target_cpu_default="MASK_GAS"
-               tmake_file="t-linux alpha/t-linux"
+               tmake_file="t-linux alpha/t-linux alpha/t-crtbe"
+               extra_parts="crtbegin.o crtend.o"
                xmake_file=none
                fixincludes=Makefile.in
                gas=yes gnu_ld=yes
index 3d16cb5127e3d4d9ef0827bcd186f8748cc14eca..0bd227947a3bbed18848e3438c72e996ae7830c4 100644 (file)
@@ -333,7 +333,8 @@ for machine in $build $host $target; do
                tm_file="${tm_file} alpha/elf.h alpha/linux-elf.h alpha/linux.h"
                xm_defines=USE_BFD
                target_cpu_default="MASK_GAS"
-               tmake_file="t-linux t-linux-gnulibc1 alpha/t-linux"
+               tmake_file="t-linux t-linux-gnulibc1 alpha/t-linux alpha/t-crtbe"
+               extra_parts="crtbegin.o crtend.o"
                xmake_file=none
                gas=yes gnu_ld=yes
                if [[ x$enable_threads = xyes ]]; then
@@ -344,7 +345,8 @@ for machine in $build $host $target; do
                tm_file="${tm_file} alpha/elf.h alpha/linux-elf.h alpha/linux.h"
                xm_defines=USE_BFD
                target_cpu_default="MASK_GAS"
-               tmake_file="t-linux alpha/t-linux"
+               tmake_file="t-linux alpha/t-linux alpha/t-crtbe"
+               extra_parts="crtbegin.o crtend.o"
                xmake_file=none
                fixincludes=Makefile.in
                gas=yes gnu_ld=yes