/* Definitions of target machine GNU compiler. VMS common version. Copyright (C) 2003-2022 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 . */ #define TARGET_OBJECT_SUFFIX ".obj" #define TARGET_EXECUTABLE_SUFFIX ".exe" #define TARGET_OS_CPP_BUILTINS() \ do { \ builtin_define_std ("vms"); \ builtin_define_std ("VMS"); \ builtin_assert ("system=vms"); \ SUBTARGET_OS_CPP_BUILTINS(); \ builtin_define ("__int64=long long"); \ if (flag_vms_pointer_size == VMS_POINTER_SIZE_32) \ builtin_define ("__INITIAL_POINTER_SIZE=32"); \ else if (flag_vms_pointer_size == VMS_POINTER_SIZE_64) \ builtin_define ("__INITIAL_POINTER_SIZE=64"); \ if (POINTER_SIZE == 64) \ builtin_define ("__LONG_POINTERS=1"); \ builtin_define_with_int_value ("__CRTL_VER", vms_c_get_crtl_ver ()); \ builtin_define_with_int_value ("__VMS_VER", vms_c_get_vms_ver ()); \ } while (0) extern void vms_c_register_includes (const char *, const char *, int); #define TARGET_EXTRA_INCLUDES vms_c_register_includes /* Tell compiler we want to support VMS pragmas */ #define REGISTER_TARGET_PRAGMAS() vms_c_register_pragma () /* By default, allow $ to be part of an identifier. */ #define DOLLARS_IN_IDENTIFIERS 2 #undef TARGET_ABI_OPEN_VMS #define TARGET_ABI_OPEN_VMS 1 /* "long" is 32 bits, but 64 bits for Ada. */ #undef LONG_TYPE_SIZE #define LONG_TYPE_SIZE 32 #define ADA_LONG_TYPE_SIZE 64 /* Pointer is 32 bits but the hardware has 64-bit addresses, sign extended. */ #undef POINTER_SIZE #define POINTER_SIZE (flag_vms_pointer_size == VMS_POINTER_SIZE_NONE ? 32 : 64) #define POINTERS_EXTEND_UNSIGNED 0 /* Always a 32 bit type. */ #undef SIZE_TYPE #define SIZE_TYPE "unsigned int" /* ???: Defined as a 'int' by dec-c, but obstack.h doesn't like it. */ #undef PTRDIFF_TYPE #define PTRDIFF_TYPE (flag_vms_pointer_size == VMS_POINTER_SIZE_NONE ? \ "int" : "long long int") #define SIZETYPE (flag_vms_pointer_size == VMS_POINTER_SIZE_NONE ? \ "unsigned int" : "long long unsigned int") #define C_COMMON_OVERRIDE_OPTIONS vms_c_common_override_options () /* VMS doesn't support other sections than .text for code. */ #define TARGET_ASM_FUNCTION_SECTION vms_function_section /* Always use 8 bytes addresses in dwarf2 debug info. The default value doesn't work as it may be 4 bytes, which won't match gas default (8 bytes for ia64), and will thus produce incorrect values. */ #define DWARF2_ADDR_SIZE 8 /* No libm on VMS. */ #define MATH_LIBRARY "" /* Special VMS debugger symbol to record the entry point. */ #define VMS_DEBUG_MAIN_POINTER "TRANSFER$BREAK$GO" #undef TARGET_LIBC_HAS_FUNCTION #define TARGET_LIBC_HAS_FUNCTION no_c99_libc_has_function