aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorDouglas B Rupp <rupp@gnat.com>2009-08-10 04:50:23 +0000
committerDouglas Rupp <rupp@gcc.gnu.org>2009-08-10 04:50:23 +0000
commit5e3fef6ce6f71d750881dcaaacb4f7a6b1ab70d2 (patch)
treecbce37b6132c345852228bfcf5cb8ce1ed70ae2b /gcc
parent221cf9abf3a9f446a4ab9bcf7534f81ef0d1d4e6 (diff)
downloadgcc-5e3fef6ce6f71d750881dcaaacb4f7a6b1ab70d2.zip
gcc-5e3fef6ce6f71d750881dcaaacb4f7a6b1ab70d2.tar.gz
gcc-5e3fef6ce6f71d750881dcaaacb4f7a6b1ab70d2.tar.bz2
alpha.c: Include libfuncs.h
* config/alpha/alpha.c: Include libfuncs.h (avms_asm_output_extern): New function. (alpha_init_libfuncs): Init some decc libfuncs. * config/alpha/alpha-protos.h (avms_asm_output_external): Declare. * config/alpha/vms.h (ASM_OUTPUT_EXTERNAL): Define. (DO_CRTL_NAMES): Define. (LIB_SPEC): Remove. * config/alpha/vms64.h: (POINTERS_EXTEND_UNSIGNED): Remove undef. (LONG_TYPE_SIZE): Define. (TARGET_OS_CPP_BUILTINS): Define with __LONG_POINTERS=1 (SUBTARGET_SWITCHES): Define malloc64 switch. (TARGET_DEFAULT): Default MASK_MALLOC64 set. (MASK_RETURN_ADDR): Define. doc/invoke.texi (mmalloc64): Document switch. From-SVN: r150614
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog17
-rw-r--r--gcc/config/alpha/alpha-protos.h3
-rw-r--r--gcc/config/alpha/alpha.c15
-rw-r--r--gcc/config/alpha/vms.h56
-rw-r--r--gcc/config/alpha/vms64.h34
-rw-r--r--gcc/doc/invoke.texi6
6 files changed, 120 insertions, 11 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index f9f6ac7..c6c25de 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,20 @@
+2009-08-09 Douglas B Rupp <rupp@gnat.com>
+
+ * config/alpha/alpha.c: Include libfuncs.h
+ (avms_asm_output_extern): New function.
+ (alpha_init_libfuncs): Init some decc libfuncs.
+ * config/alpha/alpha-protos.h (avms_asm_output_external): Declare.
+ * config/alpha/vms.h (ASM_OUTPUT_EXTERNAL): Define.
+ (DO_CRTL_NAMES): Define.
+ (LIB_SPEC): Remove.
+ * config/alpha/vms64.h: (POINTERS_EXTEND_UNSIGNED): Remove undef.
+ (LONG_TYPE_SIZE): Define.
+ (TARGET_OS_CPP_BUILTINS): Define with __LONG_POINTERS=1
+ (SUBTARGET_SWITCHES): Define malloc64 switch.
+ (TARGET_DEFAULT): Default MASK_MALLOC64 set.
+ (MASK_RETURN_ADDR): Define.
+ doc/invoke.texi (mmalloc64): Document switch.
+
2009-08-09 Olivier Hainque <hainque@adacore.com>
Douglas B Rupp <rupp@gnat.com>
diff --git a/gcc/config/alpha/alpha-protos.h b/gcc/config/alpha/alpha-protos.h
index 244ff71..a4cbc09 100644
--- a/gcc/config/alpha/alpha-protos.h
+++ b/gcc/config/alpha/alpha-protos.h
@@ -1,5 +1,5 @@
/* Prototypes for alpha.c functions used in the md file & elsewhere.
- Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2007
+ Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2007, 2009
Free Software Foundation, Inc.
This file is part of GCC.
@@ -112,6 +112,7 @@ extern rtx alpha_use_linkage (rtx, tree, int, int);
#if TARGET_ABI_OPEN_VMS
extern enum avms_arg_type alpha_arg_type (enum machine_mode);
extern rtx alpha_arg_info_reg_val (CUMULATIVE_ARGS);
+extern void avms_asm_output_external (FILE *, tree, const char *);
#endif
extern rtx unicosmk_add_call_info_word (rtx);
diff --git a/gcc/config/alpha/alpha.c b/gcc/config/alpha/alpha.c
index 3857909..0bf5294 100644
--- a/gcc/config/alpha/alpha.c
+++ b/gcc/config/alpha/alpha.c
@@ -57,6 +57,7 @@ along with GCC; see the file COPYING3. If not see
#include "tree-stdarg.h"
#include "tm-constrs.h"
#include "df.h"
+#include "libfuncs.h"
/* Specify which cpu to schedule for. */
enum processor_type alpha_tune;
@@ -8494,6 +8495,15 @@ alpha_end_function (FILE *file, const char *fnname, tree decl ATTRIBUTE_UNUSED)
}
}
+#if TARGET_ABI_OPEN_VMS
+void avms_asm_output_external (FILE *file, tree decl ATTRIBUTE_UNUSED, const char *name)
+{
+#ifdef DO_CRTL_NAMES
+ DO_CRTL_NAMES;
+#endif
+}
+#endif
+
#if TARGET_ABI_OSF
/* Emit a tail call to FUNCTION after adjusting THIS by DELTA.
@@ -10853,6 +10863,11 @@ alpha_init_libfuncs (void)
set_optab_libfunc (smod_optab, DImode, "OTS$REM_L");
set_optab_libfunc (umod_optab, SImode, "OTS$REM_UI");
set_optab_libfunc (umod_optab, DImode, "OTS$REM_UL");
+ abort_libfunc = init_one_libfunc ("decc$abort");
+ memcmp_libfunc = init_one_libfunc ("decc$memcmp");
+#ifdef MEM_LIBFUNCS_INIT
+ MEM_LIBFUNCS_INIT;
+#endif
}
}
diff --git a/gcc/config/alpha/vms.h b/gcc/config/alpha/vms.h
index 7b149f1..fd7e03b 100644
--- a/gcc/config/alpha/vms.h
+++ b/gcc/config/alpha/vms.h
@@ -73,6 +73,10 @@ along with GCC; see the file COPYING3. If not see
#define MAX_OFILE_ALIGNMENT 524288 /* 8 x 2^16 by DEC Ada Test CD40VRA */
+/* The maximum alignment 'malloc' honors. */
+#undef MALLOC_ALIGNMENT
+#define MALLOC_ALIGNMENT ((TARGET_MALLOC64 ? 16 : 8) * BITS_PER_UNIT)
+
#undef FIXED_REGISTERS
#define FIXED_REGISTERS \
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
@@ -295,6 +299,55 @@ do { \
#define MD_UNWIND_SUPPORT "config/alpha/vms-unwind.h"
#endif
+#define ASM_OUTPUT_EXTERNAL(FILE, DECL, NAME) \
+ avms_asm_output_external (FILE, DECL, NAME)
+
+typedef struct crtl_name_spec
+{
+ const char *const name;
+ const char *deccname;
+ int referenced;
+} crtl_name_spec;
+
+#include "config/vms/vms-crtl.h"
+
+/* Alias CRTL names to 32/64bit DECCRTL functions.
+ Fixme: This should do a binary search. */
+#define DO_CRTL_NAMES \
+ do \
+ { \
+ int i; \
+ static crtl_name_spec vms_crtl_names[] = CRTL_NAMES; \
+ static int malloc64_init = 0; \
+ \
+ if ((malloc64_init == 0) && TARGET_MALLOC64) \
+ { \
+ for (i=0; vms_crtl_names [i].name; i++) \
+ { \
+ if (strcmp ("calloc", vms_crtl_names [i].name) == 0) \
+ vms_crtl_names [i].deccname = "decc$_calloc64"; \
+ else \
+ if (strcmp ("malloc", vms_crtl_names [i].name) == 0) \
+ vms_crtl_names [i].deccname = "decc$_malloc64"; \
+ else \
+ if (strcmp ("realloc", vms_crtl_names [i].name) == 0) \
+ vms_crtl_names [i].deccname = "decc$_realloc64"; \
+ else \
+ if (strcmp ("strdup", vms_crtl_names [i].name) == 0) \
+ vms_crtl_names [i].deccname = "decc$_strdup64"; \
+ } \
+ malloc64_init = 1; \
+ } \
+ for (i=0; vms_crtl_names [i].name; i++) \
+ if (!vms_crtl_names [i].referenced && \
+ (strcmp (name, vms_crtl_names [i].name) == 0)) \
+ { \
+ fprintf (file, "\t%s=%s\n", \
+ name, vms_crtl_names [i].deccname); \
+ vms_crtl_names [i].referenced = 1; \
+ } \
+ } while (0)
+
/* This is how to output an assembler line
that says to advance the location counter
to a multiple of 2**LOG bytes. */
@@ -361,9 +414,6 @@ do { \
#define ENDFILE_SPEC \
"%{!shared:crtend.o%s} %{!static:%{shared:crtendS.o%s}}"
-#undef LIB_SPEC
-#define LIB_SPEC "-lc"
-
#define NAME__MAIN "__gccmain"
#define SYMBOL__MAIN __gccmain
diff --git a/gcc/config/alpha/vms64.h b/gcc/config/alpha/vms64.h
index 99b338a..07424d0 100644
--- a/gcc/config/alpha/vms64.h
+++ b/gcc/config/alpha/vms64.h
@@ -1,5 +1,5 @@
/* Output variables, constants and external declarations, for GNU compiler.
- Copyright (C) 2001, 2007 Free Software Foundation, Inc.
+ Copyright (C) 2001, 2007, 2009 Free Software Foundation, Inc.
Contributed by Douglas Rupp (rupp@gnat.com).
This file is part of GCC.
@@ -18,14 +18,36 @@ 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/>. */
-/* Defaults to BITS_PER_WORD, e.g. 64 which is what is wanted.
- This is incompatible with DEC C, but matches DEC Ada */
+#undef TARGET_OS_CPP_BUILTINS
+#define TARGET_OS_CPP_BUILTINS() \
+ do { \
+ builtin_define_std ("vms"); \
+ builtin_define_std ("VMS"); \
+ builtin_define ("__ALPHA"); \
+ builtin_assert ("system=vms"); \
+ builtin_define ("__IEEE_FLOAT"); \
+ builtin_define ("__LONG_POINTERS=1"); \
+ } while (0)
+
+#undef SUBTARGET_SWITCHES
+#define SUBTARGET_SWITCHES \
+ { "malloc64", MASK_MALLOC64, "Malloc data into P2 space" },
+
+#undef TARGET_DEFAULT
+#define TARGET_DEFAULT (MASK_FPREGS | MASK_GAS | MASK_MALLOC64)
+
#undef LONG_TYPE_SIZE
+#define LONG_TYPE_SIZE 64
+
+#undef POINTER_SIZE
+#define POINTER_SIZE 64
+
+/* Eventhough pointers are 64bits, only 32bit ever remain significant in code
+ addresses. */
+#define MASK_RETURN_ADDR (GEN_INT (0xffffffff))
/* Defaults to "long int" */
#undef SIZE_TYPE
#undef PTRDIFF_TYPE
-#undef POINTERS_EXTEND_UNSIGNED
-#undef POINTER_SIZE
-#define POINTER_SIZE 64
+# include "config/vms/vms-crtl-64.h"
diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi
index 774e602..42601cd 100644
--- a/gcc/doc/invoke.texi
+++ b/gcc/doc/invoke.texi
@@ -535,7 +535,7 @@ Objective-C and Objective-C++ Dialects}.
-mmemory-latency=@var{time}}
@emph{DEC Alpha/VMS Options}
-@gccoptlist{-mvms-return-codes -mdebug-main=@var{prefix}}
+@gccoptlist{-mvms-return-codes -mdebug-main=@var{prefix} -mmalloc64}
@emph{FR30 Options}
@gccoptlist{-msmall-model -mno-lsim}
@@ -10601,6 +10601,10 @@ style condition (e.g.@: error) codes.
@opindex mdebug-main=@var{prefix}
Flag the first routine whose name starts with @var{prefix} as the main
routine for the debugger.
+
+@item -mmalloc64
+@opindex mmalloc64
+Default to 64bit memory allocation routines.
@end table
@node FR30 Options