diff options
Diffstat (limited to 'gcc/config/vms')
-rw-r--r-- | gcc/config/vms/t-vms | 37 | ||||
-rw-r--r-- | gcc/config/vms/vms-crtl-64.h | 195 | ||||
-rw-r--r-- | gcc/config/vms/vms-crtl.h | 191 | ||||
-rw-r--r-- | gcc/config/vms/vms-ucrt0.c | 127 | ||||
-rw-r--r-- | gcc/config/vms/vms.opt | 31 | ||||
-rw-r--r-- | gcc/config/vms/x-vms | 27 | ||||
-rw-r--r-- | gcc/config/vms/xm-vms.h | 58 | ||||
-rw-r--r-- | gcc/config/vms/xm-vms64.h | 23 |
8 files changed, 689 insertions, 0 deletions
diff --git a/gcc/config/vms/t-vms b/gcc/config/vms/t-vms new file mode 100644 index 000000000..d02b66614 --- /dev/null +++ b/gcc/config/vms/t-vms @@ -0,0 +1,37 @@ +# Copyright (C) 2009, 2010 +# 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/>. + +STMP_FIXPROTO = +STMP_FIXINC = +LIMITS_H_TEST = false + +# Under VMS, directory names cannot contain dots. +version:=$(shell echo $(BASEVER_c) | sed -e 's/\./_/g') + +VMS_EXTRA_PARTS=vcrt0.o pcrt0.o + +# Assemble startup files. +$(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 + diff --git a/gcc/config/vms/vms-crtl-64.h b/gcc/config/vms/vms-crtl-64.h new file mode 100644 index 000000000..84b653d79 --- /dev/null +++ b/gcc/config/vms/vms-crtl-64.h @@ -0,0 +1,195 @@ +/* Definitions of target machine GNU compiler. 64bit VMS version. + Copyright (C) 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. + +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/>. */ + +/* + Correlation array of 64bit standard CRTL names with DECCRTL + function names. Currently contains only a partial list, + e.g. those functions use in GNAT and GCC. Memory allocation + routines are 32bit but this can be overridden by -mmalloc + subtarget switch. + + Note: Please keep in alphabetical order. +*/ + +#undef CRTL_NAMES +#define CRTL_NAMES \ +{ \ +{"_calloc32", "decc$calloc", 0}, \ +{"_malloc32", "decc$malloc", 0}, \ +{"_realloc32", "decc$realloc", 0}, \ +{"_strdup32", "decc$strdup", 0}, \ +{"abs", "decc$abs", 0}, \ +{"abort", "decc$abort", 0}, \ +{"access", "decc$access", 0}, \ +{"accept", "decc$accept", 0}, \ +{"acos", "decc$tacos", 0}, \ +{"alarm", "decc$alarm", 0}, \ +{"asin", "decc$tasin", 0}, \ +{"atan", "decc$tatan", 0}, \ +{"atan2", "decc$tatan2", 0}, \ +{"atexit", "decc$atexit", 0}, \ +{"atoi", "decc$atoi", 0}, \ +{"atoll", "decc$atoll", 0}, \ +{"atoq", "decc$atoq", 0}, \ +{"basename", "decc$_basename64", 0}, \ +{"bcmp", "decc$bcmp", 0}, \ +{"bcopy", "decc$bcopy", 0}, \ +{"bsearch", "decc$_bsearch64", 0}, \ +{"bzero", "decc$bzero", 0}, \ +{"calloc", "decc$calloc", 0}, \ +{"ceil", "decc$tceil", 0}, \ +{"chdir", "decc$chdir", 0}, \ +{"chown", "decc$chown", 0}, \ +{"clearerr", "decc$clearerr", 0}, \ +{"clock", "decc$clock", 0}, \ +{"close", "decc$close", 0}, \ +{"cos", "decc$tcos", 0}, \ +{"connect", "decc$connect", 0}, \ +{"ctime", "decc$ctime", 0}, \ +{"dup", "decc$dup", 0}, \ +{"dup2", "decc$dup2", 0}, \ +{"exit", "decc$exit", 0}, \ +{"exp", "decc$texp", 0}, \ +{"fabs", "decc$tfabs", 0}, \ +{"fclose", "decc$fclose", 0}, \ +{"fdopen", "decc$fdopen", 0}, \ +{"fgetc", "decc$fgetc", 0}, \ +{"fgets", "decc$_fgets64", 0}, \ +{"fflush", "decc$fflush", 0}, \ +{"ffs", "decc$ffs", 0}, \ +{"floor", "decc$tfloor", 0}, \ +{"fopen", "decc$fopen", 0}, \ +{"fputc", "decc$fputc", 0}, \ +{"fputs", "decc$fputs", 0}, \ +{"free", "decc$free", 0}, \ +{"fread", "decc$fread", 0}, \ +{"freopen", "decc$freopen", 0}, \ +{"fseek", "decc$fseek", 0}, \ +{"ftell", "decc$ftell", 0}, \ +{"fwrite", "decc$fwrite", 0}, \ +{"getcwd", "decc$_getcwd64", 0}, \ +{"getegid", "decc$getegid", 0}, \ +{"getenv", "decc$getenv", 0}, \ +{"geteuid", "decc$geteuid", 0}, \ +{"getgid", "decc$getgid", 0}, \ +{"gethostbyaddr","decc$gethostbyaddr",0}, \ +{"gethostbyname","decc$gethostbyname",0}, \ +{"getpagesize", "decc$getpagesize", 0}, \ +{"getpid", "decc$getpid", 0}, \ +{"getservbyname","decc$getservbyname",0}, \ +{"getservbyport","decc$getservbyport",0}, \ +{"gettimeofday", "decc$gettimeofday", 0}, \ +{"getuid", "decc$getuid", 0}, \ +{"htons", "decc$htons", 0}, \ +{"iconv", "decc$iconv", 0}, \ +{"index", "decc$_index64", 0}, \ +{"isatty", "decc$isatty", 0}, \ +{"isdigit", "decc$isdigit", 0}, \ +{"kill", "decc$kill", 0}, \ +{"log", "decc$tlog", 0}, \ +{"log10", "decc$tlog10", 0}, \ +{"lseek", "decc$lseek", 0}, \ +{"ioctl", "decc$ioctl", 0}, \ +{"malloc", "decc$malloc", 0}, \ +{"mbstowcs", "decc$_mbstowcs64", 0}, \ +{"memchr", "decc$_memchr64", 0}, \ +{"memcmp", "decc$memcmp", 0}, \ +{"memcpy", "decc$_memcpy64", 0}, \ +{"memmove", "decc$_memmove64", 0}, \ +{"memset", "decc$_memset64", 0}, \ +{"mkstemp", "decc$mkstemp", 0}, \ +{"mktemp", "decc$_mktemp64", 0}, \ +{"mmap", "decc$_mmap64", 0}, \ +{"munmap", "decc$munmap", 0}, \ +{"nl_langinfo", "decc$nl_langinfo", 0}, \ +{"open", "decc$open", 0}, \ +{"pclose", "decc$pclose", 0}, \ +{"popen", "decc$popen", 0}, \ +{"pow", "decc$tpow", 0}, \ +{"printf", "decc$txprintf", 0}, \ +{"putenv", "decc$putenv", 0}, \ +{"puts", "decc$puts", 0}, \ +{"random", "decc$random", 0}, \ +{"read", "decc$read", 0}, \ +{"realloc", "decc$realloc", 0}, \ +{"recv", "decc$recv", 0}, \ +{"recvfrom", "decc$recvfrom", 0}, \ +{"recvmsg", "decc$__bsd44___recvmsg64", 0}, \ +{"rename", "decc$rename", 0}, \ +{"rewind", "decc$rewind", 0}, \ +{"rindex", "decc$_rindex64", 0}, \ +{"rmdir", "decc$rmdir", 0}, \ +{"send", "decc$send", 0}, \ +{"sendmsg", "decc$__bsd44___sendmsg64", 0}, \ +{"sendto", "decc$sendto", 0}, \ +{"setenv", "decc$setenv", 0}, \ +{"setlocale", "decc$setlocale", 0}, \ +{"setvbuf", "decc$setvbuf", 0}, \ +{"signal", "decc$signal", 0}, \ +{"sigsetmask", "decc$sigsetmask", 0}, \ +{"sin", "decc$tsin", 0}, \ +{"snprintf", "decc$txsnprintf", 0}, \ +{"socket", "decc$socket", 0}, \ +{"sqrt", "decc$tsqrt", 0}, \ +{"strcasecmp", "decc$strcasecmp", 0}, \ +{"strchr", "decc$_strchr64", 0}, \ +{"strcpy", "decc$_strcpy64", 0}, \ +{"strdup", "decc$strdup", 0}, \ +{"strerror", "decc$strerror", 0}, \ +{"strlen", "decc$strlen", 0}, \ +{"strncasecmp", "decc$strncasecmp", 0}, \ +{"strncmp", "decc$strncmp", 0}, \ +{"strncpy", "decc$_strncpy64", 0}, \ +{"strrchr", "decc$_strrchr64", 0}, \ +{"strstr", "decc$_strstr64", 0}, \ +{"strtod", "decc$t_strtod64", 0}, \ +{"strtol", "decc$_strtoll64", 0}, \ +{"strtoul", "decc$_strtoull64", 0}, \ +{"sysconf", "decc$sysconf", 0}, \ +{"system", "decc$system", 0}, \ +{"tan", "decc$ttan", 0}, \ +{"time", "decc$time", 0}, \ +{"times", "decc$times", 0}, \ +{"tmpfile", "decc$tmpfile", 0}, \ +{"tmpnam", "decc$_tmpnam64", 0}, \ +{"ungetc", "decc$ungetc", 0}, \ +{"unlink", "decc$unlink", 0}, \ +{"umask", "decc$umask", 0}, \ +{"utime", "decc$utime", 0}, \ +{"wait", "decc$wait", 0}, \ +{"waitpid", "decc$waitpid", 0}, \ +{"wcswidth", "decc$wcswidth", 0}, \ +{"write", "decc$write", 0}, \ +{"vfprintf", "decc$txvfprintf", 0}, \ +{"vprintf", "decc$txvprintf", 0}, \ +{"vsprintf", "decc$txvsprintf", 0}, \ +{"vsnprintf", "decc$txvsnprintf", 0}, \ +{NULL, NULL, 0} \ +} + +/* Initialize of libfuncs that are 32/64 bit memory specific. */ + +#undef MEM_LIBFUNCS_INIT +#define MEM_LIBFUNCS_INIT \ +do { \ + memcpy_libfunc = init_one_libfunc ("decc$_memcpy64"); \ + memmove_libfunc = init_one_libfunc ("decc$_memmove64"); \ + memset_libfunc = init_one_libfunc ("decc$_memset64"); \ +} while (0) diff --git a/gcc/config/vms/vms-crtl.h b/gcc/config/vms/vms-crtl.h new file mode 100644 index 000000000..8f09176dc --- /dev/null +++ b/gcc/config/vms/vms-crtl.h @@ -0,0 +1,191 @@ +/* Definitions of target machine GNU compiler. 32bit VMS version. + Copyright (C) 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. + +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/>. */ + +/* + Correlation array of standard CRTL names with DECCRTL + function names. Currently contains only a partial list, + e.g. those functions use in GNAT and GCC + + Note: Please keep in alphabetical order. +*/ + +#define CRTL_NAMES \ +{ \ +{"_calloc32", "decc$calloc", 0}, \ +{"_malloc32", "decc$malloc", 0}, \ +{"_realloc32", "decc$realloc", 0}, \ +{"_strdup32", "decc$strdup", 0}, \ +{"abs", "decc$abs", 0}, \ +{"abort", "decc$abort", 0}, \ +{"access", "decc$access", 0}, \ +{"accept", "decc$accept", 0}, \ +{"acos", "decc$tacos", 0}, \ +{"alarm", "decc$alarm", 0}, \ +{"asin", "decc$tasin", 0}, \ +{"atan", "decc$tatan", 0}, \ +{"atan2", "decc$tatan2", 0}, \ +{"atexit", "decc$atexit", 0}, \ +{"atoi", "decc$atoi", 0}, \ +{"atoll", "decc$atoll", 0}, \ +{"atoq", "decc$atoq", 0}, \ +{"basename", "decc$basename", 0}, \ +{"bcmp", "decc$bcmp", 0}, \ +{"bcopy", "decc$bcopy", 0}, \ +{"bsearch", "decc$bsearch", 0}, \ +{"bzero", "decc$bzero", 0}, \ +{"calloc", "decc$calloc", 0}, \ +{"ceil", "decc$tceil", 0}, \ +{"chdir", "decc$chdir", 0}, \ +{"chown", "decc$chown", 0}, \ +{"clearerr", "decc$clearerr", 0}, \ +{"clock", "decc$clock", 0}, \ +{"close", "decc$close", 0}, \ +{"cos", "decc$tcos", 0}, \ +{"connect", "decc$connect", 0}, \ +{"ctime", "decc$ctime", 0}, \ +{"dup", "decc$dup", 0}, \ +{"dup2", "decc$dup2", 0}, \ +{"exit", "decc$exit", 0}, \ +{"exp", "decc$texp", 0}, \ +{"fabs", "decc$tfabs", 0}, \ +{"fclose", "decc$fclose", 0}, \ +{"fdopen", "decc$fdopen", 0}, \ +{"fgetc", "decc$fgetc", 0}, \ +{"fgets", "decc$fgets", 0}, \ +{"fflush", "decc$fflush", 0}, \ +{"ffs", "decc$ffs", 0}, \ +{"floor", "decc$tfloor", 0}, \ +{"fopen", "decc$fopen", 0}, \ +{"fputc", "decc$fputc", 0}, \ +{"fputs", "decc$fputs", 0}, \ +{"free", "decc$free", 0}, \ +{"fread", "decc$fread", 0}, \ +{"freopen", "decc$freopen", 0}, \ +{"fseek", "decc$fseek", 0}, \ +{"ftell", "decc$ftell", 0}, \ +{"fwrite", "decc$fwrite", 0}, \ +{"getcwd", "decc$getcwd", 0}, \ +{"getegid", "decc$getegid", 0}, \ +{"getenv", "decc$getenv", 0}, \ +{"geteuid", "decc$geteuid", 0}, \ +{"getgid", "decc$getgid", 0}, \ +{"gethostbyaddr","decc$gethostbyaddr",0}, \ +{"gethostbyname","decc$gethostbyname",0}, \ +{"getpagesize", "decc$getpagesize", 0}, \ +{"getpid", "decc$getpid", 0}, \ +{"getservbyname","decc$getservbyname",0}, \ +{"getservbyport","decc$getservbyport",0}, \ +{"gettimeofday", "decc$gettimeofday", 0}, \ +{"getuid", "decc$getuid", 0}, \ +{"htons", "decc$htons", 0}, \ +{"iconv", "decc$iconv", 0}, \ +{"index", "decc$index", 0}, \ +{"isatty", "decc$isatty", 0}, \ +{"isdigit", "decc$isdigit", 0}, \ +{"kill", "decc$kill", 0}, \ +{"log", "decc$tlog", 0}, \ +{"log10", "decc$tlog10", 0}, \ +{"lseek", "decc$lseek", 0}, \ +{"ioctl", "decc$ioctl", 0}, \ +{"malloc", "decc$malloc", 0}, \ +{"mbstowcs", "decc$mbstowcs", 0}, \ +{"memchr", "decc$memchr", 0}, \ +{"memcmp", "decc$memcmp", 0}, \ +{"memcpy", "decc$memcpy", 0}, \ +{"memmove", "decc$memmove", 0}, \ +{"memset", "decc$memset", 0}, \ +{"mkstemp", "decc$mkstemp", 0}, \ +{"mktemp", "decc$mktemp", 0}, \ +{"mmap", "decc$mmap", 0}, \ +{"munmap", "decc$munmap", 0}, \ +{"nl_langinfo", "decc$nl_langinfo", 0}, \ +{"open", "decc$open", 0}, \ +{"pclose", "decc$pclose", 0}, \ +{"popen", "decc$popen", 0}, \ +{"pow", "decc$tpow", 0}, \ +{"printf", "decc$txprintf", 0}, \ +{"putenv", "decc$putenv", 0}, \ +{"puts", "decc$puts", 0}, \ +{"random", "decc$random", 0}, \ +{"read", "decc$read", 0}, \ +{"realloc", "decc$realloc", 0}, \ +{"recv", "decc$recv", 0}, \ +{"recvfrom", "decc$recvfrom", 0}, \ +{"recvmsg", "decc$__bsd44___recvmsg32", 0}, \ +{"rename", "decc$rename", 0}, \ +{"rewind", "decc$rewind", 0}, \ +{"rindex", "decc$rindex", 0}, \ +{"rmdir", "decc$rmdir", 0}, \ +{"send", "decc$send", 0}, \ +{"sendmsg", "decc$__bsd44___sendmsg32", 0}, \ +{"sendto", "decc$sendto", 0}, \ +{"setenv", "decc$setenv", 0}, \ +{"setlocale", "decc$setlocale", 0}, \ +{"setvbuf", "decc$setvbuf", 0}, \ +{"signal", "decc$signal", 0}, \ +{"sigsetmask", "decc$sigsetmask", 0}, \ +{"sin", "decc$tsin", 0}, \ +{"snprintf", "decc$txsnprintf", 0}, \ +{"socket", "decc$socket", 0}, \ +{"sqrt", "decc$tsqrt", 0}, \ +{"strcasecmp", "decc$strcasecmp", 0}, \ +{"strchr", "decc$strchr", 0}, \ +{"strcpy", "decc$strcpy", 0}, \ +{"strdup", "decc$strdup", 0}, \ +{"strerror", "decc$strerror", 0}, \ +{"strlen", "decc$strlen", 0}, \ +{"strncasecmp", "decc$strncasecmp", 0}, \ +{"strncmp", "decc$strncmp", 0}, \ +{"strncpy", "decc$strncpy", 0}, \ +{"strrchr", "decc$strrchr", 0}, \ +{"strstr", "decc$strstr", 0}, \ +{"strtod", "decc$tstrtod", 0}, \ +{"strtol", "decc$strtoll", 0}, \ +{"strtoul", "decc$strtoull", 0}, \ +{"sysconf", "decc$sysconf", 0}, \ +{"system", "decc$system", 0}, \ +{"tan", "decc$ttan", 0}, \ +{"time", "decc$time", 0}, \ +{"times", "decc$times", 0}, \ +{"tmpfile", "decc$tmpfile", 0}, \ +{"tmpnam", "decc$tmpnam", 0}, \ +{"ungetc", "decc$ungetc", 0}, \ +{"unlink", "decc$unlink", 0}, \ +{"umask", "decc$umask", 0}, \ +{"utime", "decc$utime", 0}, \ +{"wait", "decc$wait", 0}, \ +{"waitpid", "decc$waitpid", 0}, \ +{"wcswidth", "decc$wcswidth", 0}, \ +{"write", "decc$write", 0}, \ +{"vfprintf", "decc$txvfprintf", 0}, \ +{"vprintf", "decc$txvprintf", 0}, \ +{"vsprintf", "decc$txvsprintf", 0}, \ +{"vsnprintf", "decc$txvsnprintf", 0}, \ +{NULL, NULL, 0} \ +} + +/* Initialize of libfuncs that are 32/64 bit memory specific. */ + +#define MEM_LIBFUNCS_INIT \ +do { \ + memcpy_libfunc = init_one_libfunc ("decc$memcpy"); \ + memmove_libfunc = init_one_libfunc ("decc$memmove"); \ + memset_libfunc = init_one_libfunc ("decc$memset"); \ +} while (0) diff --git a/gcc/config/vms/vms-ucrt0.c b/gcc/config/vms/vms-ucrt0.c new file mode 100644 index 000000000..344b59520 --- /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; +} diff --git a/gcc/config/vms/vms.opt b/gcc/config/vms/vms.opt new file mode 100644 index 000000000..a1713b811 --- /dev/null +++ b/gcc/config/vms/vms.opt @@ -0,0 +1,31 @@ +; Copyright (C) 2009, 2011 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/>. + +map +Target RejectNegative + +mmalloc64 +Target Report Mask(MALLOC64) +Malloc data into P2 space + +mdebug-main= +Target RejectNegative Joined Var(vms_debug_main) +Set name of main routine for the debugger + +mvms-return-codes +Target RejectNegative diff --git a/gcc/config/vms/x-vms b/gcc/config/vms/x-vms new file mode 100644 index 000000000..b232c8e68 --- /dev/null +++ b/gcc/config/vms/x-vms @@ -0,0 +1,27 @@ +# Copyright (C) 2001, 2002, 2004, 2005, 2008, 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/>. + +LN = cp -p +LN_S = cp -p + +# Doesn't work on VMS +USE_COLLECT2= + +# There are no man pages on VMS +POD2MAN = false diff --git a/gcc/config/vms/xm-vms.h b/gcc/config/vms/xm-vms.h new file mode 100644 index 000000000..7907f9263 --- /dev/null +++ b/gcc/config/vms/xm-vms.h @@ -0,0 +1,58 @@ +/* Configuration for GCC for hosting on VMS + using a Unix style C library. + Copyright (C) 1996, 1997, 2001, 2004, 2007, 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/>. */ + +/* A couple of conditionals for execution machine are controlled here. */ +#ifndef VMS +#define VMS +#endif + +/* Causes exit() to be redefined to __posix_exit() and + Posix compatible failure and success codes to be used. */ +#define _POSIX_EXIT 1 + +/* Open files in stream mode if not otherwise explicitly specified. */ +#define __UNIX_FOPEN 1 + +/* Write to stdout using fputc to avoid record terminators in pipes. */ +#define __UNIX_FWRITE 1 + +#define STDC_HEADERS 1 + +#define HOST_EXECUTABLE_SUFFIX ".exe" +#define HOST_OBJECT_SUFFIX ".obj" + +#define DUMPFILE_FORMAT "_%02d_" + +#define DELETE_IF_ORDINARY(NAME,ST,VERBOSE_FLAG) \ +do \ + { \ + while (stat (NAME, &ST) >= 0 && S_ISREG (ST.st_mode)) \ + if (unlink (NAME) < 0) \ + { \ + if (VERBOSE_FLAG) \ + perror_with_name (NAME); \ + break; \ + } \ + } while (0) + +#define STANDARD_EXEC_PREFIX "/gnu/libexec/gcc/" +#define STANDARD_STARTFILE_PREFIX "/gnu/lib/" +#define STANDARD_INCLUDE_DIR "/gnu/include" diff --git a/gcc/config/vms/xm-vms64.h b/gcc/config/vms/xm-vms64.h new file mode 100644 index 000000000..9e77f890a --- /dev/null +++ b/gcc/config/vms/xm-vms64.h @@ -0,0 +1,23 @@ +/* Configuration for GCC for hosting on 64bit VMS + using a Unix style C library. + 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/>. */ + +#define HOST_LONG_FORMAT "ll" +#define HOST_PTR_PRINTF "%llp" |