This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [Patch v2] convert config/vms/*crt0* files to gcc style (PR 44242)


Ping for this VMS patch.

Richard, you have traditionally approved the VMS patches so I have CC'ed you.  However, if the SC think the VMS files deserve
a maintainer, I (and/or Doug Rupp) will be happy to become maintainers for the VMS specific parts.

Tristan.

On Sep 10, 2010, at 3:01 PM, Tristan Gingold wrote:

> Hi,
> 
> improved version of the patch, after a suggestions by Jay.
> 
> Was:
> 
> This patch allows to cross-build gcc for VMS without using the DEC-C compiler.  It consolidates all crt0 files into 
> vms-ucrt0.c file, now written using GCC dialect.
> 
> Tested by build ia64-hp-openvms and alpha64-dec-openvms.
> 
> Ok for mainline ?
> 
> Tristan.
> 
> 2010-09-09  Tristan Gingold  <gingold@adacore.com>
> 
> 	PR target/44242
> 	* config/vms/vms-crt0-64.c: Removed.
> 	* config/vms/vms-crt0.c: Removed.
> 	* config/vms/vms-psxcrt0-64.c: Removed.
> 	* config/vms/vms-psxcrt0.c: Removed.
> 	* config/vms/vms-ucrt0.c: New file.
> 	* config/vms/t-vms64: Removed.
> 	* config/vms/t-vms (VMS_EXTRA_PARTS): Uncomment it.  Remove DECC.
> 	Use $(GCC_FOR_TARGET) to build pcrt0.o and vcrt0.o
> 	* config.gcc (alpha-dec-vms): Use t-vms.
> 
> diff --git a/gcc/config.gcc b/gcc/config.gcc
> index d33d1c6..5ba28a6 100644
> --- a/gcc/config.gcc
> +++ b/gcc/config.gcc
> @@ -721,7 +721,7 @@ alpha*-dec-osf5.1*)
> alpha64-dec-*vms*)
> 	tm_file="${tm_file} alpha/vms.h alpha/vms64.h"
> 	xm_file="alpha/xm-vms.h vms/xm-vms64.h"
> -	tmake_file="alpha/t-alpha vms/t-vms vms/t-vms64 alpha/t-vms alpha/t-ieee"
> +	tmake_file="alpha/t-alpha vms/t-vms alpha/t-vms alpha/t-ieee"
> 	xmake_file=vms/x-vms
> 	exeext=.exe
> 	install_headers_dir=install-headers-cp
> @@ -1549,7 +1549,7 @@ ia64*-*-hpux*)
> ia64-hp-*vms*)
> 	tm_file="${tm_file} elfos.h ia64/sysv4.h ia64/elf.h ia64/vms.h ia64/vms64.h"
> 	xm_file="vms/xm-vms.h vms/xm-vms64.h"
> -	tmake_file="vms/t-vms vms/t-vms64 ia64/t-ia64 ia64/t-vms"
> +	tmake_file="vms/t-vms ia64/t-ia64 ia64/t-vms"
> 	xmake_file=vms/x-vms
> 	target_cpu_default="0"
> 	if test x$gas = xyes
> diff --git a/gcc/config/vms/t-vms b/gcc/config/vms/t-vms
> index 132a53b..75756a2 100644
> --- a/gcc/config/vms/t-vms
> +++ b/gcc/config/vms/t-vms
> @@ -24,15 +24,14 @@ LIMITS_H_TEST = false
> # Under VMS, directory names cannot contain dots.
> version:=$(shell echo $(BASEVER_c) | sed -e 's/\./_/g')
> 
> -# Temporary restriction: VMS_EXTRA_PARTS must be compiled by DEC C.
> -#VMS_EXTRA_PARTS=vcrt0.o pcrt0.o
> -VMS_EXTRA_PARTS=
> -
> -DECC=`echo $(CC) | sed -e 's/xgcc -B.*/decc$(exeext)/' -e 's/^gcc/decc/' -e 's/^decc/.\/decc/' -e 's/\(.*\)-gcc/\1-decc/'`
> +VMS_EXTRA_PARTS=vcrt0.o pcrt0.o
> 
> # Assemble startup files.
> -$(T)vcrt0.o: $(CRT0_S) $(GCC_PASSES)
> -	$(DECC) -c /names=as_is $(srcdir)/config/vms/vms-crt0.c -o $(T)vcrt0.o
> +$(T)vcrt0.o: $(srcdir)/config/vms/vms-ucrt0.c $(GCC_PASSES)
> +	$(GCC_FOR_TARGET) $(GCC_CFLAGS) $(MULTILIB_CFLAGS) $(INCLUDES) \
> +	-c -o $(T)vcrt0.o $(srcdir)/config/vms/vms-ucrt0.c
> +
> +$(T)pcrt0.o: $(srcdir)/config/vms/vms-ucrt0.c $(GCC_PASSES)
> +	$(GCC_FOR_TARGET) $(GCC_CFLAGS) $(MULTILIB_CFLAGS) $(INCLUDES) \
> +	-c -o $(T)pcrt0.o -DCRT0_POSIX_EXIT $(srcdir)/config/vms/vms-ucrt0.c
> 
> -$(T)pcrt0.o: $(CRT0_S) $(GCC_PASSES)
> -	$(DECC) -c /names=as_is $(srcdir)/config/vms/vms-psxcrt0.c -o $(T)pcrt0.o
> diff --git a/gcc/config/vms/t-vms64 b/gcc/config/vms/t-vms64
> deleted file mode 100644
> index 2fe0069..0000000
> --- a/gcc/config/vms/t-vms64
> +++ /dev/null
> @@ -1,27 +0,0 @@
> -# Copyright (C) 2009
> -# Free Software Foundation, Inc.
> -#
> -# This file is part of GCC.
> -#
> -# GCC 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 3, or (at your option)
> -# any later version.
> -#
> -# GCC 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 GCC; see the file COPYING3.  If not see
> -# <http://www.gnu.org/licenses/>.
> -
> -# Assemble startup files.
> -$(T)vcrt0.o: $(CRT0_S) $(GCC_PASSES)
> -	$(DECC) -c /names=as_is /pointer_size=64  \
> -	     $(srcdir)/config/vms/vms-crt0-64.c -o $(T)vcrt0.o
> -
> -$(T)pcrt0.o: $(CRT0_S) $(GCC_PASSES)
> -	$(DECC) -c /names=as_is /pointer_size=64 \
> -	     $(srcdir)/config/vms/vms-psxcrt0-64.c -o $(T)pcrt0.o
> diff --git a/gcc/config/vms/vms-crt0-64.c b/gcc/config/vms/vms-crt0-64.c
> deleted file mode 100644
> index ec59d81..0000000
> --- a/gcc/config/vms/vms-crt0-64.c
> +++ /dev/null
> @@ -1,95 +0,0 @@
> -/* VMS 64bit crt0 returning VMS style condition codes .
> -   Copyright (C) 2001, 2009 Free Software Foundation, Inc.
> -   Contributed by Douglas B. Rupp (rupp@gnat.com).
> -
> -   This file is part of GCC.
> -
> -   GCC 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 3, or (at your option)
> -   any later version.
> -
> -   GCC 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.
> -
> -   Under Section 7 of GPL version 3, you are granted additional
> -   permissions described in the GCC Runtime Library Exception, version
> -   3.1, as published by the Free Software Foundation.
> -
> -   You should have received a copy of the GNU General Public License and
> -   a copy of the GCC Runtime Library Exception along with this program;
> -   see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
> -   <http://www.gnu.org/licenses/>.  */
> -
> -#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 to the call to
> -   lib$establish and the pragmas pointer_size.  */
> -
> -#pragma __pointer_size short
> -
> -#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;
> -
> -#pragma __pointer_size long
> -
> -  int i;
> -  char **long_argv;
> -  char **long_envp;
> -
> -#pragma __pointer_size short
> -
> -  lib$establish (handler);
> -  decc$main (arg1, arg2, arg3, image_file_desc,
> -	     arg5, arg6, &argc, &argv, &envp);
> -
> -#pragma __pointer_size long
> -
> -  /* Reallocate argv with 64 bit pointers.  */
> -  long_argv = (char **) _malloc32 (sizeof (char *) * (argc + 1));
> -
> -  for (i = 0; i < argc; i++)
> -    long_argv[i] = (char *) _strdup32 (argv[i]);
> -
> -  long_argv[argc] = (char *) 0;
> -
> -  for (i = 0; envp[i]; i++);
> -  long_envp = (char **) _malloc32 (sizeof (char *) * (i + 1));
> -
> -  for (i = 0; envp[i]; i++)
> -    long_envp[i] = (char *) _strdup32 (envp[i]);
> -
> -  long_envp[i] = (char *) 0;
> -
> -#pragma __pointer_size short
> -
> -  return main (argc, long_argv, long_envp);
> -}
> -#endif
> diff --git a/gcc/config/vms/vms-crt0.c b/gcc/config/vms/vms-crt0.c
> deleted file mode 100644
> index c0fdaaf..0000000
> --- a/gcc/config/vms/vms-crt0.c
> +++ /dev/null
> @@ -1,66 +0,0 @@
> -/* VMS crt0 returning VMS style condition codes .
> -   Copyright (C) 2001, 2009 Free Software Foundation, Inc.
> -   Contributed by Douglas B. Rupp (rupp@gnat.com).
> -
> -   This file is part of GCC.
> -
> -   GCC 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 3, or (at your option)
> -   any later version.
> -
> -   GCC 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.
> -
> -   Under Section 7 of GPL version 3, you are granted additional
> -   permissions described in the GCC Runtime Library Exception, version
> -   3.1, as published by the Free Software Foundation.
> -
> -   You should have received a copy of the GNU General Public License and
> -   a copy of the GCC Runtime Library Exception along with this program;
> -   see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
> -   <http://www.gnu.org/licenses/>.  */
> -
> -#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 to 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/vms/vms-psxcrt0-64.c b/gcc/config/vms/vms-psxcrt0-64.c
> deleted file mode 100644
> index 45afbc9..0000000
> --- a/gcc/config/vms/vms-psxcrt0-64.c
> +++ /dev/null
> @@ -1,124 +0,0 @@
> -/* VMS 64bit crt0 returning Unix style condition codes .
> -   Copyright (C) 2001, 2009 Free Software Foundation, Inc.
> -   Contributed by Douglas B. Rupp (rupp@gnat.com).
> -
> -   This file is part of GCC.
> -
> -   GCC 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 3, or (at your option)
> -   any later version.
> -
> -   GCC 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.
> -
> -   Under Section 7 of GPL version 3, you are granted additional
> -   permissions described in the GCC Runtime Library Exception, version
> -   3.1, as published by the Free Software Foundation.
> -
> -   You should have received a copy of the GNU General Public License and
> -   a copy of the GCC Runtime Library Exception along with this program;
> -   see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
> -   <http://www.gnu.org/licenses/>.  */
> -
> -#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 to the call to
> -   lib$establish and the pragmas pointer_size.  */
> -
> -#pragma __pointer_size short
> -
> -#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;
> -
> -#pragma __pointer_size long
> -
> -  int i;
> -  char **long_argv;
> -  char **long_envp;
> -  int status;
> -
> -#pragma __pointer_size short
> -
> -  lib$establish (handler);
> -  decc$main (arg1, arg2, arg3, image_file_desc,
> -	     arg5, arg6, &argc, &argv, &envp);
> -
> -#pragma __pointer_size long
> -
> -  /* Reallocate argv with 64 bit pointers.  */
> -  long_argv = (char **) _malloc32 (sizeof (char *) * (argc + 1));
> -
> -  for (i = 0; i < argc; i++)
> -    long_argv[i] = (char *) _strdup32 (argv[i]);
> -
> -  long_argv[argc] = (char *) 0;
> -
> -  for (i = 0; envp[i]; i++);
> -  long_envp = (char **) _malloc32 (sizeof (char *) * (i + 1));
> -
> -  for (i = 0; envp[i]; i++)
> -    long_envp[i] = (char *) _strdup32 (envp[i]);
> -
> -  long_envp[i] = (char *) 0;
> -
> -#pragma __pointer_size short
> -
> -  status = main (argc, long_argv, long_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/vms/vms-psxcrt0.c b/gcc/config/vms/vms-psxcrt0.c
> deleted file mode 100644
> index 5ad5ddb..0000000
> --- a/gcc/config/vms/vms-psxcrt0.c
> +++ /dev/null
> @@ -1,94 +0,0 @@
> -/* VMS crt0 returning Unix style condition codes .
> -   Copyright (C) 2001, 2009 Free Software Foundation, Inc.
> -   Contributed by Douglas B. Rupp (rupp@gnat.com).
> -
> -   This file is part of GCC.
> -
> -   GCC 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 3, or (at your option)
> -   any later version.
> -
> -   GCC 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.
> -
> -   Under Section 7 of GPL version 3, you are granted additional
> -   permissions described in the GCC Runtime Library Exception, version
> -   3.1, as published by the Free Software Foundation.
> -
> -   You should have received a copy of the GNU General Public License and
> -   a copy of the GCC Runtime Library Exception along with this program;
> -   see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
> -   <http://www.gnu.org/licenses/>.  */
> -
> -#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 to 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/vms/vms-ucrt0.c b/gcc/config/vms/vms-ucrt0.c
> new file mode 100644
> index 0000000..344b595
> --- /dev/null
> +++ b/gcc/config/vms/vms-ucrt0.c
> @@ -0,0 +1,127 @@
> +/* VMS crt0 returning Unix style condition codes.
> +   Copyright (C) 2001, 2009, 2010 Free Software Foundation, Inc.
> +   Contributed by Douglas B. Rupp (rupp@gnat.com).
> +
> +   This file is part of GCC.
> +
> +   GCC 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 3, or (at your option)
> +   any later version.
> +
> +   GCC 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.
> +
> +   Under Section 7 of GPL version 3, you are granted additional
> +   permissions described in the GCC Runtime Library Exception, version
> +   3.1, as published by the Free Software Foundation.
> +
> +   You should have received a copy of the GNU General Public License and
> +   a copy of the GCC Runtime Library Exception along with this program;
> +   see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
> +   <http://www.gnu.org/licenses/>.  */
> +
> +#include <stdlib.h>
> +
> +/* Lots of cheat to handle 32bits/64bits pointer conversions.
> +   We use 'long long' for 64 bits pointers and 'int' for 32 bits pointers.  */
> +
> +extern void decc$main (void *arg1, void *arg2, void *arg3,
> +                       void *image_file_desc, void *arg5, void *arg6,
> +                       int *, int *, int *);
> +extern int main (int, char **, char **);
> +extern int _malloc32 (int);
> +
> +#ifdef __ia64__
> +#define MAIN_ASM_NAME asm ("ELF$TFRADR")
> +#else
> +#define MAIN_ASM_NAME
> +#endif
> +
> +int __main (void *arg1, void *arg2, void *arg3,
> +            void *image_file_desc, void *arg5, void *arg6) MAIN_ASM_NAME;
> +
> +/* From errnodef.h, but we need to emulate the globalval.  */
> +extern int C$_EXIT1;
> +
> +/* From stsdef.h  */
> +#define STS$V_MSG_NO 0x03
> +#define STS$M_INHIB_MSG 0x10000000
> +
> +/* From ssdef.h  */
> +#define SS$_NORMAL 1
> +
> +int
> +__main (void *arg1, void *arg2, void *arg3,
> +        void *image_file_desc, void *arg5, void *arg6)
> +{
> +  int argc;
> +  int argv;
> +  int envp;
> +  int status;
> +  int i;
> +  long long *long_argv;
> +  long long *long_envp;
> +
> +  /* The argv and envp arrays are 32 bits pointers to 32 bits pointers.  */
> +  decc$main (arg1, arg2, arg3, image_file_desc,
> +	     arg5, arg6, &argc, &argv, &envp);
> +
> +  if (sizeof (void *) == 8)
> +    {
> +      /* Reallocate argv and envp with 64 bit pointers.  */
> +      long_argv = (long long *)
> +        (long long) _malloc32 (sizeof (long long) * (argc + 1));
> +
> +      for (i = 0; i < argc; i++)
> +        long_argv[i] = ((int *) (long long) argv)[i];
> +
> +      long_argv[argc] = 0;
> +
> +      for (i = 0; ((int *) (long long) envp)[i]; i++)
> +        ;
> +      long_envp = (long long *)
> +        (long long) _malloc32 (sizeof (long long) * (i + 1));
> +
> +      for (i = 0; ((int *) (long long) envp)[i]; i++)
> +        long_envp[i] = ((int *) (long long) envp)[i];
> +
> +      long_envp[i] = 0;
> +    }
> +  else
> +    {
> +      long_argv = (long long *) argv;
> +      long_envp = (long long *) envp;
> +    }
> +  status = main (argc, (char **)long_argv, (char **)long_envp);
> +
> +#ifdef CRT0_POSIX_EXIT
> +  /* Map into a range of 0 - 255.  */
> +  status = status & 255;
> +
> +  if (status > 0)
> +    {
> +      int save_status = status;
> +
> +      status = (long) &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;
> +	}
> +    }
> +  else
> +    status = SS$_NORMAL;
> +#endif /* CRT0_POSIX_EXIT */
> +
> +  return status;
> +}
> 


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]