OSDN Git Service

Initial revision
authorcoxs <coxs@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 22 Dec 1995 20:10:44 +0000 (20:10 +0000)
committercoxs <coxs@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 22 Dec 1995 20:10:44 +0000 (20:10 +0000)
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@10828 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/config/i386/dgux.c [new file with mode: 0644]
gcc/config/i386/dgux.h [new file with mode: 0644]

diff --git a/gcc/config/i386/dgux.c b/gcc/config/i386/dgux.c
new file mode 100644 (file)
index 0000000..23e4cf1
--- /dev/null
@@ -0,0 +1,191 @@
+/* Subroutines for GNU compiler for Intel 80x86 running DG/ux
+   Copyright (C) 1993, 1995 Free Software Foundation, Inc.
+
+   Currently maintained by (gcc@dg-rtp.dg.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.
+
+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, 675 Mass Ave, Cambridge, MA 02139, USA.  */
+
+#include <time.h>
+#include "i386/i386.c"
+
+
+extern char *version_string;
+
+struct option
+{
+  char *string;
+  int *variable;
+  int on_value;
+};
+
+static int
+output_option (file, sep, type, name, indent, pos, max)
+     FILE *file;
+     char *sep;
+     char *type;
+     char *name;
+     char *indent;
+     int pos;
+     int max;
+{
+  if (strlen (sep) + strlen (type) + strlen (name) + pos > max)
+    {
+      fprintf (file, indent);
+      return fprintf (file, "%s%s", type, name);
+    }
+  return pos + fprintf (file, "%s%s%s", sep, type, name);
+}
+
+static struct { char *name; int value; } m_options[] = TARGET_SWITCHES;
+
+static void
+output_options (file, f_options, f_len, W_options, W_len,
+               pos, max, sep, indent, term)
+     FILE *file;
+     struct option *f_options;
+     struct option *W_options;
+     int f_len, W_len;
+     int pos;
+     int max;
+     char *indent;
+     char *term;
+{
+  register int j;
+
+  if (optimize)
+    pos = output_option (file, sep, "-O", "", indent, pos, max);
+  if (write_symbols != NO_DEBUG)
+    pos = output_option (file, sep, "-g", "", indent, pos, max);
+/*  if (flag_traditional)
+    pos = output_option (file, sep, "-traditional", "", indent, pos, max);*/
+  if (profile_flag)
+    pos = output_option (file, sep, "-p", "", indent, pos, max);
+  if (profile_block_flag)
+    pos = output_option (file, sep, "-a", "", indent, pos, max);
+
+  for (j = 0; j < f_len; j++)
+    if (*f_options[j].variable == f_options[j].on_value)
+      pos = output_option (file, sep, "-f", f_options[j].string,
+                          indent, pos, max);
+
+  for (j = 0; j < W_len; j++)
+    if (*W_options[j].variable == W_options[j].on_value)
+      pos = output_option (file, sep, "-W", W_options[j].string,
+                          indent, pos, max);
+
+  for (j = 0; j < sizeof m_options / sizeof m_options[0]; j++)
+    if (m_options[j].name[0] != '\0'
+       && m_options[j].value > 0
+       && ((m_options[j].value & target_flags)
+           == m_options[j].value))
+      pos = output_option (file, sep, "-m", m_options[j].name,
+                          indent, pos, max);
+
+  pos = output_option (file, sep, "-mcpu=", ix86_cpu_string, indent, pos, max);
+  pos = output_option (file, sep, "-march=", ix86_isa_string, indent, pos, max);
+  fprintf (file, term);
+}
+
+/* Output to FILE the start of the assembler file.  */
+
+void
+output_file_start (file, f_options, f_len, W_options, W_len)
+     FILE *file;
+     struct option *f_options;
+     struct option *W_options;
+     int f_len, W_len;
+{
+  register int pos;
+
+  output_file_directive (file, main_input_filename);
+  fprintf (file, "\t.version\t\"01.01\"\n");                   \
+  /* Switch to the data section so that the coffsem symbol and the
+     gcc2_compiled. symbol aren't in the text section.  */
+  data_section ();
+
+  pos = fprintf (file, "\n// cc1 (%s) arguments:", VERSION_STRING);
+  output_options (file, f_options, f_len, W_options, W_len,
+                 pos, 75, " ", "\n// ", "\n\n");
+
+#ifdef TARGET_IDENTIFY_REVISION
+  if (TARGET_IDENTIFY_REVISION)
+    {
+      char indent[256];
+
+      time_t now = time ((time_t *)0);
+      sprintf (indent, "]\"\n\t%s\t \"@(#)%s [", IDENT_ASM_OP, main_input_filename);
+      fprintf (file, indent+3);
+      pos = fprintf (file, "gcc %s, %.24s,", VERSION_STRING, ctime (&now));
+      output_options (file, f_options, f_len, W_options, W_len,
+                     pos, 150 - strlen (indent), " ", indent, "]\"\n\n");
+    }
+#endif /* TARGET_IDENTIFY_REVISION */
+}
+
+#ifndef CROSS_COMPILE
+#if defined (_abort_aux) 
+/* Debugging aid to be registered via `atexit'.  See the definition
+   of abort in dgux.h.  */
+void
+abort_aux ()
+{
+  extern int insn_;
+  extern char * file_;
+  extern int line_;
+  static int done;
+  rtx line_note;
+
+  if (done++)
+    return;
+  if (file_ || line_)
+    {
+      if (write_symbols != NO_DEBUG)
+       {
+         for (line_note = (rtx) insn_ ; line_note != 0 ; line_note = PREV_INSN (line_note))
+           if (GET_CODE (line_note) == NOTE && NOTE_LINE_NUMBER (line_note) > 0)
+             break;
+         if (line_note != 0)
+           {
+             error_with_file_and_line (NOTE_SOURCE_FILE (line_note),
+                                       NOTE_LINE_NUMBER (line_note),
+                                       "Internal gcc abort from %s:%d",
+                                       file_ ? file_ : "<nofile>", line_);
+             if (insn_ && file_ && strcmp (file_, "toplev.c"))
+               {
+                 error_with_file_and_line (NOTE_SOURCE_FILE (line_note),
+                                           NOTE_LINE_NUMBER (line_note),
+                                           "The local variable `insn' has the value:", 0);
+                 debug_rtx ((rtx) insn_);
+               }
+           }
+       }
+      if (write_symbols == NO_DEBUG || line_note == 0)
+       {
+         error ("Internal gcc abort from %s:%d",
+                file_ ? file_ : "<nofile>", line_);
+         if (insn_ && file_ && strcmp (file_, "toplev.c"))
+           {
+             error ("The local variable `insn' has the value:", 0);
+             debug_rtx ((rtx) insn_);
+           }
+       }
+    }
+}
+#endif
+#endif
+
+
diff --git a/gcc/config/i386/dgux.h b/gcc/config/i386/dgux.h
new file mode 100644 (file)
index 0000000..5b461c4
--- /dev/null
@@ -0,0 +1,269 @@
+/* Target definitions for GNU compiler for Intel 80x86 running DG/ux
+   Copyright (C) 1993, 1995 Free Software Foundation, Inc.
+
+   Currently maintained by (gcc@dg-rtp.dg.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.
+
+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, 675 Mass Ave, Cambridge, MA 02139, USA.  */
+
+/* for now, we are just like the sysv4 version with a
+   few hacks
+*/
+
+#include "i386/sysv4.h"
+
+#ifndef VERSION_INFO2
+#define VERSION_INFO2   "$Revision$"
+#endif
+
+#ifndef VERSION_STRING
+#define VERSION_STRING  version_string
+#endif
+
+/* Identify the compiler.  */
+/* TARGET_VERSION used by toplev.c VERSION_STRING used by -midentify-revision */
+
+#undef TARGET_VERSION
+#define TARGET_VERSION fprintf (stderr, " (%s%s, %s)", \
+                               VERSION_INFO1, VERSION_INFO2, __DATE__)
+#undef  VERSION_INFO1
+#define VERSION_INFO1 "ix86 DG/ux, "
+
+/* Augment TARGET_SWITCHES with the MXDB options.  */
+#define MASK_STANDARD          0x40000000 /* Retain standard information */
+#define MASK_NOLEGEND          0x20000000 /* Discard legend information */
+#define MASK_EXTERNAL_LEGEND   0x10000000 /* Make external legends */
+#define MASK_IDENTIFY_REVISION  0x08000000 /* Emit 'ident' to .s */
+#define MASK_WARN_PASS_STRUCT   0x04000000 /* Emit 'ident' to .s */
+
+#define TARGET_STANDARD                  (target_flags & MASK_STANDARD)
+#define TARGET_NOLEGEND                  (target_flags & MASK_NOLEGEND)
+#define TARGET_EXTERNAL_LEGEND   (target_flags & MASK_EXTERNAL_LEGEND)
+#define TARGET_IDENTIFY_REVISION  (target_flags & MASK_IDENTIFY_REVISION)
+#define TARGET_WARN_PASS_STRUCT   (target_flags & MASK_WARN_PASS_STRUCT)
+
+#undef  SUBTARGET_SWITCHES
+#define SUBTARGET_SWITCHES \
+    { "standard",                       MASK_STANDARD },          \
+    { "legend",                                -MASK_NOLEGEND },          \
+    { "no-legend",                      MASK_NOLEGEND },          \
+    { "external-legend",                MASK_EXTERNAL_LEGEND },   \
+    { "identify-revision",              MASK_IDENTIFY_REVISION }, \
+    { "warn-passed-structs",            MASK_WARN_PASS_STRUCT },
+
+#undef  DWARF_DEBUGGING_INFO
+#define DWARF_DEBUGGING_INFO
+
+/*
+  allow -gstabs so that those who have gnu-as installed
+  can debug c++ programs.
+*/
+#undef  DBX_DEBUGGING_INFO
+#define DBX_DEBUGGING_INFO
+
+#define PREFERRED_DEBUGGING_TYPE DWARF_DEBUG
+
+/* Override svr[34].h.  */
+#undef ASM_FILE_START
+#define ASM_FILE_START(FILE) \
+  output_file_start (FILE, f_options, sizeof f_options / sizeof f_options[0], \
+                    W_options, sizeof W_options / sizeof W_options[0])
+
+/* ix86 abi specified type for wchar_t */
+
+#undef WCHAR_TYPE
+#define WCHAR_TYPE "long int"
+
+#undef WCHAR_TYPE_SIZE
+#define WCHAR_TYPE_SIZE BITS_PER_WORD
+
+
+/* Define this to be nonzero if the character `$' should be allowed
+   by default in identifier names.  DG/ux does this differently than
+   standard i386 */
+
+#undef  DOLLARS_IN_IDENTIFIERS
+#define DOLLARS_IN_IDENTIFIERS  1
+
+/* Some machines may desire to change what optimizations are performed for
+   various optimization levels.   This macro, if defined, is executed once
+   just after the optimization level is determined and before the remainder
+   of the command options have been parsed.  Values set in this macro are
+   used as the default values for the other command line options.
+
+   LEVEL is the optimization level specified; 2 if -O2 is specified,
+   1 if -O is specified, and 0 if neither is specified.  */
+
+/* This macro used to store 0 in flag_signed_bitfields.
+   Not only is that misuse of this macro; the whole idea is wrong.
+
+   The GNU C dialect makes bitfields signed by default,
+   regardless of machine type.  Making any machine inconsistent in this
+   regard is bad for portability.
+
+   I chose to make bitfields signed by default because this is consistent
+   with the way ordinary variables are handled: `int' equals `signed int'.
+   If there is a good reason to prefer making bitfields unsigned by default,
+   it cannot have anything to do with the choice of machine.
+   If the reason is good enough, we should change the convention for all machines.
+
+   -- rms, 20 July 1991.  */
+
+/*
+  this really should go into dgux-local.h 
+*/
+
+#undef OPTIMIZATION_OPTIONS
+#define OPTIMIZATION_OPTIONS(LEVEL)                    \
+  do {                                                 \
+    extern int flag_signed_bitfields;                  \
+    flag_signed_bitfields = 0;                         \
+    abort_helper ();                                   \
+  } while (0)
+
+
+/* The normal location of the `ld' and `as' programs */
+
+#undef MD_EXEC_PREFIX
+#define MD_EXEC_PREFIX "/usr/bin/"
+
+/* The normal location of the various *crt*.o files is the */
+
+#undef MD_STARTFILE_PREFIX
+#define MD_STARTFILE_PREFIX "/usr/lib/"
+
+/* Macros to be automatically defined.  
+   __CLASSIFY_TYPE__ is used in the <varargs.h> and <stdarg.h> header
+   files with DG/UX revision 5.40 and later.  This allows GNU CC to
+   operate without installing the header files.  */
+
+#undef CPP_PREDEFINES
+#define CPP_PREDEFINES "-Di386 -D__ix86 -Dunix -DDGUX -D__CLASSIFY_TYPE__=2\
+   -Asystem(unix) -Asystem(svr4) -Acpu(i386) -Amachine(i386)"
+
+   /*
+     If not -ansi, -traditional, or restricting include files to one
+     specific source target, specify full DG/UX features.
+   */
+#undef CPP_SPEC
+#define        CPP_SPEC "%{!ansi:%{!traditional:-D__OPEN_NAMESPACE__}}"
+
+/* Assembler support (legends for mxdb).  */
+#undef ASM_SPEC
+#define ASM_SPEC "\
+%{mno-legend:%{mstandard:-Wc,off}}\
+%{g:%{!mno-legend:-Wc,-fix-bb,-s\"%i\"\
+%{traditional:,-lc}%{!traditional:,-lansi-c}\
+%{mstandard:,-keep-std}\
+%{mexternal-legend:,-external}}}"
+
+/* Override svr4.h.  */
+
+/* hassey 3/12/94 keep svr4 ASM_FINAL_SPEC allows -pipe to work */
+
+/* Linker and library spec's.
+   -static, -shared, -symbolic, -h* and -z* access AT&T V.4 link options.
+   -svr4 instructs gcc to place /usr/lib/values-X[cat].o on link the line.
+   The absense of -msvr4 indicates linking done in a COFF environment and
+   adds the link script to the link line.  In all environments, the first
+   and last objects are crtbegin.o and crtend.o.
+   When the -G link option is used (-shared and -symbolic) a final link is
+   not being done.  */
+
+#undef LIB_SPEC
+#define LIB_SPEC \
+"%{!shared:%{!symbolic:-lc}}"
+
+#undef LINK_SPEC
+#define LINK_SPEC "%{z*} %{h*} %{V} %{v:%{!V:-V}} \
+                  %{static:-dn -Bstatic} \
+                  %{shared:-G -dy} \
+                  %{symbolic:-Bsymbolic -G -dy} \
+                  %{pg:-L/usr/lib/libp}%{p:-L/usr/lib/libp}"
+
+#ifdef CROSS_COMPILE
+
+#undef STARTFILE_SPEC
+#define STARTFILE_SPEC "%{!shared:%{!symbolic:%{pg:gcrt1.o%s}          \
+                                             %{!pg:%{p:mcrt1.o%s}      \
+                                             %{!p:crt1.o%s}}}}         \
+                        %{pg:gcrti.o%s}%{!pg:crti.o%s}                 \
+                        crtbegin.o%s                                   \
+                        %{ansi:values-Xc.o%s}                          \
+                        %{!ansi:%{traditional:values-Xt.o%s}           \
+                                %{!traditional:values-Xa.o%s}}"
+
+#undef  ENDFILE_SPEC
+#define ENDFILE_SPEC "crtend.o%s %{pg:gcrtn.o}%{!pg:crtn.o%s}"
+
+#else
+
+#undef STARTFILE_SPEC
+#define STARTFILE_SPEC "%{!shared:%{!symbolic:%{pg:gcrt1.o%s}          \
+                                             %{!pg:%{p:/lib/mcrt1.o%s} \
+                                             %{!p:/lib/crt1.o%s}}}     \
+                       %{pg:gcrti.o%s}%{!pg:/lib/crti.o%s}}            \
+                       crtbegin.o%s                                    \
+                       %{ansi:/lib/values-Xc.o%s}                      \
+                       %{!ansi:%{traditional:/lib/values-Xt.o%s}       \
+                               %{!traditional:/lib/values-Xa.o%s}}"
+
+#undef  ENDFILE_SPEC
+#define ENDFILE_SPEC "crtend.o%s %{pg:gcrtn.o}%{!pg:/lib/crtn.o}"
+
+#endif /* CROSS_COMPILE */
+
+#if !defined (no_abort) || defined (CRT_BEGIN) || defined (CRT_END)
+#undef abort
+
+char insn; int insn_; char * file_; int line_;
+#define abort()                        \
+  (insn_ = (int) insn,         \
+   file_ = __FILE__,           \
+   line_ = __LINE__,           \
+   fancy_abort ())
+#define abort_helper()         \
+  do {                         \
+    extern void abort_aux ();  \
+    atexit (abort_aux);                \
+  } while (0)
+#define _abort_aux
+#endif /* no abort */
+
+/* The maximum alignment which the object file format can support.
+   page alignment would seem to be enough */
+#undef MAX_OFILE_ALIGNMENT
+#define MAX_OFILE_ALIGNMENT 0x1000
+
+/* Must use data section for relocatable constants when pic.  */
+#undef SELECT_RTX_SECTION
+#define SELECT_RTX_SECTION(MODE,RTX)            \
+{                                               \
+  if (flag_pic && symbolic_operand (RTX))       \
+    data_section ();                            \
+  else                                          \
+    const_section ();                           \
+}
+
+/* This supplements FUNCTION_ARG's definition in i386.h to check
+   TARGET_WARN_PASS_STRUCT */
+
+#undef  FUNCTION_ARG
+#define FUNCTION_ARG(CUM, MODE, TYPE, NAMED) \
+((((MODE) == BLKmode && TARGET_WARN_PASS_STRUCT) ? \
+    warning ("argument is a structure"),0 : 0), \
+    (function_arg (&CUM, MODE, TYPE, NAMED)))
+