diff options
author | kenner <kenner@138bc75d-0d04-0410-961f-82ee72b054a4> | 2001-12-10 03:07:23 +0000 |
---|---|---|
committer | kenner <kenner@138bc75d-0d04-0410-961f-82ee72b054a4> | 2001-12-10 03:07:23 +0000 |
commit | e2ac3523179a8583d5e523662dde534c5e474c03 (patch) | |
tree | 9dc053504e94731d6c6076fd9ed717d1d57a3273 /gcc/config/alpha | |
parent | e1bc04ba8c8fe15d6fd1467c2856ea949c8a67de (diff) | |
download | gcc-e2ac3523179a8583d5e523662dde534c5e474c03.tar.gz |
* config/alpha/t-vms (EXTRA_PARTS): Append $(VMS_EXTRA_PARTS)
Add rules for building [vp]crt0.o
* config/alpha/vms.h (START_FILE_SPEC): Define.
* config/alpha/x-vms (VMS_EXTRA_PARTS): Define
* config/alpha/vms-crt0.c, config/alpha/vms-psxcrt0.c: New files.
* doc/invoke.texi: Document special Alpha/VMS options.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@47831 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/config/alpha')
-rw-r--r-- | gcc/config/alpha/t-vms | 16 | ||||
-rw-r--r-- | gcc/config/alpha/vms-crt0.c | 71 | ||||
-rw-r--r-- | gcc/config/alpha/vms-psxcrt0.c | 99 | ||||
-rw-r--r-- | gcc/config/alpha/vms.h | 2 | ||||
-rw-r--r-- | gcc/config/alpha/x-vms | 4 |
5 files changed, 190 insertions, 2 deletions
diff --git a/gcc/config/alpha/t-vms b/gcc/config/alpha/t-vms index 3b079f0096e..359f6f4668a 100644 --- a/gcc/config/alpha/t-vms +++ b/gcc/config/alpha/t-vms @@ -1,7 +1,19 @@ LIB2FUNCS_EXTRA = $(srcdir)/config/alpha/vms_tramp.asm -EXTRA_PARTS = vms-dwarf2.o -# This object must be linked in in order to make the executable debuggable. +# VMS_EXTRA_PARTS is defined in x-vms and represent object files that +# are only needed for VMS targets, but can only be compiled on a VMS host +# (because they need DEC C). +EXTRA_PARTS = vms-dwarf2.o $(VMS_EXTRA_PARTS) + +# This object must be linked with in order to make the executable debuggable. # vms-ld handles it automatically when passed -g. vms-dwarf2.o : $(srcdir)/config/alpha/vms-dwarf2.asm gcc -c -x assembler $< + +# Assemble startup files. +vcrt0.o: $(CRT0_S) $(GCC_PASSES) + decc -c /names=as_is $(srcdir)/config/alpha/vms-crt0.c -o vcrt0.o + +pcrt0.o: $(CRT0_S) $(GCC_PASSES) + decc -c /names=as_is $(srcdir)/config/alpha/vms-psxcrt0.c -o pcrt0.o + diff --git a/gcc/config/alpha/vms-crt0.c b/gcc/config/alpha/vms-crt0.c new file mode 100644 index 00000000000..e75bc02ce74 --- /dev/null +++ b/gcc/config/alpha/vms-crt0.c @@ -0,0 +1,71 @@ +/* VMS crt0 returning VMS style condition codes . + Copyright (C) 2001 Free Software Foundation, Inc. + Contributed by Douglas B. Rupp (rupp@gnat.com). + +This file is part of GNU CC. + +GNU CC 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 into combinations with other programs, +and to distribute those combinations 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 a combine +executable.) + +GNU CC 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 GNU CC; see the file COPYING. If not, write to +the Free Software Foundation, 59 Temple Place - Suite 330, +Boston, MA 02111-1307, USA. */ + +#if !defined(__DECC) +You Lose! This file can only be compiled with DEC C. +#else + +/* This file can only be compiled with DEC C, due the the call to + lib$establish. */ + +#include <stdlib.h> +#include <string.h> +#include <ssdef.h> + +extern void decc$main (); + +extern int main (); + +static int +handler (sigargs, mechargs) + void *sigargs; + void *mechargs; +{ + return SS$_RESIGNAL; +} + +int +__main (arg1, arg2, arg3, image_file_desc, arg5, arg6) + void *arg1, *arg2, *arg3; + void *image_file_desc; + void *arg5, *arg6; +{ + int argc; + char **argv; + char **envp; + + lib$establish (handler); + + decc$main(arg1, arg2, arg3, image_file_desc, arg5, arg6, + &argc, &argv, &envp); + + return main (argc, argv, envp); +} +#endif diff --git a/gcc/config/alpha/vms-psxcrt0.c b/gcc/config/alpha/vms-psxcrt0.c new file mode 100644 index 00000000000..cdf5ced843a --- /dev/null +++ b/gcc/config/alpha/vms-psxcrt0.c @@ -0,0 +1,99 @@ +/* VMS crt0 returning Unix style condition codes . + Copyright (C) 2001 Free Software Foundation, Inc. + Contributed by Douglas B. Rupp (rupp@gnat.com). + +This file is part of GNU CC. + +GNU CC 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 into combinations with other programs, +and to distribute those combinations 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 a combine +executable.) + +GNU CC 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 GNU CC; see the file COPYING. If not, write to +the Free Software Foundation, 59 Temple Place - Suite 330, +Boston, MA 02111-1307, USA. */ + +#if !defined(__DECC) +You Lose! This file can only be compiled with DEC C. +#else + +/* This file can only be compiled with DEC C, due the the call to + lib$establish. */ + +#include <stdlib.h> +#include <string.h> +#include <ssdef.h> +#include <stsdef.h> +#include <errnodef.h> + +extern void decc$main (); +extern int main (); + +static int +handler (sigargs, mechargs) + void *sigargs; + void *mechargs; +{ + return SS$_RESIGNAL; +} + +int +__main (arg1, arg2, arg3, image_file_desc, arg5, arg6) + void *arg1, *arg2, *arg3; + void *image_file_desc; + void *arg5, *arg6; +{ + int argc; + char **argv; + char **envp; + int status; + + lib$establish (handler); + decc$main (arg1, arg2, arg3, image_file_desc, arg5, arg6, + &argc, &argv, &envp); + + status = main (argc, argv, envp); + + /* Map into a range of 0 - 255. */ + status = status & 255; + + if (status > 0) + { + int save_status = status; + + status = C$_EXIT1 + ((status - 1) << STS$V_MSG_NO); + + /* An exit failure status requires a "severe" error + All status values are defined in errno with a successful + (1) severity but can be changed to an error (2) severity by adding 1. + In addition for compatibility with UNIX exit() routines we inhibit + a run-time error message from being generated on exit(1). */ + + if (save_status == 1) + { + status++; + status |= STS$M_INHIB_MSG; + } + } + + if (status == 0) + status = SS$_NORMAL; + + return status; +} +#endif diff --git a/gcc/config/alpha/vms.h b/gcc/config/alpha/vms.h index c46b94379ee..df7140dce94 100644 --- a/gcc/config/alpha/vms.h +++ b/gcc/config/alpha/vms.h @@ -450,6 +450,8 @@ do { \ %{g2:-g2 vms-dwarf2.o%s} %{g3:-g3 vms-dwarf2.o%s} %{shared} %{v} %{map}" #undef STARTFILE_SPEC +#define STARTFILE_SPEC "%{!shared:%{mvms-return-codes:vcrt0.o%s} \ +%{!mvms-return-codes:pcrt0.o%s}}" /* Define the names of the division and modulus functions. */ #define DIVSI3_LIBCALL "OTS$DIV_I" diff --git a/gcc/config/alpha/x-vms b/gcc/config/alpha/x-vms index 49338c152b6..79238a1fa63 100644 --- a/gcc/config/alpha/x-vms +++ b/gcc/config/alpha/x-vms @@ -9,3 +9,7 @@ decc.exe : vms-cc.o $(CC) -o $@ vms-cc.o ../libiberty/libiberty.a EXTRA_PROGRAMS=ld.exe decc.exe + +# These extra parts can only be compiled on a VMS host and are only needed +# on a VMS target. +VMS_EXTRA_PARTS=vcrt0.o pcrt0.o |