aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Henderson <rth@cygnus.com>1998-04-08 11:22:54 -0700
committerRichard Henderson <rth@gcc.gnu.org>1998-04-08 11:22:54 -0700
commit574badbc83dc195ec759868ddf1caf45806f957d (patch)
tree1f70913172d8a281c6209edc95ccdaaa2286797b
parentdf89b5e780040cd1335a0783a625527e0249458b (diff)
downloadgcc-574badbc83dc195ec759868ddf1caf45806f957d.zip
gcc-574badbc83dc195ec759868ddf1caf45806f957d.tar.gz
gcc-574badbc83dc195ec759868ddf1caf45806f957d.tar.bz2
crtbegin.asm, [...]: New files.
* alpha/crtbegin.asm, alpha/crtend.asm, alpha/t-crtb: New files. * configure.in (alpha-*-linux*): Use them. From-SVN: r19051
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/config/alpha/crtbegin.asm104
-rw-r--r--gcc/config/alpha/crtend.asm105
-rw-r--r--gcc/config/alpha/t-crtbe9
-rwxr-xr-xgcc/configure6
-rw-r--r--gcc/configure.in6
6 files changed, 231 insertions, 4 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 6a10303..54d72b5 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -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
index 0000000..dfb11e5
--- /dev/null
+++ b/gcc/config/alpha/crtbegin.asm
@@ -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
index 0000000..36f11b9
--- /dev/null
+++ b/gcc/config/alpha/crtend.asm
@@ -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
index 0000000..5e82b92
--- /dev/null
+++ b/gcc/config/alpha/t-crtbe
@@ -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
diff --git a/gcc/configure b/gcc/configure
index 93c8a46..05ecc76 100755
--- a/gcc/configure
+++ b/gcc/configure
@@ -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
diff --git a/gcc/configure.in b/gcc/configure.in
index 3d16cb5..0bd2279 100644
--- a/gcc/configure.in
+++ b/gcc/configure.in
@@ -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