From d7c23cdcce38607fed5d4124b1b7aafb455cbc4b Mon Sep 17 00:00:00 2001 From: Douglas B Rupp Date: Sun, 9 Dec 2001 22:07:23 -0500 Subject: [PATCH] t-vms (EXTRA_PARTS): Append $(VMS_EXTRA_PARTS) Add rules for building [vp]crt0.o * 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. From-SVN: r47831 --- gcc/ChangeLog | 9 ++++ gcc/config/alpha/t-vms | 16 +++++- gcc/config/alpha/vms-crt0.c | 71 ++++++++++++++++++++++++ gcc/config/alpha/vms-psxcrt0.c | 99 ++++++++++++++++++++++++++++++++++ gcc/config/alpha/vms.h | 2 + gcc/config/alpha/x-vms | 4 ++ gcc/doc/invoke.texi | 17 ++++++ 7 files changed, 216 insertions(+), 2 deletions(-) create mode 100644 gcc/config/alpha/vms-crt0.c create mode 100644 gcc/config/alpha/vms-psxcrt0.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 1a5e442ef5eb..d832d93f2a51 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,12 @@ +Sun Dec 9 21:57:24 2001 Douglas B. Rupp + + * 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. + Sun Dec 9 20:25:17 2001 Richard Kenner * hwint.h (HOST_BITS_PER_LONGLONG): Deal with __int64 type. diff --git a/gcc/config/alpha/t-vms b/gcc/config/alpha/t-vms index 3b079f0096eb..359f6f4668a5 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 000000000000..e75bc02ce74c --- /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 +#include +#include + +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 000000000000..cdf5ced843a0 --- /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 +#include +#include +#include +#include + +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 c46b94379ee6..df7140dce943 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 49338c152b63..79238a1fa638 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 diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi index 65008e6fa690..675a62f9b614 100644 --- a/gcc/doc/invoke.texi +++ b/gcc/doc/invoke.texi @@ -520,6 +520,10 @@ in the following sections. -mbwx -mno-bwx -mcix -mno-cix -mmax -mno-max @gol -mmemory-latency=@var{time}} +@emph{DEC Alpha/VMS Options} +@gccoptlist{ +-mvms-return-codes} + @emph{Clipper Options} @gccoptlist{ -mc300 -mc400} @@ -5070,6 +5074,7 @@ that macro, which enables you to change the defaults. * HPPA Options:: * Intel 960 Options:: * DEC Alpha Options:: +* DEC Alpha/VMS Options:: * Clipper Options:: * H8/300 Options:: * SH Options:: @@ -8562,6 +8567,18 @@ Note that L3 is only valid for EV5. @end table @end table +@node DEC Alpha/VMS Options +@subsection DEC Alpha/VMS Options + +These @samp{-m} options are defined for the DEC Alpha/VMS implementations: + +@table @gcctabopt +@item -mvms-return-codes +@opindex mvms-return-codes +Return VMS condition codes from main. The default is to return POSIX +style condition (e.g. error) codes. +@end table + @node Clipper Options @subsection Clipper Options