* config-gas.com: Mark vax-vms as obsolete.
authorDaniel Jacobowitz <drow@false.org>
Fri, 11 Mar 2005 19:52:51 +0000 (19:52 +0000)
committerDaniel Jacobowitz <drow@false.org>
Fri, 11 Mar 2005 19:52:51 +0000 (19:52 +0000)
* configure.in: Remove fmt=vms support.
* config.in: Regenerate.
* configure: Regenerate.
* config/obj-vms.h, config/obj-vms.c, config/vms-conf.h: Remove.

gas/ChangeLog
gas/config-gas.com
gas/config.in
gas/config/obj-vms.c [deleted file]
gas/config/obj-vms.h [deleted file]
gas/config/vms-conf.h [deleted file]
gas/configure
gas/configure.in

index 5849d33..57fd961 100644 (file)
@@ -1,3 +1,11 @@
+2005-03-11  Daniel Jacobowitz  <dan@codesourcery.com>
+
+       * config-gas.com: Mark vax-vms as obsolete.
+       * configure.in: Remove fmt=vms support.
+       * config.in: Regenerate.
+       * configure: Regenerate.
+       * config/obj-vms.h, config/obj-vms.c, config/vms-conf.h: Remove.
+
 2005-03-10  Bob Wilson  <bob.wilson@acm.org>
 
        * config/tc-xtensa.c (finish_vinsn): Include the last instruction slot
index cf5248a..110fa3f 100644 (file)
@@ -3,6 +3,9 @@ $! This file sets things up to build gas on a VMS system to generate object
 $! files for a VMS system.  We do not use the configure script, since we
 $! do not have /bin/sh to execute it.
 $!
+$! Note: Only this script contains vax-vms and alpha-vms support, but vax-vms
+$! is no longer supported.
+$!
 $!
 $ gas_host="vms"
 $ arch_indx = 1 + ((f$getsyi("CPU").ge.128).and.1)     ! vax==1, alpha==2
index d124077..94b7215 100644 (file)
@@ -23,6 +23,9 @@
 /* Default architecture. */
 #undef DEFAULT_ARCH
 
+/* Default CRIS architecture. */
+#undef DEFAULT_CRIS_ARCH
+
 /* Default emulation. */
 #undef DEFAULT_EMULATION
 
 /* SOM support? */
 #undef OBJ_MAYBE_SOM
 
-/* VMS support? */
-#undef OBJ_MAYBE_VMS
-
 /* Name of package */
 #undef PACKAGE
 
 /* Version number of package */
 #undef VERSION
 
+/* Define to 1 if your processor stores words with the most significant byte
+   first (like Motorola and SPARC, unlike Intel and VAX). */
+#undef WORDS_BIGENDIAN
+
 /* Define to 1 if `lex' declares `yytext' as a `char *' by default, not a
    `char[]'. */
 #undef YYTEXT_POINTER
diff --git a/gas/config/obj-vms.c b/gas/config/obj-vms.c
deleted file mode 100644 (file)
index 81ac445..0000000
+++ /dev/null
@@ -1,4846 +0,0 @@
-/* vms.c -- Write out a VAX/VMS object file
-   Copyright 1987, 1988, 1992, 1993, 1994, 1995, 1997, 1998, 2000, 2001,
-   2002, 2003, 2005
-   Free Software Foundation, Inc.
-
-   This file is part of GAS, the GNU Assembler.
-
-   GAS 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.
-
-   GAS 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 GAS; see the file COPYING.  If not, write to the Free
-   Software Foundation, 59 Temple Place - Suite 330, Boston, MA
-   02111-1307, USA.  */
-
-/* Written by David L. Kashtan */
-/* Modified by Eric Youngdale to write VMS debug records for program
-   variables */
-
-/* Want all of obj-vms.h (as obj-format.h, via targ-env.h, via as.h).  */
-#define WANT_VMS_OBJ_DEFS
-
-#include "as.h"
-#include "config.h"
-#include "safe-ctype.h"
-#include "subsegs.h"
-#include "obstack.h"
-#include <fcntl.h>
-
-/* What we do if there is a goof.  */
-#define error as_fatal
-
-#ifdef VMS                     /* These are of no use if we are cross assembling.  */
-#include <fab.h>               /* Define File Access Block.  */
-#include <nam.h>               /* Define NAM Block.  */
-#include <xab.h>               /* Define XAB - all different types.  */
-extern int sys$open(), sys$close(), sys$asctim();
-#endif
-
-/* Version string of the compiler that produced the code we are
-   assembling.  (And this assembler, if we do not have compiler info).  */
-char *compiler_version_string;
-
-extern int flag_hash_long_names;       /* -+ */
-extern int flag_one;                   /* -1; compatibility with gcc 1.x */
-extern int flag_show_after_trunc;      /* -H */
-extern int flag_no_hash_mixed_case;    /* -h NUM */
-
-/* Flag that determines how we map names.  This takes several values, and
-   is set with the -h switch.  A value of zero implies names should be
-   upper case, and the presence of the -h switch inhibits the case hack.
-   No -h switch at all sets vms_name_mapping to 0, and allows case hacking.
-   A value of 2 (set with -h2) implies names should be
-   all lower case, with no case hack.  A value of 3 (set with -h3) implies
-   that case should be preserved.  */
-
-/* If the -+ switch is given, then the hash is appended to any name that is
-   longer than 31 characters, regardless of the setting of the -h switch.  */
-
-char vms_name_mapping = 0;
-
-static symbolS *Entry_Point_Symbol = 0;        /* Pointer to "_main" */
-
-/* We augment the "gas" symbol structure with this.  */
-
-struct VMS_Symbol
-{
-  struct VMS_Symbol *Next;
-  symbolS *Symbol;
-  int Size;
-  int Psect_Index;
-  int Psect_Offset;
-};
-
-struct VMS_Symbol *VMS_Symbols = 0;
-struct VMS_Symbol *Ctors_Symbols = 0;
-struct VMS_Symbol *Dtors_Symbols = 0;
-
-/* We need this to keep track of the various input files, so that we can
-   give the debugger the correct source line.  */
-
-struct input_file
-{
-  struct input_file *next;
-  struct input_file *same_file_fpnt;
-  int file_number;
-  int max_line;
-  int min_line;
-  int offset;
-  char flag;
-  char *name;
-  symbolS *spnt;
-};
-
-static struct input_file *file_root = (struct input_file *) NULL;
-
-/* Styles of PSECTS (program sections) that we generate; just shorthand
-   to avoid lists of section attributes.  Used by VMS_Psect_Spec().  */
-enum ps_type
-{
-  ps_TEXT, ps_DATA, ps_COMMON, ps_CONST, ps_CTORS, ps_DTORS
-};
-
-/* This enum is used to keep track of the various types of variables that
-   may be present.  */
-
-enum advanced_type
-{
-  BASIC, POINTER, ARRAY, ENUM, STRUCT, UNION, FUNCTION, VOID, ALIAS, UNKNOWN
-};
-
-/* This structure contains the information from the stabs directives, and the
-   information is filled in by VMS_typedef_parse.  Everything that is needed
-   to generate the debugging record for a given symbol is present here.
-   This could be done more efficiently, using nested struct/unions, but for
-   now I am happy that it works.  */
-
-struct VMS_DBG_Symbol
-{
-  struct VMS_DBG_Symbol *next;
-  /* Description of what this is.  */
-  enum advanced_type advanced;
-  /* This record is for this type.  */
-  int dbx_type;
-  /* For advanced types this is the type referred to.  I.e., the type
-     a pointer points to, or the type of object that makes up an
-     array.  */
-  int type2;
-  /* Use this type when generating a variable def.  */
-  int VMS_type;
-  /* Used for arrays - this will be present for all.  */
-  int index_min;
-  /* Entries, but will be meaningless for non-arrays.  */
-  int index_max;
-  /* Size in bytes of the data type.  For an array, this is the size
-     of one element in the array.  */
-  int data_size;
-  /* Number of the structure/union/enum - used for ref.  */
-  int struc_numb;
-};
-
-#define SYMTYPLST_SIZE (1<<4)  /* 16; Must be power of two.  */
-#define SYMTYP_HASH(x) ((unsigned) (x) & (SYMTYPLST_SIZE - 1))
-
-struct VMS_DBG_Symbol *VMS_Symbol_type_list[SYMTYPLST_SIZE];
-
-/* We need this structure to keep track of forward references to
-   struct/union/enum that have not been defined yet.  When they are
-   ultimately defined, then we can go back and generate the TIR
-   commands to make a back reference.  */
-
-struct forward_ref
-{
-  struct forward_ref *next;
-  int dbx_type;
-  int struc_numb;
-  char resolved;
-};
-
-struct forward_ref *f_ref_root = (struct forward_ref *) NULL;
-
-/* This routine is used to compare the names of certain types to various
-   fixed types that are known by the debugger.  */
-
-#define type_check(X)  !strcmp (symbol_name, X)
-
-/* This variable is used to keep track of the name of the symbol we are
-   working on while we are parsing the stabs directives.  */
-
-static const char *symbol_name;
-
-/* We use this counter to assign numbers to all of the structures, unions
-   and enums that we define.  When we actually declare a variable to the
-   debugger, we can simply do it by number, rather than describing the
-   whole thing each time.  */
-
-static int structure_count = 0;
-
-/* This variable is used to indicate that we are making the last attempt to
-   parse the stabs, and that we should define as much as we can, and ignore
-   the rest.  */
-
-static int final_pass;
-
-/* This variable is used to keep track of the current structure number
-   for a given variable.  If this is < 0, that means that the structure
-   has not yet been defined to the debugger.  This is still cool, since
-   the VMS object language has ways of fixing things up after the fact,
-   so we just make a note of this, and generate fixups at the end.  */
-
-static int struct_number;
-
-/* This is used to distinguish between D_float and G_float for telling
-   the debugger about doubles.  gcc outputs the same .stabs regardless
-   of whether -mg is used to select alternate doubles.  */
-
-static int vax_g_doubles = 0;
-
-/* Local symbol references (used to handle N_ABS symbols; gcc does not
-   generate those, but they're possible with hand-coded assembler input)
-   are always made relative to some particular environment.  If the current
-   input has any such symbols, then we expect this to get incremented
-   exactly once and end up having all of them be in environment #0.  */
-
-static int Current_Environment = -1;
-
-/* Every object file must specify an module name, which is also used by
-   traceback records.  Set in Write_VMS_MHD_Records().  */
-
-static char Module_Name[255+1];
-
-/* Variable descriptors are used tell the debugger the data types of certain
-   more complicated variables (basically anything involving a structure,
-   union, enum, array or pointer).  Some non-pointer variables of the
-   basic types that the debugger knows about do not require a variable
-   descriptor.
-
-   Since it is impossible to have a variable descriptor longer than 128
-   bytes by virtue of the way that the VMS object language is set up,
-   it makes not sense to make the arrays any longer than this, or worrying
-   about dynamic sizing of the array.
-
-   These are the arrays and counters that we use to build a variable
-   descriptor.  */
-
-#define MAX_DEBUG_RECORD 128
-static char Local[MAX_DEBUG_RECORD];   /* Buffer for variable descriptor.  */
-static char Asuffix[MAX_DEBUG_RECORD]; /* Buffer for array descriptor.  */
-static int Lpnt;               /* Index into Local.  */
-static int Apoint;             /* Index into Asuffix.  */
-static char overflow;          /* Flag to indicate we have written too much.  */
-static int total_len;          /* Used to calculate the total length of
-                                  variable descriptor plus array descriptor
-                                  - used for len byte.  */
-
-/* Flag if we have told user about finding global constants in the text
-   section.  */
-static int gave_compiler_message = 0;
-
-/* Global data (Object records limited to 512 bytes by VAX-11 "C" runtime).  */
-
-static int VMS_Object_File_FD;         /* File Descriptor for object file.  */
-static char Object_Record_Buffer[512]; /* Buffer for object file records.  */
-static size_t Object_Record_Offset;    /* Offset to end of data.  */
-static int Current_Object_Record_Type; /* Type of record in above.  */
-
-/* Macros for moving data around.  Must work on big-endian systems.  */
-
-#ifdef VMS  /* These are more efficient for VMS->VMS systems.  */
-#define COPY_LONG(dest,val)    ( *(long *) (dest) = (val) )
-#define COPY_SHORT(dest,val)   ( *(short *) (dest) = (val) )
-#else
-#define COPY_LONG(dest,val)    md_number_to_chars ((dest), (val), 4)
-#define COPY_SHORT(dest,val)   md_number_to_chars ((dest), (val), 2)
-#endif
-
-/* Macros for placing data into the object record buffer.  */
-
-#define PUT_LONG(val) \
-       ( COPY_LONG (&Object_Record_Buffer[Object_Record_Offset], (val)), \
-         Object_Record_Offset += 4 )
-
-#define PUT_SHORT(val) \
-       ( COPY_SHORT (&Object_Record_Buffer[Object_Record_Offset], (val)), \
-         Object_Record_Offset += 2 )
-
-#define PUT_CHAR(val) (Object_Record_Buffer[Object_Record_Offset++] = (val))
-
-#define PUT_COUNTED_STRING(cp)                 \
-  do                                           \
-    {                                          \
-      const char *p = (cp);                    \
-                                               \
-      PUT_CHAR ((char) strlen (p));            \
-      while (*p)                               \
-       PUT_CHAR (*p++);                        \
-    }                                          \
-  while (0)
-
-/* Macro for determining if a Name has psect attributes attached
-   to it.   */
-
-#define PSECT_ATTRIBUTES_STRING                "$$PsectAttributes_"
-#define PSECT_ATTRIBUTES_STRING_LENGTH 18
-
-#define HAS_PSECT_ATTRIBUTES(Name) \
-               (strncmp ((*Name == '_' ? Name + 1 : Name), \
-                         PSECT_ATTRIBUTES_STRING, \
-                         PSECT_ATTRIBUTES_STRING_LENGTH) == 0)
-\f
-
- /* in: segT   out: N_TYPE bits */
-const short seg_N_TYPE[] =
-{
-  N_ABS,
-  N_TEXT,
-  N_DATA,
-  N_BSS,
-  N_UNDF,                      /* unknown */
-  N_UNDF,                      /* error */
-  N_UNDF,                      /* expression */
-  N_UNDF,                      /* debug */
-  N_UNDF,                      /* ntv */
-  N_UNDF,                      /* ptv */
-  N_REGISTER,                  /* register */
-};
-
-const segT N_TYPE_seg[N_TYPE + 2] =
-{                              /* N_TYPE == 0x1E = 32-2 */
-  SEG_UNKNOWN,                 /* N_UNDF == 0 */
-  SEG_GOOF,
-  SEG_ABSOLUTE,                        /* N_ABS == 2 */
-  SEG_GOOF,
-  SEG_TEXT,                    /* N_TEXT == 4 */
-  SEG_GOOF,
-  SEG_DATA,                    /* N_DATA == 6 */
-  SEG_GOOF,
-  SEG_BSS,                     /* N_BSS == 8 */
-  SEG_GOOF,
-  SEG_GOOF, SEG_GOOF, SEG_GOOF, SEG_GOOF, SEG_GOOF, SEG_GOOF, SEG_GOOF, SEG_GOOF,
-  SEG_GOOF, SEG_GOOF, SEG_GOOF, SEG_GOOF, SEG_GOOF, SEG_GOOF, SEG_GOOF, SEG_GOOF,
-  SEG_GOOF, SEG_GOOF, SEG_GOOF, SEG_GOOF,
-  SEG_REGISTER,                        /* dummy N_REGISTER for regs = 30 */
-  SEG_GOOF,
-};
-\f
-
-/* The following code defines the special types of pseudo-ops that we
-   use with VMS.  */
-
-unsigned char const_flag = IN_DEFAULT_SECTION;
-
-static void
-s_const (int arg)
-{
-  /* Since we don't need `arg', use it as our scratch variable so that
-     we won't get any "not used" warnings about it.  */
-  arg = get_absolute_expression ();
-  subseg_set (SEG_DATA, (subsegT) arg);
-  const_flag = 1;
-  demand_empty_rest_of_line ();
-}
-
-const pseudo_typeS obj_pseudo_table[] =
-{
-  {"const", s_const, 0},
-  {0, 0, 0},
-};                             /* obj_pseudo_table */
-
-/* Routine to perform RESOLVE_SYMBOL_REDEFINITION().  */
-
-int
-vms_resolve_symbol_redef (symbolS *sym)
-{
-  /* If the new symbol is .comm AND it has a size of zero,
-     we ignore it (i.e. the old symbol overrides it).  */
-  if (SEGMENT_TO_SYMBOL_TYPE ((int) now_seg) == (N_UNDF | N_EXT)
-      && frag_now_fix () == 0)
-    {
-      as_warn (_("compiler emitted zero-size common symbol `%s' already defined"),
-              S_GET_NAME (sym));
-      return 1;
-    }
-  /* If the old symbol is .comm and it has a size of zero,
-     we override it with the new symbol value.  */
-  if (S_IS_EXTERNAL (sym) && S_IS_DEFINED (sym) && S_GET_VALUE (sym) == 0)
-    {
-      as_warn (_("compiler redefined zero-size common symbol `%s'"),
-              S_GET_NAME (sym));
-      sym->sy_frag  = frag_now;
-      S_SET_OTHER (sym, const_flag);
-      S_SET_VALUE (sym, frag_now_fix ());
-      /* Keep N_EXT bit.  */
-      sym->sy_symbol.n_type |= SEGMENT_TO_SYMBOL_TYPE ((int) now_seg);
-      return 1;
-    }
-
-  return 0;
-}
-
-/* `tc_frob_label' handler for colon(symbols.c), used to examine the
-   dummy label(s) gcc inserts at the beginning of each file it generates.
-   gcc 1.x put "gcc_compiled."; gcc 2.x (as of 2.7) puts "gcc2_compiled."
-   and "__gnu_language_<name>" and possibly "__vax_<type>_doubles".  */
-
-void
-vms_check_for_special_label (symbolS *symbolP)
-{
-  /* Special labels only occur prior to explicit section directives.  */
-  if ((const_flag & IN_DEFAULT_SECTION) != 0)
-    {
-      char *sym_name = S_GET_NAME (symbolP);
-
-      if (*sym_name == '_')
-       ++sym_name;
-
-      if (!strcmp (sym_name, "__vax_g_doubles"))
-       vax_g_doubles = 1;
-    }
-}
-
-void
-obj_read_begin_hook (void)
-{
-}
-
-void
-obj_crawl_symbol_chain (object_headers *headers)
-{
-  symbolS *symbolP;
-  symbolS **symbolPP;
-  int symbol_number = 0;
-
-  symbolPP = &symbol_rootP;    /* -> last symbol chain link.  */
-  while ((symbolP = *symbolPP) != NULL)
-    {
-      resolve_symbol_value (symbolP);
-
-     /* OK, here is how we decide which symbols go out into the
-       brave new symtab.  Symbols that do are:
-
-       * symbols with no name (stabd's?)
-       * symbols with debug info in their N_TYPE
-       * symbols with \1 as their 3rd character (numeric labels)
-       * "local labels" needed for PIC fixups
-
-       Symbols that don't are:
-       * symbols that are registers
-
-       All other symbols are output.  We complain if a deleted
-       symbol was marked external.  */
-
-      if (!S_IS_REGISTER (symbolP))
-       {
-         symbolP->sy_number = symbol_number++;
-         symbolP->sy_name_offset = 0;
-         symbolPP = &symbolP->sy_next;
-       }
-      else
-       {
-         if (S_IS_EXTERNAL (symbolP) || !S_IS_DEFINED (symbolP))
-           as_bad (_("Local symbol %s never defined"),
-                   S_GET_NAME (symbolP));
-
-         /* Unhook it from the chain.  */
-         *symbolPP = symbol_next (symbolP);
-       }
-    }
-
-  H_SET_STRING_SIZE (headers, string_byte_count);
-  H_SET_SYMBOL_TABLE_SIZE (headers, symbol_number);
-}
-\f
-
-/* VMS OBJECT FILE HACKING ROUTINES.  */
-
-/* Create the VMS object file.  */
-
-static void
-Create_VMS_Object_File (void)
-{
-#ifdef eunice
-  VMS_Object_File_FD = creat (out_file_name, 0777, "var");
-#else
-#ifndef VMS
-  VMS_Object_File_FD = creat (out_file_name, 0777);
-#else  /* VMS */
-  VMS_Object_File_FD = creat (out_file_name, 0, "rfm=var",
-                             "ctx=bin", "mbc=16", "deq=64", "fop=tef",
-                             "shr=nil");
-#endif /* !VMS */
-#endif /* !eunice */
-  /* Deal with errors.  */
-  if (VMS_Object_File_FD < 0)
-    as_fatal (_("Couldn't create VMS object file \"%s\""), out_file_name);
-  /* Initialize object file hacking variables.  */
-  Object_Record_Offset = 0;
-  Current_Object_Record_Type = -1;
-}
-
-/* Flush the object record buffer to the object file.  */
-
-static void
-Flush_VMS_Object_Record_Buffer (void)
-{
-  /* If the buffer is empty, there's nothing to do.  */
-  if (Object_Record_Offset == 0)
-    return;
-
-#ifndef VMS                    /* For cross-assembly purposes.  */
-  {
-    char RecLen[2];
-
-    /* "Variable-length record" files have a two byte length field
-       prepended to each record.  It's normally out-of-band, and native
-       VMS output will insert it automatically for this type of file.
-       When cross-assembling, we must write it explicitly.  */
-    md_number_to_chars (RecLen, Object_Record_Offset, 2);
-    if (write (VMS_Object_File_FD, RecLen, 2) != 2)
-      error (_("I/O error writing VMS object file (length prefix)"));
-    /* We also need to force the actual record to be an even number of
-       bytes.  For native output, that's automatic; when cross-assembling,
-       pad with a NUL byte if length is odd.  Do so _after_ writing the
-       pre-padded length.  Since our buffer is defined with even size,
-       an odd offset implies that it has some room left.  */
-    if ((Object_Record_Offset & 1) != 0)
-      Object_Record_Buffer[Object_Record_Offset++] = '\0';
-  }
-#endif /* not VMS */
-
-  /* Write the data to the file.  */
-  if ((size_t) write (VMS_Object_File_FD, Object_Record_Buffer,
-                     Object_Record_Offset) != Object_Record_Offset)
-    error (_("I/O error writing VMS object file"));
-
-  /* The buffer is now empty.  */
-  Object_Record_Offset = 0;
-}
-
-/* Declare a particular type of object file record.  */
-
-static void
-Set_VMS_Object_File_Record (int Type)
-{
-  /* If the type matches, we are done.  */
-  if (Type == Current_Object_Record_Type)
-    return;
-  /* Otherwise: flush the buffer.  */
-  Flush_VMS_Object_Record_Buffer ();
-  /* Remember the new type.  */
-  Current_Object_Record_Type = Type;
-}
-
-/* Close the VMS Object file.  */
-
-static void
-Close_VMS_Object_File (void)
-{
-  /* Flush (should never be necessary) and reset saved record-type context.  */
-  Set_VMS_Object_File_Record (-1);
-
-#ifndef VMS                    /* For cross-assembly purposes.  */
-  {
-    char RecLen[2];
-    int minus_one = -1;
-
-    /* Write a 2 byte record-length field of -1 into the file, which
-       means end-of-block when read, hence end-of-file when occurring
-       in the file's last block.  It is only needed for variable-length
-       record files transferred to VMS as fixed-length record files
-       (typical for binary FTP; NFS shouldn't need it, but it won't hurt).  */
-    md_number_to_chars (RecLen, minus_one, 2);
-    write (VMS_Object_File_FD, RecLen, 2);
-  }
-#else
-    /* When written on a VMS system, the file header (cf inode) will record
-       the actual end-of-file position and no inline marker is needed.  */
-#endif
-
-  close (VMS_Object_File_FD);
-}
-\f
-/* Text Information and Relocation routines. */
-
-/* Stack Psect base followed by signed, varying-sized offset.
-   Common to several object records.  */
-
-static void
-vms_tir_stack_psect (int Psect_Index, int Offset, int Force)
-{
-  int psect_width, offset_width;
-
-  psect_width = ((unsigned) Psect_Index > 255) ? 2 : 1;
-  offset_width = (Force || Offset > 32767 || Offset < -32768) ? 4
-                : (Offset > 127 || Offset < -128) ? 2 : 1;
-#define Sta_P(p,o) (((o)<<1) | ((p)-1))
-  /* Byte or word psect; byte, word, or longword offset.  */
-  switch (Sta_P(psect_width,offset_width))
-    {
-      case Sta_P(1,1): PUT_CHAR (TIR_S_C_STA_PB);
-                       PUT_CHAR ((char) (unsigned char) Psect_Index);
-                       PUT_CHAR ((char) Offset);
-                       break;
-      case Sta_P(1,2): PUT_CHAR (TIR_S_C_STA_PW);
-                       PUT_CHAR ((char) (unsigned char) Psect_Index);
-                       PUT_SHORT (Offset);
-                       break;
-      case Sta_P(1,4): PUT_CHAR (TIR_S_C_STA_PL);
-                       PUT_CHAR ((char) (unsigned char) Psect_Index);
-                       PUT_LONG (Offset);
-                       break;
-      case Sta_P(2,1): PUT_CHAR (TIR_S_C_STA_WPB);
-                       PUT_SHORT (Psect_Index);
-                       PUT_CHAR ((char) Offset);
-                       break;
-      case Sta_P(2,2): PUT_CHAR (TIR_S_C_STA_WPW);
-                       PUT_SHORT (Psect_Index);
-                       PUT_SHORT (Offset);
-                       break;
-      case Sta_P(2,4): PUT_CHAR (TIR_S_C_STA_WPL);
-                       PUT_SHORT (Psect_Index);
-                       PUT_LONG (Offset);
-                       break;
-    }
-#undef Sta_P
-}
-
-/* Store immediate data in current Psect.  */
-
-static void
-VMS_Store_Immediate_Data (const char *Pointer, int Size, int Record_Type)
-{
-  int i;
-
-  Set_VMS_Object_File_Record (Record_Type);
-  /* We can only store as most 128 bytes at a time due to the way that
-     TIR commands are encoded.  */
-  while (Size > 0)
-    {
-      i = (Size > 128) ? 128 : Size;
-      Size -= i;
-      /* If we cannot accommodate this record, flush the buffer.  */
-      if ((Object_Record_Offset + i + 1) >= sizeof Object_Record_Buffer)
-       Flush_VMS_Object_Record_Buffer ();
-      /* If the buffer is empty we must insert record type.  */
-      if (Object_Record_Offset == 0)
-       PUT_CHAR (Record_Type);
-      /* Store the count.  The Store Immediate TIR command is implied by
-         a negative command byte, and the length of the immediate data
-         is abs(command_byte).  So, we write the negated length value.  */
-      PUT_CHAR ((char) (-i & 0xff));
-      /* Now store the data.  */
-      while (--i >= 0)
-       PUT_CHAR (*Pointer++);
-    }
-  /* Flush the buffer if it is more than 75% full.  */
-  if (Object_Record_Offset > (sizeof (Object_Record_Buffer) * 3 / 4))
-    Flush_VMS_Object_Record_Buffer ();
-}
-
-/* Make a data reference.  */
-
-static void
-VMS_Set_Data (int Psect_Index, int Offset, int Record_Type, int Force)
-{
-  Set_VMS_Object_File_Record (Record_Type);
-  /* If the buffer is empty we must insert the record type.  */
-  if (Object_Record_Offset == 0)
-    PUT_CHAR (Record_Type);
-  /* Stack the Psect base with its offset.  */
-  vms_tir_stack_psect (Psect_Index, Offset, Force);
-  /* Set relocation base.  */
-  PUT_CHAR (TIR_S_C_STO_PIDR);
-  /* Flush the buffer if it is more than 75% full.  */
-  if (Object_Record_Offset > (sizeof (Object_Record_Buffer) * 3 / 4))
-    Flush_VMS_Object_Record_Buffer ();
-}
-
-/* Make a debugger reference to a struct, union or enum.  */
-
-static void
-VMS_Store_Struct (int Struct_Index)
-{
-  /* We are writing a debug record.  */
-  Set_VMS_Object_File_Record (OBJ_S_C_DBG);
-  /* If the buffer is empty we must insert the record type.  */
-  if (Object_Record_Offset == 0)
-    PUT_CHAR (OBJ_S_C_DBG);
-  PUT_CHAR (TIR_S_C_STA_UW);
-  PUT_SHORT (Struct_Index);
-  PUT_CHAR (TIR_S_C_CTL_STKDL);
-  PUT_CHAR (TIR_S_C_STO_L);
-  /* Flush the buffer if it is more than 75% full.  */
-  if (Object_Record_Offset > (sizeof (Object_Record_Buffer) * 3 / 4))
-    Flush_VMS_Object_Record_Buffer ();
-}
-
-/* Make a debugger reference to partially define a struct, union or enum.  */
-
-static void
-VMS_Def_Struct (int Struct_Index)
-{
-  /* We are writing a debug record.  */
-  Set_VMS_Object_File_Record (OBJ_S_C_DBG);
-  /* If the buffer is empty we must insert the record type.  */
-  if (Object_Record_Offset == 0)
-    PUT_CHAR (OBJ_S_C_DBG);
-  PUT_CHAR (TIR_S_C_STA_UW);
-  PUT_SHORT (Struct_Index);
-  PUT_CHAR (TIR_S_C_CTL_DFLOC);
-  /* Flush the buffer if it is more than 75% full.  */
-  if (Object_Record_Offset > (sizeof (Object_Record_Buffer) * 3 / 4))
-    Flush_VMS_Object_Record_Buffer ();
-}
-
-static void
-VMS_Set_Struct (int Struct_Index)
-{
-  Set_VMS_Object_File_Record (OBJ_S_C_DBG);
-  if (Object_Record_Offset == 0)
-    PUT_CHAR (OBJ_S_C_DBG);
-  PUT_CHAR (TIR_S_C_STA_UW);
-  PUT_SHORT (Struct_Index);
-  PUT_CHAR (TIR_S_C_CTL_STLOC);
-  if (Object_Record_Offset > (sizeof (Object_Record_Buffer) * 3 / 4))
-    Flush_VMS_Object_Record_Buffer ();
-}
-\f
-/* Traceback Information routines.  */
-
-/* Write the Traceback Module Begin record.  */
-
-static void
-VMS_TBT_Module_Begin (void)
-{
-  char *cp, *cp1;
-  int Size;
-  char Local[256];
-
-  /* Arrange to store the data locally (leave room for size byte).  */
-  cp = &Local[1];
-  /* Begin module.  */
-  *cp++ = DST_S_C_MODBEG;
-  *cp++ = 0;           /* flags; not used */
-  /* Language type == "C"
-    (FIXME:  this should be based on the input...)  */
-  COPY_LONG (cp, DST_S_C_C);
-  cp += 4;
-  /* Store the module name.  */
-  *cp++ = (char) strlen (Module_Name);
-  cp1 = Module_Name;
-  while (*cp1)
-    *cp++ = *cp1++;
-  /* Now we can store the record size.  */
-  Size = (cp - Local);
-  Local[0] = Size - 1;
-  /* Put it into the object record.  */
-  VMS_Store_Immediate_Data (Local, Size, OBJ_S_C_TBT);
-}
-
-/* Write the Traceback Module End record.  */
-
-static void
-VMS_TBT_Module_End (void)
-{
-  char Local[2];
-
-  /* End module.  */
-  Local[0] = 1;
-  Local[1] = DST_S_C_MODEND;
-  /* Put it into the object record.  */
-  VMS_Store_Immediate_Data (Local, 2, OBJ_S_C_TBT);
-}
-
-/* Write a Traceback Routine Begin record.  */
-
-static void
-VMS_TBT_Routine_Begin (symbolS *symbolP, int Psect)
-{
-  char *cp, *cp1;
-  char *Name;
-  int Offset;
-  int Size;
-  char Local[512];
-
-  /* Strip the leading "_" from the name.  */
-  Name = S_GET_NAME (symbolP);
-  if (*Name == '_')
-    Name++;
-  /* Get the text psect offset.  */
-  Offset = S_GET_VALUE (symbolP);
-  /* Set the record size.  */
-  Size = 1 + 1 + 4 + 1 + strlen (Name);
-  Local[0] = Size;
-  /* DST type "routine begin".  */
-  Local[1] = DST_S_C_RTNBEG;
-  /* Uses CallS/CallG.  */
-  Local[2] = 0;
-  /* Store the data so far.  */
-  VMS_Store_Immediate_Data (Local, 3, OBJ_S_C_TBT);
-  /* Make sure we are still generating a OBJ_S_C_TBT record.  */
-  if (Object_Record_Offset == 0)
-    PUT_CHAR (OBJ_S_C_TBT);
-  /* Stack the address.  */
-  vms_tir_stack_psect (Psect, Offset, 0);
-  /* Store the data reference.  */
-  PUT_CHAR (TIR_S_C_STO_PIDR);
-  /* Store the counted string as data.  */
-  cp = Local;
-  cp1 = Name;
-  Size = strlen (cp1) + 1;
-  *cp++ = Size - 1;
-  while (*cp1)
-    *cp++ = *cp1++;
-  VMS_Store_Immediate_Data (Local, Size, OBJ_S_C_TBT);
-}
-
-/* Write a Traceback Routine End record.
-
-   We *must* search the symbol table to find the next routine, since the
-   assembler has a way of reassembling the symbol table OUT OF ORDER Thus
-   the next routine in the symbol list is not necessarily the next one in
-   memory.  For debugging to work correctly we must know the size of the
-   routine.  */
-
-static void
-VMS_TBT_Routine_End (int Max_Size, symbolS *sp)
-{
-  symbolS *symbolP;
-  unsigned long Size = 0x7fffffff;
-  char Local[16];
-  valueT sym_value, sp_value = S_GET_VALUE (sp);
-
-  for (symbolP = symbol_rootP; symbolP; symbolP = symbol_next (symbolP))
-    {
-      if (!S_IS_DEBUG (symbolP) && S_GET_TYPE (symbolP) == N_TEXT)
-       {
-         if (*S_GET_NAME (symbolP) == 'L')
-           continue;
-         sym_value = S_GET_VALUE (symbolP);
-         if (sym_value > sp_value && sym_value < Size)
-           Size = sym_value;
-
-         /* Dummy labels like "gcc_compiled." should no longer reach here.  */
-       }
-    }
-  if (Size == 0x7fffffff)
-    Size = Max_Size;
-  Size -= sp_value;            /* and get the size of the routine */
-  /* Record Size.  */
-  Local[0] = 6;
-  /* DST type is "routine end".  */
-  Local[1] = DST_S_C_RTNEND;
-  Local[2] = 0;                /* unused */
-  /* Size of routine.  */
-  COPY_LONG (&Local[3], Size);
-  /* Store the record.  */
-  VMS_Store_Immediate_Data (Local, 7, OBJ_S_C_TBT);
-}
-
-/* Write a Traceback Block Begin record.  */
-
-static void
-VMS_TBT_Block_Begin (symbolS *symbolP, int Psect, char *Name)
-{
-  char *cp, *cp1;
-  int Offset;
-  int Size;
-  char Local[512];
-
-  /* Set the record size.  */
-  Size = 1 + 1 + 4 + 1 + strlen (Name);
-  Local[0] = Size;
-  /* DST type is "begin block"; we simulate with a phony routine.  */
-  Local[1] = DST_S_C_BLKBEG;
-  /* Uses CallS/CallG.  */
-  Local[2] = 0;
-  /* Store the data so far.  */
-  VMS_Store_Immediate_Data (Local, 3, OBJ_S_C_DBG);
-  /* Make sure we are still generating a debug record.  */
-  if (Object_Record_Offset == 0)
-    PUT_CHAR (OBJ_S_C_DBG);
-  /* Now get the symbol address.  */
-  PUT_CHAR (TIR_S_C_STA_WPL);
-  PUT_SHORT (Psect);
-  /* Get the text psect offset.  */
-  Offset = S_GET_VALUE (symbolP);
-  PUT_LONG (Offset);
-  /* Store the data reference.  */
-  PUT_CHAR (TIR_S_C_STO_PIDR);
-  /* Store the counted string as data.  */
-  cp = Local;
-  cp1 = Name;
-  Size = strlen (cp1) + 1;
-  *cp++ = Size - 1;
-  while (*cp1)
-    *cp++ = *cp1++;
-  VMS_Store_Immediate_Data (Local, Size, OBJ_S_C_DBG);
-}
-
-/* Write a Traceback Block End record.  */
-
-static void
-VMS_TBT_Block_End (valueT Size)
-{
-  char Local[16];
-
-  Local[0] = 6;                /* record length */
-  /* DST type is "block end"; simulate with a phony end routine.  */
-  Local[1] = DST_S_C_BLKEND;
-  Local[2] = 0;                /* unused, must be zero */
-  COPY_LONG (&Local[3], Size);
-  VMS_Store_Immediate_Data (Local, 7, OBJ_S_C_DBG);
-}
-\f
-
-/* Write a Line number <-> Program Counter correlation record.  */
-
-static void
-VMS_TBT_Line_PC_Correlation (int Line_Number, int Offset,
-                            int Psect, int Do_Delta)
-{
-  char *cp;
-  char Local[64];
-
-  if (Do_Delta == 0)
-    {
-      /* If not delta, set our PC/Line number correlation.  */
-      cp = &Local[1];  /* Put size in Local[0] later.  */
-      /* DST type is "Line Number/PC correlation".  */
-      *cp++ = DST_S_C_LINE_NUM;
-      /* Set Line number.  */
-      if (Line_Number - 1 <= 255)
-       {
-         *cp++ = DST_S_C_SET_LINUM_B;
-         *cp++ = (char) (Line_Number - 1);
-       }
-      else if (Line_Number - 1 <= 65535)
-       {
-         *cp++ = DST_S_C_SET_LINE_NUM;
-         COPY_SHORT (cp, Line_Number - 1),  cp += 2;
-       }
-      else
-       {
-         *cp++ = DST_S_C_SET_LINUM_L;
-         COPY_LONG (cp, Line_Number - 1),  cp += 4;
-       }
-      /* Set PC.  */
-      *cp++ = DST_S_C_SET_ABS_PC;
-      /* Store size now that we know it, then output the data.  */
-      Local[0] = cp - &Local[1];
-       /* Account for the space that TIR_S_C_STO_PIDR will use for the PC.  */
-       Local[0] += 4;          /* size includes length of another longword */
-      VMS_Store_Immediate_Data (Local, cp - Local, OBJ_S_C_TBT);
-      /* Make sure we are still generating a OBJ_S_C_TBT record.  */
-      if (Object_Record_Offset == 0)
-       PUT_CHAR (OBJ_S_C_TBT);
-      vms_tir_stack_psect (Psect, Offset, 0);
-      PUT_CHAR (TIR_S_C_STO_PIDR);
-      /* Do a PC offset of 0 to register the line number.  */
-      Local[0] = 2;
-      Local[1] = DST_S_C_LINE_NUM;
-      Local[2] = 0;            /* Increment PC by 0 and register line # */
-      VMS_Store_Immediate_Data (Local, 3, OBJ_S_C_TBT);
-    }
-  else
-    {
-      if (Do_Delta < 0)
-       {
-         /* When delta is negative, terminate the line numbers.  */
-         Local[0] = 1 + 1 + 4;
-         Local[1] = DST_S_C_LINE_NUM;
-         Local[2] = DST_S_C_TERM_L;
-         COPY_LONG (&Local[3], Offset);
-         VMS_Store_Immediate_Data (Local, 7, OBJ_S_C_TBT);
-         return;
-       }
-      /* Do a PC/Line delta.  */
-      cp = &Local[1];
-      *cp++ = DST_S_C_LINE_NUM;
-      if (Line_Number > 1)
-       {
-         /* We need to increment the line number.  */
-         if (Line_Number - 1 <= 255)
-           {
-             *cp++ = DST_S_C_INCR_LINUM;
-             *cp++ = Line_Number - 1;
-           }
-         else if (Line_Number - 1 <= 65535)
-           {
-             *cp++ = DST_S_C_INCR_LINUM_W;
-             COPY_SHORT (cp, Line_Number - 1),  cp += 2;
-           }
-         else
-           {
-             *cp++ = DST_S_C_INCR_LINUM_L;
-             COPY_LONG (cp, Line_Number - 1),  cp += 4;
-           }
-       }
-      /* Increment the PC.  */
-      if (Offset <= 128)
-       {
-         /* Small offsets are encoded as negative numbers, rather than the
-            usual non-negative type code followed by another data field.  */
-         *cp++ = (char) -Offset;
-       }
-      else if (Offset <= 65535)
-       {
-         *cp++ = DST_S_C_DELTA_PC_W;
-         COPY_SHORT (cp, Offset),  cp += 2;
-       }
-      else
-       {
-         *cp++ = DST_S_C_DELTA_PC_L;
-         COPY_LONG (cp, Offset),  cp += 4;
-       }
-      /* Set size now that be know it, then output the data.  */
-      Local[0] = cp - &Local[1];
-      VMS_Store_Immediate_Data (Local, cp - Local, OBJ_S_C_TBT);
-    }
-}
-\f
-
-/* Describe a source file to the debugger.  */
-
-static int
-VMS_TBT_Source_File (char *Filename, int ID_Number)
-{
-  char *cp;
-  int len, rfo, ffb, ebk;
-  char cdt[8];
-  char Local[512];
-#ifdef VMS                     /* Used for native assembly */
-  unsigned Status;
-  struct FAB fab;              /* RMS file access block */
-  struct NAM nam;              /* file name information */
-  struct XABDAT xabdat;                /* date+time fields */
-  struct XABFHC xabfhc;                /* file header characteristics */
-  char resultant_string_buffer[255 + 1];
-
-  /* Set up RMS structures:  */
-  /* FAB -- file access block */
-  memset ((char *) &fab, 0, sizeof fab);
-  fab.fab$b_bid = FAB$C_BID;
-  fab.fab$b_bln = (unsigned char) sizeof fab;
-  fab.fab$l_fna = Filename;
-  fab.fab$b_fns = (unsigned char) strlen (Filename);
-  fab.fab$l_nam = (char *) &nam;
-  fab.fab$l_xab = (char *) &xabdat;
-  /* NAM -- file name block.  */
-  memset ((char *) &nam, 0, sizeof nam);
-  nam.nam$b_bid = NAM$C_BID;
-  nam.nam$b_bln = (unsigned char) sizeof nam;
-  nam.nam$l_rsa = resultant_string_buffer;
-  nam.nam$b_rss = (unsigned char) (sizeof resultant_string_buffer - 1);
-  /* XABs -- extended attributes blocks.  */
-  memset ((char *) &xabdat, 0, sizeof xabdat);
-  xabdat.xab$b_cod = XAB$C_DAT;
-  xabdat.xab$b_bln = (unsigned char) sizeof xabdat;
-  xabdat.xab$l_nxt = (char *) &xabfhc;
-  memset ((char *) &xabfhc, 0, sizeof xabfhc);
-  xabfhc.xab$b_cod = XAB$C_FHC;
-  xabfhc.xab$b_bln = (unsigned char) sizeof xabfhc;
-  xabfhc.xab$l_nxt = 0;
-
-  /* Get the file information.  */
-  Status = sys$open (&fab);
-  if (!(Status & 1))
-    {
-      as_tsktsk (_("Couldn't find source file \"%s\", status=%%X%x"),
-                Filename, Status);
-      return 0;
-    }
-  sys$close (&fab);
-  /* Now extract fields of interest.  */
-  memcpy (cdt, (char *) &xabdat.xab$q_cdt, 8); /* creation date */
-  ebk = xabfhc.xab$l_ebk;              /* end-of-file block */
-  ffb = xabfhc.xab$w_ffb;              /* first free byte of last block */
-  rfo = xabfhc.xab$b_rfo;              /* record format */
-  len = nam.nam$b_rsl;                 /* length of Filename */
-  resultant_string_buffer[len] = '\0';
-  Filename = resultant_string_buffer;  /* full filename */
-#else                          /* Cross-assembly */
-  /* [Perhaps we ought to use actual values derived from stat() here?]  */
-  memset (cdt, 0, 8);                  /* null VMS quadword binary time */
-  ebk = ffb = rfo = 0;
-  len = strlen (Filename);
-  if (len > 255)       /* a single byte is used as count prefix */
-    {
-      Filename += (len - 255);         /* tail end is more significant */
-      len = 255;
-    }
-#endif /* VMS */
-
-  cp = &Local[1];                      /* fill in record length later */
-  *cp++ = DST_S_C_SOURCE;              /* DST type is "source file" */
-  *cp++ = DST_S_C_SRC_FORMFEED;                /* formfeeds count as source records */
-  *cp++ = DST_S_C_SRC_DECLFILE;                /* declare source file */
-  know (cp == &Local[4]);
-  *cp++ = 0;                           /* fill in this length below */
-  *cp++ = 0;                           /* flags; must be zero */
-  COPY_SHORT (cp, ID_Number),  cp += 2;        /* file ID number */
-  memcpy (cp, cdt, 8),  cp += 8;       /* creation date+time */
-  COPY_LONG (cp, ebk),  cp += 4;       /* end-of-file block */
-  COPY_SHORT (cp, ffb),  cp += 2;      /* first free byte of last block */
-  *cp++ = (char) rfo;                  /* RMS record format */
-  /* Filename.  */
-  *cp++ = (char) len;
-  while (--len >= 0)
-    *cp++ = *Filename++;
-  /* Library module name (none).  */
-  *cp++ = 0;
-  /* Now that size is known, fill it in and write out the record.  */
-  Local[4] = cp - &Local[5];           /* source file declaration size */
-  Local[0] = cp - &Local[1];           /* TBT record size */
-  VMS_Store_Immediate_Data (Local, cp - Local, OBJ_S_C_TBT);
-  return 1;
-}
-
-/* Traceback information is described in terms of lines from compiler
-   listing files, not lines from source files.  We need to set up the
-   correlation between listing line numbers and source line numbers.
-   Since gcc's .stabn directives refer to the source lines, we just
-   need to describe a one-to-one correspondence.  */
-
-static void
-VMS_TBT_Source_Lines (int ID_Number, int Starting_Line_Number,
-                     int Number_Of_Lines)
-{
-  char *cp;
-  int chunk_limit;
-  char Local[128];     /* room enough to describe 1310700 lines...  */
-
-  cp = &Local[1];      /* Put size in Local[0] later.  */
-  *cp++ = DST_S_C_SOURCE;              /* DST type is "source file".  */
-  *cp++ = DST_S_C_SRC_SETFILE;         /* Set Source File.  */
-  COPY_SHORT (cp, ID_Number),  cp += 2;        /* File ID Number.  */
-  /* Set record number and define lines.  Since no longword form of
-     SRC_DEFLINES is available, we need to be able to cope with any huge
-     files a chunk at a time.  It doesn't matter for tracebacks, since
-     unspecified lines are mapped one-to-one and work out right, but it
-     does matter within the debugger.  Without this explicit mapping,
-     it will complain about lines not existing in the module.  */
-  chunk_limit = (sizeof Local - 5) / 6;
-  if (Number_Of_Lines > 65535 * chunk_limit)   /* avoid buffer overflow */
-    Number_Of_Lines = 65535 * chunk_limit;
-  while (Number_Of_Lines > 65535)
-    {
-      *cp++ = DST_S_C_SRC_SETREC_L;
-      COPY_LONG (cp, Starting_Line_Number),  cp += 4;
-      *cp++ = DST_S_C_SRC_DEFLINES_W;
-      COPY_SHORT (cp, 65535),  cp += 2;
-      Starting_Line_Number += 65535;
-      Number_Of_Lines -= 65535;
-    }
-  /* Set record number and define lines, normal case.  */
-  if (Starting_Line_Number <= 65535)
-    {
-      *cp++ = DST_S_C_SRC_SETREC_W;
-      COPY_SHORT (cp, Starting_Line_Number),  cp += 2;
-    }
-  else
-    {
-      *cp++ = DST_S_C_SRC_SETREC_L;
-      COPY_LONG (cp, Starting_Line_Number),  cp += 4;
-    }
-  *cp++ = DST_S_C_SRC_DEFLINES_W;
-  COPY_SHORT (cp, Number_Of_Lines),  cp += 2;
-  /* Set size now that be know it, then output the data.  */
-  Local[0] = cp - &Local[1];
-  VMS_Store_Immediate_Data (Local, cp - Local, OBJ_S_C_TBT);
-}
-\f
-
-/* Debugger Information support routines. */
-
-/* This routine locates a file in the list of files.  If an entry does
-   not exist, one is created.  For include files, a new entry is always
-   created such that inline functions can be properly debugged.  */
-
-static struct input_file *
-find_file (symbolS *sp)
-{
-  struct input_file *same_file = 0;
-  struct input_file *fpnt, *last = 0;
-  char *sp_name;
-
-  for (fpnt = file_root; fpnt; fpnt = fpnt->next)
-    {
-      if (fpnt->spnt == sp)
-       return fpnt;
-      last = fpnt;
-    }
-  sp_name = S_GET_NAME (sp);
-  for (fpnt = file_root; fpnt; fpnt = fpnt->next)
-    {
-      if (strcmp (sp_name, fpnt->name) == 0)
-       {
-         if (fpnt->flag == 1)
-           return fpnt;
-         same_file = fpnt;
-         break;
-       }
-    }
-  fpnt = xmalloc (sizeof (struct input_file));
-  if (!file_root)
-    file_root = fpnt;
-  else
-    last->next = fpnt;
-  fpnt->next = 0;
-  fpnt->name = sp_name;
-  fpnt->min_line = 0x7fffffff;
-  fpnt->max_line = 0;
-  fpnt->offset = 0;
-  fpnt->flag = 0;
-  fpnt->file_number = 0;
-  fpnt->spnt = sp;
-  fpnt->same_file_fpnt = same_file;
-  return fpnt;
-}
-
-/* This routine converts a number string into an integer, and stops when
-   it sees an invalid character.  The return value is the address of the
-   character just past the last character read.  No error is generated.  */
-
-static char *
-cvt_integer (char *str, int *rtn)
-{
-  int ival = 0, sgn = 1;
-
-  if (*str == '-')
-    sgn = -1,  ++str;
-  while (*str >= '0' && *str <= '9')
-    ival = 10 * ival + *str++ - '0';
-  *rtn = sgn * ival;
-  return str;
-}
-\f
-
-/* The following functions and definitions are used to generate object
-   records that will describe program variables to the VMS debugger.
-
-   This file contains many of the routines needed to output debugging info
-   into the object file that the VMS debugger needs to understand symbols.
-   These routines are called very late in the assembly process, and thus
-   we can be fairly lax about changing things, since the GSD and the TIR
-   sections have already been output.  */
-
-/* This routine fixes the names that are generated by C++, ".this" is a good
-   example.  The period does not work for the debugger, since it looks like
-   the syntax for a structure element, and thus it gets mightily confused.
-
-   We also use this to strip the PsectAttribute hack from the name before we
-   write a debugger record.  */
-
-static char *
-fix_name (char *pnt)
-{
-  char *pnt1;
-
-  /* Kill any leading "_".  */
-  if (*pnt == '_')
-    pnt++;
-
-  /* Is there a Psect Attribute to skip??  */
-  if (HAS_PSECT_ATTRIBUTES (pnt))
-    {
-      /* Yes: Skip it.  */
-      pnt += PSECT_ATTRIBUTES_STRING_LENGTH;
-      while (*pnt)
-       {
-         if ((pnt[0] == '$') && (pnt[1] == '$'))
-           {
-             pnt += 2;
-             break;
-           }
-         pnt++;
-       }
-    }
-
-  /* Here we fix the .this -> $this conversion.  */
-  for (pnt1 = pnt; *pnt1 != 0; pnt1++)
-    if (*pnt1 == '.')
-      *pnt1 = '$';
-
-  return pnt;
-}
-
-/* When defining a structure, this routine is called to find the name of
-   the actual structure.  It is assumed that str points to the equal sign
-   in the definition, and it moves backward until it finds the start of the
-   name.  If it finds a 0, then it knows that this structure def is in the
-   outermost level, and thus symbol_name points to the symbol name.  */
-
-static char *
-get_struct_name (char *str)
-{
-  char *pnt;
-  pnt = str;
-  while ((*pnt != ':') && (*pnt != '\0'))
-    pnt--;
-  if (*pnt == '\0')
-    return (char *) symbol_name;
-  *pnt-- = '\0';
-  while ((*pnt != ';') && (*pnt != '='))
-    pnt--;
-  if (*pnt == ';')
-    return pnt + 1;
-  while ((*pnt < '0') || (*pnt > '9'))
-    pnt++;
-  while ((*pnt >= '0') && (*pnt <= '9'))
-    pnt++;
-  return pnt;
-}
-
-/* Search symbol list for type number dbx_type.
-   Return a pointer to struct.  */
-
-static struct VMS_DBG_Symbol *
-find_symbol (int dbx_type)
-{
-  struct VMS_DBG_Symbol *spnt;
-
-  spnt = VMS_Symbol_type_list[SYMTYP_HASH (dbx_type)];
-  while (spnt)
-    {
-      if (spnt->dbx_type == dbx_type)
-       break;
-      spnt = spnt->next;
-    }
-  if (!spnt || spnt->advanced != ALIAS)
-    return spnt;
-  return find_symbol (spnt->type2);
-}
-
-static void
-fpush (int value, int size)
-{
-  if (Apoint + size >= MAX_DEBUG_RECORD)
-    {
-      overflow = 1;
-      Apoint = MAX_DEBUG_RECORD - 1;
-      return;
-    }
-  if (size == 1)
-    Asuffix[Apoint++] = (char) value;
-  else
-    {
-      md_number_to_chars (&Asuffix[Apoint], value, size);
-      Apoint += size;
-    }
-}
-
-static void
-rpush (int value, int size)
-{
-  if (Lpnt < size)
-    {
-      overflow = 1;
-      Lpnt = 1;
-      return;
-    }
-  if (size == 1)
-      Local[Lpnt--] = (char) value;
-  else
-    {
-      Lpnt -= size;
-      md_number_to_chars (&Local[Lpnt + 1], value, size);
-    }
-}
-
-/* This routine generates the array descriptor for a given array.  */
-
-static void
-array_suffix (struct VMS_DBG_Symbol *spnt2)
-{
-  struct VMS_DBG_Symbol *spnt;
-  struct VMS_DBG_Symbol *spnt1;
-  int rank;
-  int total_size;
-
-  rank = 0;
-  spnt = spnt2;
-  while (spnt->advanced != ARRAY)
-    {
-      spnt = find_symbol (spnt->type2);
-      if (!spnt)
-       return;
-    }
-  spnt1 = spnt;
-  total_size = 1;
-  while (spnt1->advanced == ARRAY)
-    {
-      rank++;
-      total_size *= (spnt1->index_max - spnt1->index_min + 1);
-      spnt1 = find_symbol (spnt1->type2);
-    }
-  total_size = total_size * spnt1->data_size;
-  fpush (spnt1->data_size, 2); /* element size */
-  if (spnt1->VMS_type == DBG_S_C_ADVANCED_TYPE)
-    fpush (0, 1);
-  else
-    fpush (spnt1->VMS_type, 1);        /* element type */
-  fpush (DSC_K_CLASS_A, 1);    /* descriptor class */
-  fpush (0, 4);                        /* base address */
-  fpush (0, 1);                        /* scale factor -- not applicable */
-  fpush (0, 1);                        /* digit count -- not applicable */
-  fpush (0xc0, 1);             /* flags: multiplier block & bounds present */
-  fpush (rank, 1);             /* number of dimensions */
-  fpush (total_size, 4);
-  fpush (0, 4);                        /* pointer to element [0][0]...[0] */
-  spnt1 = spnt;
-  while (spnt1->advanced == ARRAY)
-    {
-      fpush (spnt1->index_max - spnt1->index_min + 1, 4);
-      spnt1 = find_symbol (spnt1->type2);
-    }
-  spnt1 = spnt;
-  while (spnt1->advanced == ARRAY)
-    {
-      fpush (spnt1->index_min, 4);
-      fpush (spnt1->index_max, 4);
-      spnt1 = find_symbol (spnt1->type2);
-    }
-}
-
-/* This routine generates the start of a variable descriptor based upon
-   a struct/union/enum that has yet to be defined.  We define this spot as
-   a new location, and save four bytes for the address.  When the struct is
-   finally defined, then we can go back and plug in the correct address.  */
-
-static void
-new_forward_ref (int dbx_type)
-{
-  struct forward_ref *fpnt;
-
-  fpnt = xmalloc (sizeof (struct forward_ref));
-  fpnt->next = f_ref_root;
-  f_ref_root = fpnt;
-  fpnt->dbx_type = dbx_type;
-  fpnt->struc_numb = ++structure_count;
-  fpnt->resolved = 'N';
-  rpush (DST_K_TS_IND, 1);     /* indirect type specification */
-  total_len = 5;
-  rpush (total_len, 2);
-  struct_number = -fpnt->struc_numb;
-}
-
-/* This routine generates the variable descriptor used to describe non-basic
-   variables.  It calls itself recursively until it gets to the bottom of it
-   all, and then builds the descriptor backwards.  It is easiest to do it
-   this way since we must periodically write length bytes, and it is easiest
-   if we know the value when it is time to write it.  */
-
-static int
-gen1 (struct VMS_DBG_Symbol *spnt, int array_suffix_len)
-{
-  struct VMS_DBG_Symbol *spnt1;
-  int i;
-
-  switch (spnt->advanced)
-    {
-    case VOID:
-      rpush (DBG_S_C_VOID, 1);
-      total_len += 1;
-      rpush (total_len, 2);
-      return 0;
-    case BASIC:
-    case FUNCTION:
-      if (array_suffix_len == 0)
-       {
-         rpush (spnt->VMS_type, 1);
-         rpush (DBG_S_C_BASIC, 1);
-         total_len = 2;
-         rpush (total_len, 2);
-         return 1;
-       }
-      rpush (0, 4);
-      rpush (DST_K_VFLAGS_DSC, 1);
-      rpush (DST_K_TS_DSC, 1); /* Descriptor type specification.  */
-      total_len = -2;
-      return 1;
-    case STRUCT:
-    case UNION:
-    case ENUM:
-      struct_number = spnt->struc_numb;
-      if (struct_number < 0)
-       {
-         new_forward_ref (spnt->dbx_type);
-         return 1;
-       }
-      rpush (DBG_S_C_STRUCT, 1);
-      total_len = 5;
-      rpush (total_len, 2);
-      return 1;
-    case POINTER:
-      spnt1 = find_symbol (spnt->type2);
-      i = 1;
-      if (!spnt1)
-       new_forward_ref (spnt->type2);
-      else
-       i = gen1 (spnt1, 0);
-      if (i)
-       {
-         /* (*void) is a special case, do not put pointer suffix.  */
-         rpush (DBG_S_C_POINTER, 1);
-         total_len += 3;
-         rpush (total_len, 2);
-       }
-      return 1;
-    case ARRAY:
-      spnt1 = spnt;
-      while (spnt1->advanced == ARRAY)
-       {
-         spnt1 = find_symbol (spnt1->type2);
-         if (!spnt1)
-           {
-             as_tsktsk (_("debugger forward reference error, dbx type %d"),
-                        spnt->type2);
-             return 0;
-           }
-       }
-      /* It is too late to generate forward references, so the user
-        gets a message.  This should only happen on a compiler error.  */
-      (void) gen1 (spnt1, 1);
-      i = Apoint;
-      array_suffix (spnt);
-      array_suffix_len = Apoint - i;
-      switch (spnt1->advanced)
-       {
-       case BASIC:
-       case FUNCTION:
-         break;
-       default:
-         rpush (0, 2);
-         total_len += 2;
-         rpush (total_len, 2);
-         rpush (DST_K_VFLAGS_DSC, 1);
-         rpush (1, 1);         /* Flags: element value spec included.  */
-         rpush (1, 1);         /* One dimension.  */
-         rpush (DBG_S_C_COMPLEX_ARRAY, 1);
-       }
-      total_len += array_suffix_len + 8;
-      rpush (total_len, 2);
-      break;
-    default:
-      break;
-    }
-  return 0;
-}
-
-/* This generates a suffix for a variable.  If it is not a defined type yet,
-   then dbx_type contains the type we are expecting so we can generate a
-   forward reference.  This calls gen1 to build most of the descriptor, and
-   then it puts the icing on at the end.  It then dumps whatever is needed
-   to get a complete descriptor (i.e. struct reference, array suffix).  */
-
-static void
-generate_suffix (struct VMS_DBG_Symbol *spnt, int dbx_type)
-{
-  static const char pvoid[6] =
-    {
-      5,               /* record.length == 5 */
-      DST_K_TYPSPEC,   /* record.type == 1 (type specification) */
-      0,               /* name.length == 0, no name follows */
-      1, 0,            /* type.length == 1 {2 bytes, little endian} */
-      DBG_S_C_VOID     /* type.type == 5 (pointer to unspecified) */
-    };
-  int i;
-
-  Apoint = 0;
-  Lpnt = MAX_DEBUG_RECORD - 1;
-  total_len = 0;
-  struct_number = 0;
-  overflow = 0;
-  if (!spnt)
-    new_forward_ref (dbx_type);
-  else
-    {
-      if (spnt->VMS_type != DBG_S_C_ADVANCED_TYPE)
-       return;         /* no suffix needed */
-      gen1 (spnt, 0);
-    }
-  rpush (0, 1);                /* no name (len==0) */
-  rpush (DST_K_TYPSPEC, 1);
-  total_len += 4;
-  rpush (total_len, 1);
-  /* If the variable descriptor overflows the record, output a descriptor
-     for a pointer to void.  */
-  if ((total_len >= MAX_DEBUG_RECORD) || overflow)
-    {
-      as_warn (_("Variable descriptor %d too complicated.  Defined as `void *'."),
-               spnt->dbx_type);
-      VMS_Store_Immediate_Data (pvoid, 6, OBJ_S_C_DBG);
-      return;
-    }
-  i = 0;
-  while (Lpnt < MAX_DEBUG_RECORD - 1)
-    Local[i++] = Local[++Lpnt];
-  Lpnt = i;
-  /* We use this for reference to structure that has already been defined.  */
-  if (struct_number > 0)
-    {
-      VMS_Store_Immediate_Data (Local, Lpnt, OBJ_S_C_DBG);
-      Lpnt = 0;
-      VMS_Store_Struct (struct_number);
-    }
-  /* We use this for a forward reference to a structure that has yet to
-     be defined.  We store four bytes of zero to make room for the actual
-     address once it is known.  */
-  if (struct_number < 0)
-    {
-      struct_number = -struct_number;
-      VMS_Store_Immediate_Data (Local, Lpnt, OBJ_S_C_DBG);
-      Lpnt = 0;
-      VMS_Def_Struct (struct_number);
-      COPY_LONG (&Local[Lpnt], 0L);
-      Lpnt += 4;
-      VMS_Store_Immediate_Data (Local, Lpnt, OBJ_S_C_DBG);
-      Lpnt = 0;
-    }
-  i = 0;
-  while (i < Apoint)
-    Local[Lpnt++] = Asuffix[i++];
-  if (Lpnt != 0)
-    VMS_Store_Immediate_Data (Local, Lpnt, OBJ_S_C_DBG);
-  Lpnt = 0;
-}
-
-/* "novel length" type doesn't work for simple atomic types.  */
-#define USE_BITSTRING_DESCRIPTOR(t) ((t)->advanced == BASIC)
-#undef SETUP_BASIC_TYPES
-
-/* This routine generates a type description for a bitfield.  */
-
-static void
-bitfield_suffix (struct VMS_DBG_Symbol *spnt, int width)
-{
-  Local[Lpnt++] = 13;                  /* rec.len==13 */
-  Local[Lpnt++] = DST_K_TYPSPEC;       /* a type specification record */
-  Local[Lpnt++] = 0;                   /* not named */
-  COPY_SHORT (&Local[Lpnt], 9);                /* typ.len==9 */
-  Lpnt += 2;
-  Local[Lpnt++] = DST_K_TS_NOV_LENG;   /* This type is a "novel length"
-                                          incarnation of some other type.  */
-  COPY_LONG (&Local[Lpnt], width);     /* size in bits == novel length */
-  Lpnt += 4;
-  VMS_Store_Immediate_Data (Local, Lpnt, OBJ_S_C_DBG);
-  Lpnt = 0;
-  /* assert( spnt->struc_numb > 0 ); */
-  VMS_Store_Struct (spnt->struc_numb); /* output 4 more bytes */
-}
-
-/* Formally define a builtin type, so that it can serve as the target of
-   an indirect reference.  It makes bitfield_suffix() easier by avoiding
-   the need to use a forward reference for the first occurrence of each
-   type used in a bitfield.  */
-
-static void
-setup_basic_type (struct VMS_DBG_Symbol *spnt ATTRIBUTE_UNUSED)
-{
-#ifdef SETUP_BASIC_TYPES
-  /* This would be very useful if "novel length" fields actually worked
-     with basic types like they do with enumerated types.  However,
-     they do not, so this isn't worth doing just so that you can use
-     EXAMINE/TYPE=(__long_long_int) instead of EXAMINE/QUAD.  */
-  char *p;
-#ifndef SETUP_SYNONYM_TYPES
-  /* This determines whether compatible things like `int' and `long int'
-     ought to have distinct type records rather than sharing one.  */
-  struct VMS_DBG_Symbol *spnt2;
-
-  /* First check whether this type has already been seen by another name.  */
-  for (spnt2 = VMS_Symbol_type_list[SYMTYP_HASH (spnt->VMS_type)];
-       spnt2;
-       spnt2 = spnt2->next)
-    if (spnt2 != spnt && spnt2->VMS_type == spnt->VMS_type)
-      {
-       spnt->struc_numb = spnt2->struc_numb;
-       return;
-      }
-#endif
-
-  /* `structure number' doesn't really mean `structure'; it means an index
-     into a linker maintained set of saved locations which can be referenced
-     again later.  */
-  spnt->struc_numb = ++structure_count;
-  VMS_Def_Struct (spnt->struc_numb);   /* remember where this type lives */
-  /* define the simple scalar type */
-  Local[Lpnt++] = 6 + strlen (symbol_name) + 2;        /* rec.len */
-  Local[Lpnt++] = DST_K_TYPSPEC;       /* rec.typ==type specification */
-  Local[Lpnt++] = strlen (symbol_name) + 2;
-  Local[Lpnt++] = '_';                 /* prefix name with "__" */
-  Local[Lpnt++] = '_';
-  for (p = symbol_name; *p; p++)
-    Local[Lpnt++] = *p == ' ' ? '_' : *p;
-  COPY_SHORT (&Local[Lpnt], 2);                /* typ.len==2 */
-  Lpnt += 2;
-  Local[Lpnt++] = DST_K_TS_ATOM;       /* typ.kind is simple type */
-  Local[Lpnt++] = spnt->VMS_type;      /* typ.type */
-  VMS_Store_Immediate_Data (Local, Lpnt, OBJ_S_C_DBG);
-  Lpnt = 0;
-#endif /* SETUP_BASIC_TYPES */
-}
-
-/* This routine generates a symbol definition for a C symbol for the
-   debugger.  It takes a psect and offset for global symbols; if psect < 0,
-   then this is a local variable and the offset is relative to FP.  In this
-   case it can be either a variable (Offset < 0) or a parameter (Offset > 0).  */
-
-static void
-VMS_DBG_record (struct VMS_DBG_Symbol *spnt, int Psect,
-               int Offset, char *Name)
-{
-  char *Name_pnt;
-  int len;
-  int i = 0;
-
-  /* If there are bad characters in name, convert them.  */
-  Name_pnt = fix_name (Name);
-
-  len = strlen (Name_pnt);
-  if (Psect < 0)
-    {
-      /* This is a local variable, referenced to SP.  */
-      Local[i++] = 7 + len;
-      Local[i++] = spnt->VMS_type;
-      Local[i++] = (Offset > 0) ? DBG_C_FUNCTION_PARAM : DBG_C_LOCAL_SYM;
-      COPY_LONG (&Local[i], Offset);
-      i += 4;
-    }
-  else
-    {
-      Local[i++] = 7 + len;
-      Local[i++] = spnt->VMS_type;
-      Local[i++] = DST_K_VALKIND_ADDR;
-      VMS_Store_Immediate_Data (Local, i, OBJ_S_C_DBG);
-      i = 0;
-      VMS_Set_Data (Psect, Offset, OBJ_S_C_DBG, 0);
-    }
-  Local[i++] = len;
-  while (*Name_pnt != '\0')
-    Local[i++] = *Name_pnt++;
-  VMS_Store_Immediate_Data (Local, i, OBJ_S_C_DBG);
-  if (spnt->VMS_type == DBG_S_C_ADVANCED_TYPE)
-    generate_suffix (spnt, 0);
-}
-
-/* This routine parses the stabs entries in order to make the definition
-   for the debugger of local symbols and function parameters.  */
-
-static void
-VMS_local_stab_Parse (symbolS *sp)
-{
-  struct VMS_DBG_Symbol *spnt;
-  char *pnt;
-  char *pnt1;
-  char *str;
-  int dbx_type;
-
-  dbx_type = 0;
-  str = S_GET_NAME (sp);
-  pnt = (char *) strchr (str, ':');
-  if (!pnt)
-    return;
-  
-  /* Save this for later, and skip colon.  */
-  pnt1 = pnt++;
-
-  /* Ignore static constants.  */
-  if (*pnt == 'c')
-    return;
-  
-  /* There is one little catch that we must be aware of.  Sometimes function
-     parameters are optimized into registers, and the compiler, in its
-     infiite wisdom outputs stabs records for *both*.  In general we want to
-     use the register if it is present, so we must search the rest of the
-     symbols for this function to see if this parameter is assigned to a
-     register.  */
-  {
-    symbolS *sp1;
-    char *str1;
-    char *pnt2;
-
-    if (*pnt == 'p')
-      {
-       for (sp1 = symbol_next (sp); sp1; sp1 = symbol_next (sp1))
-         {
-           if (!S_IS_DEBUG (sp1))
-             continue;
-           if (S_GET_RAW_TYPE (sp1) == N_FUN)
-             {
-               pnt2 = (char *) strchr (S_GET_NAME (sp1), ':') + 1;
-               if (*pnt2 == 'F' || *pnt2 == 'f')
-                 break;
-             }
-           if (S_GET_RAW_TYPE (sp1) != N_RSYM)
-             continue;
-           str1 = S_GET_NAME (sp1);    /* and get the name */
-           pnt2 = str;
-           while (*pnt2 != ':')
-             {
-               if (*pnt2 != *str1)
-                 break;
-               pnt2++;
-               str1++;
-             }
-           if (*str1 == ':' && *pnt2 == ':')
-             return;   /* They are the same!  Let's skip this one.  */
-         }
-
-       /* Skip p in case no register.  */
-       pnt++;
-      }
-  }
-
-  pnt = cvt_integer (pnt, &dbx_type);
-
-  spnt = find_symbol (dbx_type);
-  if (!spnt)
-    /* Dunno what this is.  */
-    return;
-  
-  *pnt1 = '\0';
-  VMS_DBG_record (spnt, -1, S_GET_VALUE (sp), str);
-
-  /* ...and restore the string.  */
-  *pnt1 = ':';
-}
-
-/* This routine parses a stabs entry to find the information required
-   to define a variable.  It is used for global and static variables.
-   Basically we need to know the address of the symbol.  With older
-   versions of the compiler, const symbols are treated differently, in
-   that if they are global they are written into the text psect.  The
-   global symbol entry for such a const is actually written as a program
-   entry point (Yuk!!), so if we cannot find a symbol in the list of
-   psects, we must search the entry points as well.  static consts are
-   even harder, since they are never assigned a memory address.  The
-   compiler passes a stab to tell us the value, but I am not sure what
-   to do with it.  */
-
-static void
-VMS_stab_parse (symbolS *sp, int expected_type,
-               int type1, int type2, int Text_Psect)
-{
-  char *pnt;
-  char *pnt1;
-  char *str;
-  symbolS *sp1;
-  struct VMS_DBG_Symbol *spnt;
-  struct VMS_Symbol *vsp;
-  int dbx_type;
-
-  dbx_type = 0;
-  str = S_GET_NAME (sp);
-
-  pnt = (char *) strchr (str, ':');
-  if (!pnt)
-    /* No colon present.  */
-    return;
-  
-  /* Save this for later. */
-  pnt1 = pnt;
-  pnt++;
-  if (*pnt == expected_type)
-    {
-      pnt = cvt_integer (pnt + 1, &dbx_type);
-      spnt = find_symbol (dbx_type);
-      if (!spnt)
-       return;         /*Dunno what this is*/
-      /* Now we need to search the symbol table to find the psect and
-         offset for this variable.  */
-      *pnt1 = '\0';
-      vsp = VMS_Symbols;
-      while (vsp)
-       {
-         pnt = S_GET_NAME (vsp->Symbol);
-         if (pnt && *pnt++ == '_'
-             /* make sure name is the same and symbol type matches */
-             && strcmp (pnt, str) == 0
-             && (S_GET_RAW_TYPE (vsp->Symbol) == type1
-                 || S_GET_RAW_TYPE (vsp->Symbol) == type2))
-           break;
-         vsp = vsp->Next;
-       }
-      if (vsp)
-       {
-         VMS_DBG_record (spnt, vsp->Psect_Index, vsp->Psect_Offset, str);
-         *pnt1 = ':';          /* and restore the string */
-         return;
-       }
-      /* The symbol was not in the symbol list, but it may be an
-         "entry point" if it was a constant.  */
-      for (sp1 = symbol_rootP; sp1; sp1 = symbol_next (sp1))
-       {
-         /* Dispatch on STAB type.  */
-         if (S_IS_DEBUG (sp1) || (S_GET_TYPE (sp1) != N_TEXT))
-           continue;
-         pnt = S_GET_NAME (sp1);
-         if (*pnt == '_')
-           pnt++;
-         if (strcmp (pnt, str) == 0)
-           {
-             if (!gave_compiler_message && expected_type == 'G')
-               {
-                 char *long_const_msg = _("\
-***Warning - the assembly code generated by the compiler has placed \n\
- global constant(s) in the text psect.  These will not be available to \n\
- other modules, since this is not the correct way to handle this. You \n\
- have two options: 1) get a patched compiler that does not put global \n\
- constants in the text psect, or 2) remove the 'const' keyword from \n\
- definitions of global variables in your source module(s).  Don't say \n\
- I didn't warn you! \n");
-
-                 as_tsktsk (long_const_msg);
-                 gave_compiler_message = 1;
-               }
-             VMS_DBG_record (spnt,
-                             Text_Psect,
-                             S_GET_VALUE (sp1),
-                             str);
-             *pnt1 = ':';
-             /* Fool assembler to not output this as a routine in the TBT.  */
-             pnt1 = S_GET_NAME (sp1);
-             *pnt1 = 'L';
-             S_SET_NAME (sp1, pnt1);
-             return;
-           }
-       }
-    }
-
-  /* ...and restore the string.  */
-  *pnt1 = ':';
-}
-
-/* Simpler interfaces into VMS_stab_parse().  */
-
-static void
-VMS_GSYM_Parse (symbolS *sp, int Text_Psect)
-{                              /* Global variables */
-  VMS_stab_parse (sp, 'G', (N_UNDF | N_EXT), (N_DATA | N_EXT), Text_Psect);
-}
-
-static void
-VMS_LCSYM_Parse (symbolS *sp, int Text_Psect)
-{
-  VMS_stab_parse (sp, 'S', N_BSS, -1, Text_Psect);
-}
-
-static void
-VMS_STSYM_Parse (symbolS *sp, int Text_Psect)
-{
-  VMS_stab_parse (sp, 'S', N_DATA, -1, Text_Psect);
-}
-
-/* For register symbols, we must figure out what range of addresses
-   within the psect are valid.  We will use the brackets in the stab
-   directives to give us guidance as to the PC range that this variable
-   is in scope.  I am still not completely comfortable with this but
-   as I learn more, I seem to get a better handle on what is going on.
-   Caveat Emptor.  */
-
-static void
-VMS_RSYM_Parse (symbolS *sp, symbolS *Current_Routine ATTRIBUTE_UNUSED,
-               int Text_Psect)
-{
-  symbolS *symbolP;
-  struct VMS_DBG_Symbol *spnt;
-  char *pnt;
-  char *pnt1;
-  char *str;
-  int dbx_type;
-  int len;
-  int i = 0;
-  int bcnt = 0;
-  int Min_Offset = -1;         /* min PC of validity */
-  int Max_Offset = 0;          /* max PC of validity */
-
-  for (symbolP = sp; symbolP; symbolP = symbol_next (symbolP))
-    {
-      /* Dispatch on STAB type.  */
-      switch (S_GET_RAW_TYPE (symbolP))
-       {
-       case N_LBRAC:
-         if (bcnt++ == 0)
-           Min_Offset = S_GET_VALUE (symbolP);
-         break;
-       case N_RBRAC:
-         if (--bcnt == 0)
-           Max_Offset = S_GET_VALUE (symbolP) - 1;
-         break;
-       }
-      if ((Min_Offset != -1) && (bcnt == 0))
-       break;
-      if (S_GET_RAW_TYPE (symbolP) == N_FUN)
-       {
-         pnt = (char *) strchr (S_GET_NAME (symbolP), ':') + 1;
-         if (*pnt == 'F' || *pnt == 'f') break;
-       }
-    }
-
-  /* Check to see that the addresses were defined.  If not, then there
-     were no brackets in the function, and we must try to search for
-     the next function.  Since functions can be in any order, we should
-     search all of the symbol list to find the correct ending address.  */
-  if (Min_Offset == -1)
-    {
-      int Max_Source_Offset;
-      int This_Offset;
-
-      Min_Offset = S_GET_VALUE (sp);
-      Max_Source_Offset = Min_Offset;  /* just in case no N_SLINEs found */
-      for (symbolP = symbol_rootP; symbolP; symbolP = symbol_next (symbolP))
-       switch (S_GET_RAW_TYPE (symbolP))
-         {
-         case N_TEXT | N_EXT:
-           This_Offset = S_GET_VALUE (symbolP);
-           if (This_Offset > Min_Offset && This_Offset < Max_Offset)
-             Max_Offset = This_Offset;
-           break;
-         case N_SLINE:
-           This_Offset = S_GET_VALUE (symbolP);
-           if (This_Offset > Max_Source_Offset)
-             Max_Source_Offset = This_Offset;
-           break;
-         }
-      /* If this is the last routine, then we use the PC of the last source
-         line as a marker of the max PC for which this reg is valid.  */
-      if (Max_Offset == 0x7fffffff)
-       Max_Offset = Max_Source_Offset;
-    }
-
-  dbx_type = 0;
-  str = S_GET_NAME (sp);
-  if ((pnt = (char *) strchr (str, ':')) == 0)
-    return;                    /* no colon present */
-  pnt1 = pnt;                  /* save this for later*/
-  pnt++;
-  if (*pnt != 'r')
-    return;
-  pnt = cvt_integer (pnt + 1, &dbx_type);
-  spnt = find_symbol (dbx_type);
-  if (!spnt)
-    return;                    /*Dunno what this is yet*/
-  *pnt1 = '\0';
-  pnt = fix_name (S_GET_NAME (sp));    /* if there are bad characters in name, convert them */
-  len = strlen (pnt);
-  Local[i++] = 25 + len;
-  Local[i++] = spnt->VMS_type;
-  Local[i++] = DST_K_VFLAGS_TVS;       /* trailing value specified */
-  COPY_LONG (&Local[i], 1 + len);      /* relative offset, beyond name */
-  i += 4;
-  Local[i++] = len;                    /* name length (ascic prefix) */
-  while (*pnt != '\0')
-    Local[i++] = *pnt++;
-  Local[i++] = DST_K_VS_FOLLOWS;       /* value specification follows */
-  COPY_SHORT (&Local[i], 15);          /* length of rest of record */
-  i += 2;
-  Local[i++] = DST_K_VS_ALLOC_SPLIT;   /* split lifetime */
-  Local[i++] = 1;                      /* one binding follows */
-  VMS_Store_Immediate_Data (Local, i, OBJ_S_C_DBG);
-  i = 0;
-  VMS_Set_Data (Text_Psect, Min_Offset, OBJ_S_C_DBG, 1);
-  VMS_Set_Data (Text_Psect, Max_Offset, OBJ_S_C_DBG, 1);
-  Local[i++] = DST_K_VALKIND_REG;              /* nested value spec */
-  COPY_LONG (&Local[i], S_GET_VALUE (sp));
-  i += 4;
-  VMS_Store_Immediate_Data (Local, i, OBJ_S_C_DBG);
-  *pnt1 = ':';
-  if (spnt->VMS_type == DBG_S_C_ADVANCED_TYPE)
-    generate_suffix (spnt, 0);
-}
-
-/* This function examines a structure definition, checking all of the elements
-   to make sure that all of them are fully defined.  The only thing that we
-   kick out are arrays of undefined structs, since we do not know how big
-   they are.  All others we can handle with a normal forward reference.  */
-
-static int
-forward_reference (char *pnt)
-{
-  struct VMS_DBG_Symbol *spnt, *spnt1;
-  int i;
-
-  pnt = cvt_integer (pnt + 1, &i);
-  if (*pnt == ';')
-    return 0;                  /* no forward references */
-  do
-    {
-      pnt = (char *) strchr (pnt, ':');
-      pnt = cvt_integer (pnt + 1, &i);
-      spnt = find_symbol (i);
-      while (spnt && (spnt->advanced == POINTER || spnt->advanced == ARRAY))
-       {
-         spnt1 = find_symbol (spnt->type2);
-         if (spnt->advanced == ARRAY && !spnt1)
-           return 1;
-         spnt = spnt1;
-       }
-      pnt = cvt_integer (pnt + 1, &i);
-      pnt = cvt_integer (pnt + 1, &i);
-    } while (*++pnt != ';');
-  return 0;                    /* no forward references found */
-}
-
-/* Used to check a single element of a structure on the final pass.  */
-
-static int
-final_forward_reference (struct VMS_DBG_Symbol *spnt)
-{
-  struct VMS_DBG_Symbol *spnt1;
-
-  while (spnt && (spnt->advanced == POINTER || spnt->advanced == ARRAY))
-    {
-      spnt1 = find_symbol (spnt->type2);
-      if (spnt->advanced == ARRAY && !spnt1)
-       return 1;
-      spnt = spnt1;
-    }
-  return 0;    /* no forward references found */
-}
-
-/* This routine parses the stabs directives to find any definitions of dbx
-   type numbers.  It makes a note of all of them, creating a structure
-   element of VMS_DBG_Symbol that describes it.  This also generates the
-   info for the debugger that describes the struct/union/enum, so that
-   further references to these data types will be by number
-
-   We have to process pointers right away, since there can be references
-   to them later in the same stabs directive.  We cannot have forward
-   references to pointers, (but we can have a forward reference to a
-   pointer to a structure/enum/union) and this is why we process them
-   immediately.  After we process the pointer, then we search for defs
-   that are nested even deeper.
-
-   8/15/92: We have to process arrays right away too, because there can
-   be multiple references to identical array types in one structure
-   definition, and only the first one has the definition.  */
-
-static int
-VMS_typedef_parse (char *str)
-{
-  char *pnt;
-  char *pnt1;
-  const char *pnt2;
-  int i;
-  int dtype;
-  struct forward_ref *fpnt;
-  int i1, i2, i3, len;
-  struct VMS_DBG_Symbol *spnt;
-  struct VMS_DBG_Symbol *spnt1;
-
-  /* check for any nested def's */
-  pnt = (char *) strchr (str + 1, '=');
-  if (pnt && str[1] != '*' && (str[1] != 'a' || str[2] != 'r')
-      && VMS_typedef_parse (pnt) == 1)
-    return 1;
-  /* now find dbx_type of entry */
-  pnt = str - 1;
-  if (*pnt == 'c')
-    {                          /* check for static constants */
-      *str = '\0';             /* for now we ignore them */
-      return 0;
-    }
-  while ((*pnt <= '9') && (*pnt >= '0'))
-    pnt--;
-  pnt++;                       /* and get back to the number */
-  cvt_integer (pnt, &i1);
-  spnt = find_symbol (i1);
-  /* First see if this has been defined already, due to forward reference.  */
-  if (!spnt)
-    {
-      i2 = SYMTYP_HASH (i1);
-      spnt = xmalloc (sizeof (struct VMS_DBG_Symbol));
-      spnt->next = VMS_Symbol_type_list[i2];
-      VMS_Symbol_type_list[i2] = spnt;
-      spnt->dbx_type = i1;     /* and save the type */
-      spnt->type2 = spnt->VMS_type = spnt->data_size = 0;
-      spnt->index_min = spnt->index_max = spnt->struc_numb = 0;
-    }
-
-  /* For structs and unions, do a partial parse, otherwise we sometimes get
-     circular definitions that are impossible to resolve.  We read enough
-     info so that any reference to this type has enough info to be resolved.  */
-
-  /* Point to character past equal sign.  */
-  pnt = str + 1;
-
-  if (*pnt >= '0' && *pnt <= '9')
-    {
-      if (type_check ("void"))
-       {                       /* this is the void symbol */
-         *str = '\0';
-         spnt->advanced = VOID;
-         return 0;
-       }
-      if (type_check ("unknown type"))
-       {
-         *str = '\0';
-         spnt->advanced = UNKNOWN;
-         return 0;
-       }
-      pnt1 = cvt_integer (pnt, &i1);
-      if (i1 != spnt->dbx_type)
-       {
-         spnt->advanced = ALIAS;
-         spnt->type2 = i1;
-         strcpy (str, pnt1);
-         return 0;
-       }
-      as_tsktsk (_("debugginer output: %d is an unknown untyped variable."),
-                spnt->dbx_type);
-      return 1;                        /* do not know what this is */
-    }
-
-  /* Point to character past equal sign.  */
-  pnt = str + 1;
-
-  switch (*pnt)
-    {
-    case 'r':
-      spnt->advanced = BASIC;
-      if (type_check ("int"))
-       {
-         spnt->VMS_type = DBG_S_C_SLINT;
-         spnt->data_size = 4;
-       }
-      else if (type_check ("long int"))
-       {
-         spnt->VMS_type = DBG_S_C_SLINT;
-         spnt->data_size = 4;
-       }
-      else if (type_check ("unsigned int"))
-       {
-         spnt->VMS_type = DBG_S_C_ULINT;
-         spnt->data_size = 4;
-       }
-      else if (type_check ("long unsigned int"))
-       {
-         spnt->VMS_type = DBG_S_C_ULINT;
-         spnt->data_size = 4;
-       }
-      else if (type_check ("short int"))
-       {
-         spnt->VMS_type = DBG_S_C_SSINT;
-         spnt->data_size = 2;
-       }
-      else if (type_check ("short unsigned int"))
-       {
-         spnt->VMS_type = DBG_S_C_USINT;
-         spnt->data_size = 2;
-       }
-      else if (type_check ("char"))
-       {
-         spnt->VMS_type = DBG_S_C_SCHAR;
-         spnt->data_size = 1;
-       }
-      else if (type_check ("signed char"))
-       {
-         spnt->VMS_type = DBG_S_C_SCHAR;
-         spnt->data_size = 1;
-       }
-      else if (type_check ("unsigned char"))
-       {
-         spnt->VMS_type = DBG_S_C_UCHAR;
-         spnt->data_size = 1;
-       }
-      else if (type_check ("float"))
-       {
-         spnt->VMS_type = DBG_S_C_REAL4;
-         spnt->data_size = 4;
-       }
-      else if (type_check ("double"))
-       {
-         spnt->VMS_type = vax_g_doubles ? DBG_S_C_REAL8_G : DBG_S_C_REAL8;
-         spnt->data_size = 8;
-       }
-      else if (type_check ("long double"))
-       {
-         /* same as double, at least for now */
-         spnt->VMS_type = vax_g_doubles ? DBG_S_C_REAL8_G : DBG_S_C_REAL8;
-         spnt->data_size = 8;
-       }
-      else if (type_check ("long long int"))
-       {
-         spnt->VMS_type = DBG_S_C_SQUAD;       /* signed quadword */
-         spnt->data_size = 8;
-       }
-      else if (type_check ("long long unsigned int"))
-       {
-         spnt->VMS_type = DBG_S_C_UQUAD;       /* unsigned quadword */
-         spnt->data_size = 8;
-       }
-      else if (type_check ("complex float"))
-       {
-         spnt->VMS_type = DBG_S_C_COMPLX4;
-         spnt->data_size = 2 * 4;
-       }
-      else if (type_check ("complex double"))
-       {
-         spnt->VMS_type = vax_g_doubles ? DBG_S_C_COMPLX8_G : DBG_S_C_COMPLX8;
-         spnt->data_size = 2 * 8;
-       }
-      else if (type_check ("complex long double"))
-       {
-         /* same as complex double, at least for now */
-         spnt->VMS_type = vax_g_doubles ? DBG_S_C_COMPLX8_G : DBG_S_C_COMPLX8;
-         spnt->data_size = 2 * 8;
-       }
-      else
-       {
-         /* Shouldn't get here, but if we do, something
-            more substantial ought to be done...  */
-         spnt->VMS_type = 0;
-         spnt->data_size = 0;
-       }
-      if (spnt->VMS_type != 0)
-       setup_basic_type (spnt);
-      pnt1 = (char *) strchr (str, ';') + 1;
-      break;
-    case 's':
-    case 'u':
-      spnt->advanced = (*pnt == 's') ? STRUCT : UNION;
-      spnt->VMS_type = DBG_S_C_ADVANCED_TYPE;
-      pnt1 = cvt_integer (pnt + 1, &spnt->data_size);
-      if (!final_pass && forward_reference (pnt))
-       {
-         spnt->struc_numb = -1;
-         return 1;
-       }
-      spnt->struc_numb = ++structure_count;
-      pnt1--;
-      pnt = get_struct_name (str);
-      VMS_Def_Struct (spnt->struc_numb);
-      i = 0;
-      for (fpnt = f_ref_root; fpnt; fpnt = fpnt->next)
-       if (fpnt->dbx_type == spnt->dbx_type)
-         {
-           fpnt->resolved = 'Y';
-           VMS_Set_Struct (fpnt->struc_numb);
-           VMS_Store_Struct (spnt->struc_numb);
-           i++;
-         }
-      if (i > 0)
-       VMS_Set_Struct (spnt->struc_numb);
-      i = 0;
-      Local[i++] = 11 + strlen (pnt);
-      Local[i++] = DBG_S_C_STRUCT_START;
-      Local[i++] = DST_K_VFLAGS_NOVAL; /* structure definition only */
-      COPY_LONG (&Local[i], 0L);       /* hence value is unused */
-      i += 4;
-      Local[i++] = strlen (pnt);
-      pnt2 = pnt;
-      while (*pnt2 != '\0')
-       Local[i++] = *pnt2++;
-      i2 = spnt->data_size * 8;        /* number of bits */
-      COPY_LONG (&Local[i], i2);
-      i += 4;
-      VMS_Store_Immediate_Data (Local, i, OBJ_S_C_DBG);
-      i = 0;
-      if (pnt != symbol_name)
-       {
-         pnt += strlen (pnt);
-         /* Replace colon for later.  */
-         *pnt = ':';
-       }
-
-      while (*++pnt1 != ';')
-       {
-         pnt = (char *) strchr (pnt1, ':');
-         *pnt = '\0';
-         pnt2 = pnt1;
-         pnt1 = cvt_integer (pnt + 1, &dtype);
-         pnt1 = cvt_integer (pnt1 + 1, &i2);
-         pnt1 = cvt_integer (pnt1 + 1, &i3);
-         spnt1 = find_symbol (dtype);
-         len = strlen (pnt2);
-         if (spnt1 && (spnt1->advanced == BASIC || spnt1->advanced == ENUM)
-             && ((i3 != spnt1->data_size * 8) || (i2 % 8 != 0)))
-           {                   /* bitfield */
-             if (USE_BITSTRING_DESCRIPTOR (spnt1))
-               {
-                 /* This uses a type descriptor, which doesn't work if
-                    the enclosing structure has been placed in a register.
-                    Also, enum bitfields degenerate to simple integers.  */
-                 int unsigned_type = (spnt1->VMS_type == DBG_S_C_ULINT
-                                   || spnt1->VMS_type == DBG_S_C_USINT
-                                   || spnt1->VMS_type == DBG_S_C_UCHAR
-                                   || spnt1->VMS_type == DBG_S_C_UQUAD
-                                   || spnt1->advanced == ENUM);
-                 Apoint = 0;
-                 fpush (19 + len, 1);
-                 fpush (unsigned_type ? DBG_S_C_UBITU : DBG_S_C_SBITU, 1);
-                 fpush (DST_K_VFLAGS_DSC, 1);  /* specified by descriptor */
-                 fpush (1 + len, 4);   /* relative offset to descriptor */
-                 fpush (len, 1);               /* length byte (ascic prefix) */
-                 while (*pnt2 != '\0') /* name bytes */
-                   fpush (*pnt2++, 1);
-                 fpush (i3, 2);        /* dsc length == size of bitfield */
-                                       /* dsc type == un?signed bitfield */
-                 fpush (unsigned_type ? DBG_S_C_UBITU : DBG_S_C_SBITU, 1);
-                 fpush (DSC_K_CLASS_UBS, 1);   /* dsc class == unaligned bitstring */
-                 fpush (0x00, 4);              /* dsc pointer == zeroes */
-                 fpush (i2, 4);        /* start position */
-                 VMS_Store_Immediate_Data (Asuffix, Apoint, OBJ_S_C_DBG);
-                 Apoint = 0;
-               }
-             else
-               {
-                 /* Use a "novel length" type specification, which works
-                    right for register structures and for enum bitfields
-                    but results in larger object modules.  */
-                 Local[i++] = 7 + len;
-                 Local[i++] = DBG_S_C_ADVANCED_TYPE;   /* type spec follows */
-                 Local[i++] = DBG_S_C_STRUCT_ITEM;     /* value is a bit offset */
-                 COPY_LONG (&Local[i], i2);            /* bit offset */
-                 i += 4;
-                 Local[i++] = strlen (pnt2);
-                 while (*pnt2 != '\0')
-                   Local[i++] = *pnt2++;
-                 VMS_Store_Immediate_Data (Local, i, OBJ_S_C_DBG);
-                 i = 0;
-                 bitfield_suffix (spnt1, i3);
-            }
-           }
-         else /* Not a bitfield.  */
-           {
-             /* Check if this is a forward reference.  */
-             if (final_pass && final_forward_reference (spnt1))
-               {
-                 as_tsktsk (_("debugger output: structure element `%s' has undefined type"),
-                          pnt2);
-                 continue;
-               }
-             Local[i++] = 7 + len;
-             Local[i++] = spnt1 ? spnt1->VMS_type : DBG_S_C_ADVANCED_TYPE;
-             Local[i++] = DBG_S_C_STRUCT_ITEM;
-             COPY_LONG (&Local[i], i2);                /* bit offset */
-             i += 4;
-             Local[i++] = strlen (pnt2);
-             while (*pnt2 != '\0')
-               Local[i++] = *pnt2++;
-             VMS_Store_Immediate_Data (Local, i, OBJ_S_C_DBG);
-             i = 0;
-             if (!spnt1)
-               generate_suffix (spnt1, dtype);
-             else if (spnt1->VMS_type == DBG_S_C_ADVANCED_TYPE)
-               generate_suffix (spnt1, 0);
-           }
-       }
-      pnt1++;
-      Local[i++] = 0x01;       /* length byte */
-      Local[i++] = DBG_S_C_STRUCT_END;
-      VMS_Store_Immediate_Data (Local, i, OBJ_S_C_DBG);
-      i = 0;
-      break;
-    case 'e':
-      spnt->advanced = ENUM;
-      spnt->VMS_type = DBG_S_C_ADVANCED_TYPE;
-      spnt->struc_numb = ++structure_count;
-      spnt->data_size = 4;
-      VMS_Def_Struct (spnt->struc_numb);
-      i = 0;
-      for (fpnt = f_ref_root; fpnt; fpnt = fpnt->next)
-       if (fpnt->dbx_type == spnt->dbx_type)
-         {
-           fpnt->resolved = 'Y';
-           VMS_Set_Struct (fpnt->struc_numb);
-           VMS_Store_Struct (spnt->struc_numb);
-           i++;
-         }
-      if (i > 0)
-       VMS_Set_Struct (spnt->struc_numb);
-      i = 0;
-      len = strlen (symbol_name);
-      Local[i++] = 3 + len;
-      Local[i++] = DBG_S_C_ENUM_START;
-      Local[i++] = 4 * 8;              /* enum values are 32 bits */
-      Local[i++] = len;
-      pnt2 = symbol_name;
-      while (*pnt2 != '\0')
-       Local[i++] = *pnt2++;
-      VMS_Store_Immediate_Data (Local, i, OBJ_S_C_DBG);
-      i = 0;
-      while (*++pnt != ';')
-       {
-         pnt1 = (char *) strchr (pnt, ':');
-         *pnt1++ = '\0';
-         pnt1 = cvt_integer (pnt1, &i1);
-         len = strlen (pnt);
-         Local[i++] = 7 + len;
-         Local[i++] = DBG_S_C_ENUM_ITEM;
-         Local[i++] = DST_K_VALKIND_LITERAL;
-         COPY_LONG (&Local[i], i1);
-         i += 4;
-         Local[i++] = len;
-         pnt2 = pnt;
-         while (*pnt != '\0')
-           Local[i++] = *pnt++;
-         VMS_Store_Immediate_Data (Local, i, OBJ_S_C_DBG);
-         i = 0;
-         pnt = pnt1;           /* Skip final semicolon */
-       }
-      Local[i++] = 0x01;       /* len byte */
-      Local[i++] = DBG_S_C_ENUM_END;
-      VMS_Store_Immediate_Data (Local, i, OBJ_S_C_DBG);
-      i = 0;
-      pnt1 = pnt + 1;
-      break;
-    case 'a':
-      spnt->advanced = ARRAY;
-      spnt->VMS_type = DBG_S_C_ADVANCED_TYPE;
-      pnt = (char *) strchr (pnt, ';');
-      if (!pnt)
-       return 1;
-      pnt1 = cvt_integer (pnt + 1, &spnt->index_min);
-      pnt1 = cvt_integer (pnt1 + 1, &spnt->index_max);
-      pnt1 = cvt_integer (pnt1 + 1, &spnt->type2);
-      pnt = (char *) strchr (str + 1, '=');
-      if (pnt && VMS_typedef_parse (pnt) == 1)
-       return 1;
-      break;
-    case 'f':
-      spnt->advanced = FUNCTION;
-      spnt->VMS_type = DBG_S_C_FUNCTION_ADDR;
-      /* this masquerades as a basic type*/
-      spnt->data_size = 4;
-      pnt1 = cvt_integer (pnt + 1, &spnt->type2);
-      break;
-    case '*':
-      spnt->advanced = POINTER;
-      spnt->VMS_type = DBG_S_C_ADVANCED_TYPE;
-      spnt->data_size = 4;
-      pnt1 = cvt_integer (pnt + 1, &spnt->type2);
-      pnt = (char *) strchr (str + 1, '=');
-      if (pnt && VMS_typedef_parse (pnt) == 1)
-       return 1;
-      break;
-    default:
-      spnt->advanced = UNKNOWN;
-      spnt->VMS_type = 0;
-      as_tsktsk (_("debugger output: %d is an unknown type of variable."),
-                spnt->dbx_type);
-      return 1;                        /* unable to decipher */
-    }
-  /* This removes the evidence of the definition so that the outer levels
-     of parsing do not have to worry about it.  */
-  pnt = str;
-  while (*pnt1 != '\0')
-    *pnt++ = *pnt1++;
-  *pnt = '\0';
-  return 0;
-}
-
-/* This is the root routine that parses the stabs entries for definitions.
-   it calls VMS_typedef_parse, which can in turn call itself.  We need to
-   be careful, since sometimes there are forward references to other symbol
-   types, and these cannot be resolved until we have completed the parse.
-
-   Also check and see if we are using continuation stabs, if we are, then
-   paste together the entire contents of the stab before we pass it to
-   VMS_typedef_parse.  */
-
-static void
-VMS_LSYM_Parse (void)
-{
-  char *pnt;
-  char *pnt1;
-  char *pnt2;
-  char *str;
-  char *parse_buffer = 0;
-  char fixit[10];
-  int incomplete, pass, incom1;
-  struct forward_ref *fpnt;
-  symbolS *sp;
-
-  pass = 0;
-  final_pass = 0;
-  incomplete = 0;
-  do
-    {
-      incom1 = incomplete;
-      incomplete = 0;
-      for (sp = symbol_rootP; sp; sp = symbol_next (sp))
-       {
-         /* Deal with STAB symbols.  */
-         if (S_IS_DEBUG (sp))
-           {
-             /* Dispatch on STAB type.  */
-             switch (S_GET_RAW_TYPE (sp))
-               {
-               case N_GSYM:
-               case N_LCSYM:
-               case N_STSYM:
-               case N_PSYM:
-               case N_RSYM:
-               case N_LSYM:
-               case N_FUN:     /* Sometimes these contain typedefs. */
-                 str = S_GET_NAME (sp);
-                 symbol_name = str;
-                 pnt = str + strlen (str) - 1;
-                 if (*pnt == '?')  /* Continuation stab.  */
-                   {
-                     symbolS *spnext;
-                     int tlen = 0;
-
-                     spnext = sp;
-                     do
-                       {
-                         tlen += strlen (str) - 1;
-                         spnext = symbol_next (spnext);
-                         str = S_GET_NAME (spnext);
-                         pnt = str + strlen (str) - 1;
-                       }
-                     while (*pnt == '?');
-
-                     tlen += strlen (str);
-                     parse_buffer = xmalloc (tlen + 1);
-                     strcpy (parse_buffer, S_GET_NAME (sp));
-                     pnt2 = parse_buffer + strlen (parse_buffer) - 1;
-                     *pnt2 = '\0';
-                     spnext = sp;
-
-                     do
-                       {
-                         spnext = symbol_next (spnext);
-                         str = S_GET_NAME (spnext);
-                         strcat (pnt2, str);
-                         pnt2 +=  strlen (str) - 1;
-                         *str = '\0';  /* Erase this string  */
-                         /* S_SET_NAME (spnext, str); */
-                         if (*pnt2 != '?') break;
-                         *pnt2 = '\0';
-                       }
-                     while (1);
-
-                     str = parse_buffer;
-                     symbol_name = str;
-                   }
-
-                 if ((pnt = (char *) strchr (str, ':')) != 0)
-                   {
-                     *pnt = '\0';
-                     pnt1 = pnt + 1;
-                     if ((pnt2 = (char *) strchr (pnt1, '=')) != 0)
-                       incomplete += VMS_typedef_parse (pnt2);
-                     if (parse_buffer)
-                       {
-                         /*  At this point the parse buffer should just
-                             contain name:nn.  If it does not, then we
-                             are in real trouble.  Anyway, this is always
-                             shorter than the original line.  */
-                         pnt2 = S_GET_NAME (sp);
-                         strcpy (pnt2, parse_buffer);
-                         /* S_SET_NAME (sp, pnt2); */
-                         free (parse_buffer),  parse_buffer = 0;
-                       }
-                     /* Put back colon to restore dbx_type.  */
-                     *pnt = ':';
-                   }
-                 break;
-               }
-           }
-       }
-      pass++;
-
-      /* Make one last pass, if needed, and define whatever we can
-         that is left.  */
-      if (final_pass == 0 && incomplete == incom1)
-       {
-         final_pass = 1;
-         incom1++;     /* Force one last pass through.  */
-       }
-    }
-  while (incomplete != 0 && incomplete != incom1);
-
-  if (incomplete != 0)
-    as_tsktsk (_("debugger output: Unable to resolve %d circular references."),
-              incomplete);
-
-  fpnt = f_ref_root;
-  symbol_name = "\0";
-  while (fpnt)
-    {
-      if (fpnt->resolved != 'Y')
-       {
-         if (find_symbol (fpnt->dbx_type))
-           {
-             as_tsktsk (_("debugger forward reference error, dbx type %d"),
-                        fpnt->dbx_type);
-             break;
-           }
-         fixit[0] = 0;
-         sprintf (&fixit[1], "%d=s4;", fpnt->dbx_type);
-         pnt2 = (char *) strchr (&fixit[1], '=');
-         VMS_typedef_parse (pnt2);
-       }
-      fpnt = fpnt->next;
-    }
-}
-
-static void
-Define_Local_Symbols (symbolS *s0P, symbolS *s2P, symbolS *Current_Routine,
-                     int Text_Psect)
-{
-  symbolS *s1P;                /* Each symbol from s0P .. s2P (exclusive).  */
-
-  for (s1P = symbol_next (s0P); s1P != s2P; s1P = symbol_next (s1P))
-    {
-      if (!s1P)
-       break;          /* and return */
-      if (S_GET_RAW_TYPE (s1P) == N_FUN)
-       {
-         char *pnt = (char *) strchr (S_GET_NAME (s1P), ':') + 1;
-         if (*pnt == 'F' || *pnt == 'f') break;
-       }
-      if (!S_IS_DEBUG (s1P))
-       continue;
-      /* Dispatch on STAB type.  */
-      switch (S_GET_RAW_TYPE (s1P))
-       {
-       default:
-         /* Not left or right brace.  */
-         continue;
-
-       case N_LSYM:
-       case N_PSYM:
-         VMS_local_stab_Parse (s1P);
-         break;
-
-       case N_RSYM:
-         VMS_RSYM_Parse (s1P, Current_Routine, Text_Psect);
-         break;
-       }
-    }
-}
-
-/* This function crawls the symbol chain searching for local symbols that
-   need to be described to the debugger.  When we enter a new scope with
-   a "{", it creates a new "block", which helps the debugger keep track
-   of which scope we are currently in.  */
-
-static symbolS *
-Define_Routine (symbolS *s0P, int Level, symbolS *Current_Routine,
-               int Text_Psect)
-{
-  symbolS *s1P;
-  valueT Offset;
-  int rcount = 0;
-
-  for (s1P = symbol_next (s0P); s1P != 0; s1P = symbol_next (s1P))
-    {
-      if (S_GET_RAW_TYPE (s1P) == N_FUN)
-       {
-         char *pnt = (char *) strchr (S_GET_NAME (s1P), ':') + 1;
-         if (*pnt == 'F' || *pnt == 'f') break;
-       }
-      if (!S_IS_DEBUG (s1P))
-       continue;
-      /* Dispatch on STAB type.  */
-      switch (S_GET_RAW_TYPE (s1P))
-       {
-       default:
-         continue;
-
-       case N_LBRAC:
-         if (Level != 0)
-           {
-             char str[10];
-             sprintf (str, "$%d", rcount++);
-             VMS_TBT_Block_Begin (s1P, Text_Psect, str);
-           }
-         /* Side-effect: fully resolve symbol.  */
-         Offset = S_GET_VALUE (s1P);
-         Define_Local_Symbols (s0P, s1P, Current_Routine, Text_Psect);
-         s1P = Define_Routine (s1P, Level + 1, Current_Routine, Text_Psect);
-         if (Level != 0)
-           VMS_TBT_Block_End (S_GET_VALUE (s1P) - Offset);
-         s0P = s1P;
-         break;
-
-       case N_RBRAC:
-         return s1P;
-       }
-    }
-
-  /* We end up here if there were no brackets in this function.
-     Define everything.  */
-  Define_Local_Symbols (s0P, (symbolS *)0, Current_Routine, Text_Psect);
-  return s1P;
-}
-\f
-
-#ifndef VMS
-#include <sys/types.h>
-#include <time.h>
-static void get_VMS_time_on_unix (char *);
-
-/* Manufacture a VMS-like time string on a Unix based system.  */
-static void
-get_VMS_time_on_unix (char *Now)
-{
-  char *pnt;
-  time_t timeb;
-
-  time (&timeb);
-  pnt = ctime (&timeb);
-  pnt[3] = 0;
-  pnt[7] = 0;
-  pnt[10] = 0;
-  pnt[16] = 0;
-  pnt[24] = 0;
-  sprintf (Now, "%2s-%3s-%s %s", pnt + 8, pnt + 4, pnt + 20, pnt + 11);
-}
-#endif /* not VMS */
-
-/* Write the MHD (Module Header) records.  */
-
-static void
-Write_VMS_MHD_Records (void)
-{
-  const char *cp;
-  char *cp1;
-  int i;
-#ifdef VMS
-  struct { unsigned short len, mbz; char *ptr; } Descriptor;
-#endif
-  char Now[17+1];
-
-  /* We are writing a module header record.  */
-  Set_VMS_Object_File_Record (OBJ_S_C_HDR);
-  /* MAIN MODULE HEADER RECORD.  */
-  /* Store record type and header type.  */
-  PUT_CHAR (OBJ_S_C_HDR);
-  PUT_CHAR (MHD_S_C_MHD);
-  /* Structure level is 0.  */
-  PUT_CHAR (OBJ_S_C_STRLVL);
-  /* Maximum record size is size of the object record buffer.  */
-  PUT_SHORT (sizeof (Object_Record_Buffer));
-
-  /* FIXME:  module name and version should be user
-            specifiable via `.ident' and/or `#pragma ident'.  */
-
-  /* Get module name (the FILENAME part of the object file).  */
-  cp = out_file_name;
-  cp1 = Module_Name;
-  while (*cp)
-    {
-      if (*cp == ']' || *cp == '>' || *cp == ':' || *cp == '/')
-       {
-         cp1 = Module_Name;
-         cp++;
-         continue;
-       }
-      *cp1++ = TOUPPER (*cp++);
-    }
-  *cp1 = '\0';
-
-  /* Limit it to 31 characters and store in the object record.  */
-  while (--cp1 >= Module_Name)
-    if (*cp1 == '.')
-      *cp1 = '\0';
-  if (strlen (Module_Name) > 31)
-    {
-      if (flag_hash_long_names)
-       as_tsktsk (_("Module name truncated: %s\n"), Module_Name);
-      Module_Name[31] = '\0';
-    }
-  PUT_COUNTED_STRING (Module_Name);
-  /* Module Version is "V1.0".  */
-  PUT_COUNTED_STRING ("V1.0");
-  /* Creation time is "now" (17 chars of time string): "dd-MMM-yyyy hh:mm".  */
-#ifndef VMS
-  get_VMS_time_on_unix (Now);
-#else /* VMS */
-  Descriptor.len = sizeof Now - 1;
-  Descriptor.mbz = 0;          /* type & class unspecified */
-  Descriptor.ptr = Now;
-  (void) sys$asctim ((unsigned short *)0, &Descriptor, (long *)0, 0);
-#endif /* VMS */
-  for (i = 0; i < 17; i++)
-    PUT_CHAR (Now[i]);
-  /* Patch time is "never" (17 zeros).  */
-  for (i = 0; i < 17; i++)
-    PUT_CHAR (0);
-  /* Force this to be a separate output record.  */
-  Flush_VMS_Object_Record_Buffer ();
-
-  /* LANGUAGE PROCESSOR NAME.  */
-
-  /* Store record type and header type.  */
-  PUT_CHAR (OBJ_S_C_HDR);
-  PUT_CHAR (MHD_S_C_LNM);
-
-  /* Store language processor name and version (not a counted string!).
-     This is normally supplied by the gcc driver for the command line
-     which invokes gas.  If absent, we fall back to gas's version.  */
-  
-  cp = compiler_version_string;
-  if (cp == 0)
-    {
-      cp = "GNU AS  V";
-      while (*cp)
-       PUT_CHAR (*cp++);
-      cp = VERSION;
-    }
-  while (*cp >= ' ')
-    PUT_CHAR (*cp++);
-  /* Force this to be a separate output record.  */
-  Flush_VMS_Object_Record_Buffer ();
-}
-
-/* Write the EOM (End Of Module) record.  */
-
-static void
-Write_VMS_EOM_Record (int Psect, valueT Offset)
-{
-  /* We are writing an end-of-module record
-     (this assumes that the entry point will always be in a psect
-     represented by a single byte, which is the case for code in
-     Text_Psect==0).  */
-  
-  Set_VMS_Object_File_Record (OBJ_S_C_EOM);
-  PUT_CHAR (OBJ_S_C_EOM);      /* Record type.  */
-  PUT_CHAR (0);                        /* Error severity level (we ignore it).  */
-  /* Store the entry point, if it exists.  */
-  if (Psect >= 0)
-    {
-      PUT_CHAR (Psect);
-      PUT_LONG (Offset);
-    }
-  /* Flush the record; this will be our final output.  */
-  Flush_VMS_Object_Record_Buffer ();
-}
-\f
-
-/* This hash routine borrowed from GNU-EMACS, and strengthened slightly
-   ERY.  */
-
-static int
-hash_string (const char *ptr)
-{
-  const unsigned char *p = (unsigned char *) ptr;
-  const unsigned char *end = p + strlen (ptr);
-  unsigned char c;
-  int hash = 0;
-
-  while (p != end)
-    {
-      c = *p++;
-      hash = ((hash << 3) + (hash << 15) + (hash >> 28) + c);
-    }
-  return hash;
-}
-
-/* Generate a Case-Hacked VMS symbol name (limited to 31 chars).  */
-
-static void
-VMS_Case_Hack_Symbol (const char *In, char *Out)
-{
-  long int init;
-  long int result;
-  char *pnt = 0;
-  char *new_name;
-  const char *old_name;
-  int i;
-  int destructor = 0;          /* Hack to allow for case sens in a destructor.  */
-  int truncate = 0;
-  int Case_Hack_Bits = 0;
-  int Saw_Dollar = 0;
-  static char Hex_Table[16] =
-  {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};
-
-  /* Kill any leading "_".  */
-  if ((In[0] == '_') && ((In[1] > '9') || (In[1] < '0')))
-    In++;
-
-  new_name = Out;              /* Save this for later.  */
-
-  /* We may need to truncate the symbol, save the hash for later.  */
-  result = (strlen (In) > 23) ? hash_string (In) : 0;
-  /* Is there a Psect Attribute to skip?  */
-  if (HAS_PSECT_ATTRIBUTES (In))
-    {
-      /* Yes: Skip it.  */
-      In += PSECT_ATTRIBUTES_STRING_LENGTH;
-      while (*In)
-       {
-         if ((In[0] == '$') && (In[1] == '$'))
-           {
-             In += 2;
-             break;
-           }
-         In++;
-       }
-    }
-
-  old_name = In;
-  /* Do the case conversion.  */
-  /* Maximum of 23 chars */
-  i = 23;
-  while (*In && (--i >= 0))
-    {
-      Case_Hack_Bits <<= 1;
-      if (*In == '$')
-       Saw_Dollar = 1;
-      if ((destructor == 1) && (i == 21))
-       Saw_Dollar = 0;
-
-      switch (vms_name_mapping)
-       {
-       case 0:
-         if (ISUPPER (*In))
-           {
-             *Out++ = *In++;
-             Case_Hack_Bits |= 1;
-           }
-         else
-           *Out++ = TOUPPER (*In++);
-         break;
-
-       case 3:
-         *Out++ = *In++;
-         break;
-
-       case 2:
-         if (ISLOWER (*In))
-           *Out++ = *In++;
-         else
-           *Out++ = TOLOWER (*In++);
-         break;
-       }
-    }
-  /* If we saw a dollar sign, we don't do case hacking.  */
-  if (flag_no_hash_mixed_case || Saw_Dollar)
-    Case_Hack_Bits = 0;
-
-  /* If we have more than 23 characters and everything is lowercase
-     we can insert the full 31 characters.  */
-  if (*In)
-    {
-      /* We have more than 23 characters
-         If we must add the case hack, then we have truncated the str.  */
-      pnt = Out;
-      truncate = 1;
-      if (Case_Hack_Bits == 0)
-       {
-         /* And so far they are all lower case:
-            Check up to 8 more characters
-            and ensure that they are lowercase.  */
-         for (i = 0; (In[i] != 0) && (i < 8); i++)
-           if (ISUPPER (In[i]) && !Saw_Dollar && !flag_no_hash_mixed_case)
-             break;
-
-         if (In[i] == 0)
-           truncate = 0;
-
-         if ((i == 8) || (In[i] == 0))
-           {
-             /* They are:  Copy up to 31 characters
-                to the output string.  */
-             i = 8;
-             while ((--i >= 0) && (*In))
-               switch (vms_name_mapping){
-               case 0: *Out++ = TOUPPER (*In++);
-                 break;
-               case 3: *Out++ = *In++;
-                 break;
-               case 2: *Out++ = TOLOWER (*In++);
-                 break;
-               }
-           }
-       }
-    }
-  /* If there were any uppercase characters in the name we
-     take on the case hacking string.  */
-
-  /* Old behavior for regular GNU-C compiler.  */
-  if (!flag_hash_long_names)
-    truncate = 0;
-  if ((Case_Hack_Bits != 0) || (truncate == 1))
-    {
-      if (truncate == 0)
-       {
-         *Out++ = '_';
-         for (i = 0; i < 6; i++)
-           {
-             *Out++ = Hex_Table[Case_Hack_Bits & 0xf];
-             Case_Hack_Bits >>= 4;
-           }
-         *Out++ = 'X';
-       }
-      else
-       {
-         Out = pnt;            /* Cut back to 23 characters maximum.  */
-         *Out++ = '_';
-         for (i = 0; i < 7; i++)
-           {
-             init = result & 0x01f;
-             *Out++ = (init < 10) ? ('0' + init) : ('A' + init - 10);
-             result = result >> 5;
-           }
-       }
-    }
-  /* Done.  */
-  *Out = 0;
-  if (truncate == 1 && flag_hash_long_names && flag_show_after_trunc)
-    as_tsktsk (_("Symbol %s replaced by %s\n"), old_name, new_name);
-}
-\f
-
-/* Scan a symbol name for a psect attribute specification.  */
-
-#define GLOBALSYMBOL_BIT       0x10000
-#define GLOBALVALUE_BIT                0x20000
-
-static void
-VMS_Modify_Psect_Attributes (const char *Name, int *Attribute_Pointer)
-{
-  int i;
-  const char *cp;
-  int Negate;
-  static const struct
-  {
-    const char *Name;
-    int Value;
-  } Attributes[] =
-  {
-    {"PIC", GPS_S_M_PIC},
-    {"LIB", GPS_S_M_LIB},
-    {"OVR", GPS_S_M_OVR},
-    {"REL", GPS_S_M_REL},
-    {"GBL", GPS_S_M_GBL},
-    {"SHR", GPS_S_M_SHR},
-    {"EXE", GPS_S_M_EXE},
-    {"RD", GPS_S_M_RD},
-    {"WRT", GPS_S_M_WRT},
-    {"VEC", GPS_S_M_VEC},
-    {"GLOBALSYMBOL", GLOBALSYMBOL_BIT},
-    {"GLOBALVALUE", GLOBALVALUE_BIT},
-    {0, 0}
-  };
-
-  /* Kill leading "_".  */
-  if (*Name == '_')
-    Name++;
-  /* Check for a PSECT attribute list.  */
-  if (!HAS_PSECT_ATTRIBUTES (Name))
-    return;
-  /* Skip the attribute list indicator.  */
-  Name += PSECT_ATTRIBUTES_STRING_LENGTH;
-  /* Process the attributes ("_" separated, "$" terminated).  */
-  while (*Name != '$')
-    {
-      /* Assume not negating.  */
-      Negate = 0;
-      /* Check for "NO".  */
-      if ((Name[0] == 'N') && (Name[1] == 'O'))
-       {
-         /* We are negating (and skip the NO).  */
-         Negate = 1;
-         Name += 2;
-       }
-      /* Find the token delimiter.  */
-      cp = Name;
-      while (*cp && (*cp != '_') && (*cp != '$'))
-       cp++;
-      /* Look for the token in the attribute list.  */
-      for (i = 0; Attributes[i].Name; i++)
-       {
-         /* If the strings match, set/clear the attr.  */
-         if (strncmp (Name, Attributes[i].Name, cp - Name) == 0)
-           {
-             /* Set or clear.  */
-             if (Negate)
-               *Attribute_Pointer &=
-                 ~Attributes[i].Value;
-             else
-               *Attribute_Pointer |=
-                 Attributes[i].Value;
-             /* Done.  */
-             break;
-           }
-       }
-      /* Now skip the attribute.  */
-      Name = cp;
-      if (*Name == '_')
-       Name++;
-    }
-}
-\f
-
-#define GBLSYM_REF 0
-#define GBLSYM_DEF 1
-#define GBLSYM_VAL 2
-#define GBLSYM_LCL 4   /* not GBL after all...  */
-#define GBLSYM_WEAK 8
-
-/* Define a global symbol (or possibly a local one).  */
-
-static void
-VMS_Global_Symbol_Spec (const char *Name, int Psect_Number, int Psect_Offset, int Flags)
-{
-  char Local[32];
-
-  /* We are writing a GSD record.  */
-  Set_VMS_Object_File_Record (OBJ_S_C_GSD);
-
-  /* If the buffer is empty we must insert the GSD record type.  */
-  if (Object_Record_Offset == 0)
-    PUT_CHAR (OBJ_S_C_GSD);
-
-  /* We are writing a Global (or local) symbol definition subrecord.  */
-  PUT_CHAR ((Flags & GBLSYM_LCL) != 0 ? GSD_S_C_LSY :
-           ((unsigned) Psect_Number <= 255) ? GSD_S_C_SYM : GSD_S_C_SYMW);
-
-  /* Data type is undefined.  */
-  PUT_CHAR (0);
-
-  /* Switch on Definition/Reference.  */
-  if ((Flags & GBLSYM_DEF) == 0)
-    {
-      /* Reference.  */
-      PUT_SHORT (((Flags & GBLSYM_VAL) == 0) ? GSY_S_M_REL : 0);
-      if ((Flags & GBLSYM_LCL) != 0)   /* local symbols have extra field */
-       PUT_SHORT (Current_Environment);
-    }
-  else
-    {
-      int sym_flags;
-
-      /* Definition
-         [ assert (LSY_S_M_DEF == GSY_S_M_DEF && LSY_S_M_REL == GSY_S_M_REL); ].  */
-      sym_flags = GSY_S_M_DEF;
-      if (Flags & GBLSYM_WEAK)
-       sym_flags |= GSY_S_M_WEAK;
-      if ((Flags & GBLSYM_VAL) == 0)
-       sym_flags |= GSY_S_M_REL;
-      PUT_SHORT (sym_flags);
-      if ((Flags & GBLSYM_LCL) != 0)   /* local symbols have extra field */
-       PUT_SHORT (Current_Environment);
-
-      /* Psect Number.  */
-      if ((Flags & GBLSYM_LCL) == 0 && (unsigned) Psect_Number <= 255)
-       PUT_CHAR (Psect_Number);
-      else
-       PUT_SHORT (Psect_Number);
-
-      /* Offset.  */
-      PUT_LONG (Psect_Offset);
-    }
-
-  /* Finally, the global symbol name.  */
-  VMS_Case_Hack_Symbol (Name, Local);
-  PUT_COUNTED_STRING (Local);
-
-  /* Flush the buffer if it is more than 75% full.  */
-  if (Object_Record_Offset > (sizeof (Object_Record_Buffer) * 3 / 4))
-    Flush_VMS_Object_Record_Buffer ();
-}
-
-/* Define an environment to support local symbol references.
-   This is just to mollify the linker; we don't actually do
-   anything useful with it.  */
-
-static void
-VMS_Local_Environment_Setup (const char *Env_Name)
-{
-  /* We are writing a GSD record.  */
-  Set_VMS_Object_File_Record (OBJ_S_C_GSD);
-  /* If the buffer is empty we must insert the GSD record type.  */
-  if (Object_Record_Offset == 0)
-    PUT_CHAR (OBJ_S_C_GSD);
-  /* We are writing an ENV subrecord.  */
-  PUT_CHAR (GSD_S_C_ENV);
-
-  ++Current_Environment;       /* index of environment being defined */
-
-  /* ENV$W_FLAGS:  we are defining the next environment.  It's not nested.  */
-  PUT_SHORT (ENV_S_M_DEF);
-  /* ENV$W_ENVINDX:  index is always 0 for non-nested definitions.  */
-  PUT_SHORT (0);
-
-  /* ENV$B_NAMLNG + ENV$T_NAME:  environment name in ASCIC format.  */
-  if (!Env_Name) Env_Name = "";
-  PUT_COUNTED_STRING ((char *)Env_Name);
-
-  /* Flush the buffer if it is more than 75% full.  */
-  if (Object_Record_Offset > (sizeof (Object_Record_Buffer) * 3 / 4))
-    Flush_VMS_Object_Record_Buffer ();
-}
-\f
-
-/* Define a psect.  */
-
-static int
-VMS_Psect_Spec (const char *Name, int Size, enum ps_type Type, struct VMS_Symbol *vsp)
-{
-  char Local[32];
-  int Psect_Attributes;
-
-  /* Generate the appropriate PSECT flags given the PSECT type.  */
-  switch (Type)
-    {
-    case ps_TEXT:
-      /* Text psects are PIC,noOVR,REL,noGBL,SHR,EXE,RD,noWRT.  */
-      Psect_Attributes = (GPS_S_M_PIC|GPS_S_M_REL|GPS_S_M_SHR|GPS_S_M_EXE
-                         |GPS_S_M_RD);
-      break;
-    case ps_DATA:
-      /* Data psects are PIC,noOVR,REL,noGBL,noSHR,noEXE,RD,WRT.  */
-      Psect_Attributes = (GPS_S_M_PIC|GPS_S_M_REL|GPS_S_M_RD|GPS_S_M_WRT);
-      break;
-    case ps_COMMON:
-      /* Common block psects are:  PIC,OVR,REL,GBL,noSHR,noEXE,RD,WRT.  */
-      Psect_Attributes = (GPS_S_M_PIC|GPS_S_M_OVR|GPS_S_M_REL|GPS_S_M_GBL
-                         |GPS_S_M_RD|GPS_S_M_WRT);
-      break;
-    case ps_CONST:
-      /* Const data psects are:  PIC,OVR,REL,GBL,noSHR,noEXE,RD,noWRT.  */
-      Psect_Attributes = (GPS_S_M_PIC|GPS_S_M_OVR|GPS_S_M_REL|GPS_S_M_GBL
-                         |GPS_S_M_RD);
-      break;
-    case ps_CTORS:
-      /* Ctor psects are PIC,noOVR,REL,GBL,noSHR,noEXE,RD,noWRT.  */
-      Psect_Attributes = (GPS_S_M_PIC|GPS_S_M_REL|GPS_S_M_GBL|GPS_S_M_RD);
-      break;
-    case ps_DTORS:
-      /* Dtor psects are PIC,noOVR,REL,GBL,noSHR,noEXE,RD,noWRT.  */
-      Psect_Attributes = (GPS_S_M_PIC|GPS_S_M_REL|GPS_S_M_GBL|GPS_S_M_RD);
-      break;
-    default:
-      /* impossible */
-      error (_("Unknown VMS psect type (%ld)"), (long) Type);
-      break;
-    }
-  /* Modify the psect attributes according to any attribute string.  */
-  if (vsp && S_GET_TYPE (vsp->Symbol) == N_ABS)
-    Psect_Attributes |= GLOBALVALUE_BIT;
-  else if (HAS_PSECT_ATTRIBUTES (Name))
-    VMS_Modify_Psect_Attributes (Name, &Psect_Attributes);
-  /* Check for globalref/def/val.  */
-  if ((Psect_Attributes & GLOBALVALUE_BIT) != 0)
-    {
-      /* globalvalue symbols were generated before. This code
-         prevents unsightly psect buildup, and makes sure that
-         fixup references are emitted correctly.  */
-      vsp->Psect_Index = -1;   /* to catch errors */
-      S_SET_TYPE (vsp->Symbol, N_UNDF);                /* make refs work */
-      return 1;                        /* decrement psect counter */
-    }
-
-  if ((Psect_Attributes & GLOBALSYMBOL_BIT) != 0)
-    {
-      switch (S_GET_RAW_TYPE (vsp->Symbol))
-       {
-       case N_UNDF | N_EXT:
-         VMS_Global_Symbol_Spec (Name, vsp->Psect_Index,
-                                 vsp->Psect_Offset, GBLSYM_REF);
-         vsp->Psect_Index = -1;
-         S_SET_TYPE (vsp->Symbol, N_UNDF);
-         /* Return and indicate no psect.  */
-         return 1;
-         
-       case N_DATA | N_EXT:
-         VMS_Global_Symbol_Spec (Name, vsp->Psect_Index,
-                                 vsp->Psect_Offset, GBLSYM_DEF);
-         /* In this case we still generate the psect. */
-         break;
-         
-       default:
-         as_fatal (_("Globalsymbol attribute for symbol %s was unexpected."),
-                   Name);
-         break;
-       }
-    }
-
-  /* Clear out the globalref/def stuff.  */
-  Psect_Attributes &= 0xffff;
-  /* We are writing a GSD record.  */
-  Set_VMS_Object_File_Record (OBJ_S_C_GSD);
-  /* If the buffer is empty we must insert the GSD record type.  */
-  if (Object_Record_Offset == 0)
-    PUT_CHAR (OBJ_S_C_GSD);
-  /* We are writing a PSECT definition subrecord.  */
-  PUT_CHAR (GSD_S_C_PSC);
-  /* Psects are always LONGWORD aligned.  */
-  PUT_CHAR (2);
-  /* Specify the psect attributes.  */
-  PUT_SHORT (Psect_Attributes);
-  /* Specify the allocation.  */
-  PUT_LONG (Size);
-  /* Finally, the psect name.  */
-  VMS_Case_Hack_Symbol (Name, Local);
-  PUT_COUNTED_STRING (Local);
-  /* Flush the buffer if it is more than 75% full.  */
-  if (Object_Record_Offset > (sizeof (Object_Record_Buffer) * 3 / 4))
-    Flush_VMS_Object_Record_Buffer ();
-  return 0;
-}
-\f
-
-/* Given the pointer to a symbol we calculate how big the data at the
-   symbol is.  We do this by looking for the next symbol (local or global)
-   which will indicate the start of another datum.  */
-
-static offsetT
-VMS_Initialized_Data_Size (symbolS *s0P, unsigned End_Of_Data)
-{
-  symbolS *s1P;
-  valueT s0P_val = S_GET_VALUE (s0P), s1P_val,
-        nearest_val = (valueT) End_Of_Data;
-
-  /* Find the nearest symbol what follows this one.  */
-  for (s1P = symbol_rootP; s1P; s1P = symbol_next (s1P))
-    {
-      /* The data type must match.  */
-      if (S_GET_TYPE (s1P) != N_DATA)
-       continue;
-      s1P_val = S_GET_VALUE (s1P);
-      if (s1P_val > s0P_val && s1P_val < nearest_val)
-       nearest_val = s1P_val;
-    }
-  /* Calculate its size.  */
-  return (offsetT) (nearest_val - s0P_val);
-}
-
-/* Check symbol names for the Psect hack with a globalvalue, and then
-   generate globalvalues for those that have it.  */
-
-static void
-VMS_Emit_Globalvalues (unsigned text_siz, unsigned data_siz,
-                      char *Data_Segment)
-{
-  symbolS *sp;
-  char *stripped_name, *Name;
-  int Size;
-  int Psect_Attributes;
-  int globalvalue;
-  int typ, abstyp;
-
-  /* Scan the symbol table for globalvalues, and emit def/ref when
-     required.  These will be caught again later and converted to
-     N_UNDF.  */
-  for (sp = symbol_rootP; sp; sp = sp->sy_next)
-    {
-      typ = S_GET_RAW_TYPE (sp);
-      abstyp = ((typ & ~N_EXT) == N_ABS);
-      /* See if this is something we want to look at.  */
-      if (!abstyp &&
-         typ != (N_DATA | N_EXT) &&
-         typ != (N_UNDF | N_EXT))
-       continue;
-      /* See if this has globalvalue specification.  */
-      Name = S_GET_NAME (sp);
-
-      if (abstyp)
-       {
-         stripped_name = 0;
-         Psect_Attributes = GLOBALVALUE_BIT;
-       }
-      else if (HAS_PSECT_ATTRIBUTES (Name))
-       {
-         stripped_name = xmalloc (strlen (Name) + 1);
-         strcpy (stripped_name, Name);
-         Psect_Attributes = 0;
-         VMS_Modify_Psect_Attributes (stripped_name, &Psect_Attributes);
-       }
-      else
-       continue;
-
-      if ((Psect_Attributes & GLOBALVALUE_BIT) != 0)
-       {
-         switch (typ)
-           {
-           case N_ABS:
-             /* Local symbol references will want
-                to have an environment defined.  */
-             if (Current_Environment < 0)
-               VMS_Local_Environment_Setup (".N_ABS");
-             VMS_Global_Symbol_Spec (Name, 0,
-                                     S_GET_VALUE (sp),
-                                     GBLSYM_DEF|GBLSYM_VAL|GBLSYM_LCL);
-             break;
-           case N_ABS | N_EXT:
-             VMS_Global_Symbol_Spec (Name, 0,
-                                     S_GET_VALUE (sp),
-                                     GBLSYM_DEF|GBLSYM_VAL);
-             break;
-           case N_UNDF | N_EXT:
-             VMS_Global_Symbol_Spec (stripped_name, 0, 0, GBLSYM_VAL);
-             break;
-           case N_DATA | N_EXT:
-             Size = VMS_Initialized_Data_Size (sp, text_siz + data_siz);
-             if (Size > 4)
-               error (_("Invalid data type for globalvalue"));
-             globalvalue = md_chars_to_number (Data_Segment +
-                    S_GET_VALUE (sp) - text_siz , Size);
-             /* Three times for good luck.  The linker seems to get confused
-                if there are fewer than three */
-             VMS_Global_Symbol_Spec (stripped_name, 0, 0, GBLSYM_VAL);
-             VMS_Global_Symbol_Spec (stripped_name, 0, globalvalue,
-                                     GBLSYM_DEF|GBLSYM_VAL);
-             VMS_Global_Symbol_Spec (stripped_name, 0, globalvalue,
-                                     GBLSYM_DEF|GBLSYM_VAL);
-             break;
-           default:
-             as_warn (_("Invalid globalvalue of %s"), stripped_name);
-             break;
-           }
-       }
-
-      if (stripped_name)
-       free (stripped_name);
-    }
-
-}
-\f
-
-/* Define a procedure entry pt/mask.  */
-
-static void
-VMS_Procedure_Entry_Pt (char *Name, int Psect_Number, int Psect_Offset,
-                       int Entry_Mask)
-{
-  char Local[32];
-
-  /* We are writing a GSD record.  */
-  Set_VMS_Object_File_Record (OBJ_S_C_GSD);
-  /* If the buffer is empty we must insert the GSD record type.  */
-  if (Object_Record_Offset == 0)
-    PUT_CHAR (OBJ_S_C_GSD);
-  /* We are writing a Procedure Entry Pt/Mask subrecord.  */
-  PUT_CHAR (((unsigned) Psect_Number <= 255) ? GSD_S_C_EPM : GSD_S_C_EPMW);
-  /* Data type is undefined.  */
-  PUT_CHAR (0);
-  /* Flags = "RELOCATABLE" and "DEFINED".  */
-  PUT_SHORT (GSY_S_M_DEF | GSY_S_M_REL);
-  /* Psect Number.  */
-  if ((unsigned) Psect_Number <= 255)
-    PUT_CHAR (Psect_Number);
-  else
-    PUT_SHORT (Psect_Number);
-  /* Offset.  */
-  PUT_LONG (Psect_Offset);
-  /* Entry mask.  */
-  PUT_SHORT (Entry_Mask);
-  /* Finally, the global symbol name.  */
-  VMS_Case_Hack_Symbol (Name, Local);
-  PUT_COUNTED_STRING (Local);
-  /* Flush the buffer if it is more than 75% full.  */
-  if (Object_Record_Offset > (sizeof (Object_Record_Buffer) * 3 / 4))
-    Flush_VMS_Object_Record_Buffer ();
-}
-\f
-
-/* Set the current location counter to a particular Psect and Offset.  */
-
-static void
-VMS_Set_Psect (int Psect_Index, int Offset, int Record_Type)
-{
-  /* We are writing a "Record_Type" record.  */
-  Set_VMS_Object_File_Record (Record_Type);
-  /* If the buffer is empty we must insert the record type.  */
-  if (Object_Record_Offset == 0)
-    PUT_CHAR (Record_Type);
-  /* Stack the Psect base + Offset.  */
-  vms_tir_stack_psect (Psect_Index, Offset, 0);
-  /* Set relocation base.  */
-  PUT_CHAR (TIR_S_C_CTL_SETRB);
-  /* Flush the buffer if it is more than 75% full.  */
-  if (Object_Record_Offset > (sizeof (Object_Record_Buffer) * 3 / 4))
-    Flush_VMS_Object_Record_Buffer ();
-}
-\f
-
-/* Store repeated immediate data in current Psect.  */
-
-static void
-VMS_Store_Repeated_Data (int Repeat_Count, char *Pointer, int Size,
-                        int Record_Type)
-{
-  /* Ignore zero bytes/words/longwords.  */
-  switch (Size)
-    {
-    case 4:
-      if (Pointer[3] != 0 || Pointer[2] != 0) break;
-      /* else FALLTHRU */
-    case 2:
-      if (Pointer[1] != 0) break;
-      /* else FALLTHRU */
-    case 1:
-      if (Pointer[0] != 0) break;
-      /* zero value */
-      return;
-    default:
-      break;
-    }
-  /* If the data is too big for a TIR_S_C_STO_RIVB sub-record
-     then we do it manually.  */
-  if (Size > 255)
-    {
-      while (--Repeat_Count >= 0)
-       VMS_Store_Immediate_Data (Pointer, Size, Record_Type);
-      return;
-    }
-  /* We are writing a "Record_Type" record.  */
-  Set_VMS_Object_File_Record (Record_Type);
-  /* If the buffer is empty we must insert record type.  */
-  if (Object_Record_Offset == 0)
-    PUT_CHAR (Record_Type);
-  /* Stack the repeat count.  */
-  PUT_CHAR (TIR_S_C_STA_LW);
-  PUT_LONG (Repeat_Count);
-  /* And now the command and its data.  */
-  PUT_CHAR (TIR_S_C_STO_RIVB);
-  PUT_CHAR (Size);
-  while (--Size >= 0)
-    PUT_CHAR (*Pointer++);
-  /* Flush the buffer if it is more than 75% full.  */
-  if (Object_Record_Offset > (sizeof (Object_Record_Buffer) * 3 / 4))
-    Flush_VMS_Object_Record_Buffer ();
-}
-\f
-
-/* Store a Position Independent Reference.  */
-
-static void
-VMS_Store_PIC_Symbol_Reference (symbolS *Symbol, int Offset, int PC_Relative,
-                               int Psect, int Psect_Offset, int Record_Type)
-{
-  struct VMS_Symbol *vsp = Symbol->sy_obj;
-  char Local[32];
-  int local_sym = 0;
-
-  /* We are writing a "Record_Type" record.  */
-  Set_VMS_Object_File_Record (Record_Type);
-  /* If the buffer is empty we must insert record type.  */
-  if (Object_Record_Offset == 0)
-    PUT_CHAR (Record_Type);
-  /* Set to the appropriate offset in the Psect.
-     For a Code reference we need to fix the operand
-     specifier as well, so back up 1 byte;
-     for a Data reference we just store HERE.  */
-  VMS_Set_Psect (Psect,
-                PC_Relative ? Psect_Offset - 1 : Psect_Offset,
-                Record_Type);
-  /* Make sure we are still generating a "Record Type" record.  */
-  if (Object_Record_Offset == 0)
-    PUT_CHAR (Record_Type);
-  /* Dispatch on symbol type (so we can stack its value).  */
-  switch (S_GET_RAW_TYPE (Symbol))
-    {
-      /* Global symbol.  */
-    case N_ABS:
-      local_sym = 1;
-      /*FALLTHRU*/
-    case N_ABS | N_EXT:
-#ifdef NOT_VAX_11_C_COMPATIBLE
-    case N_UNDF | N_EXT:
-    case N_DATA | N_EXT:
-#endif /* NOT_VAX_11_C_COMPATIBLE */
-    case N_UNDF:
-    case N_TEXT | N_EXT:
-      /* Get the symbol name (case hacked).  */
-      VMS_Case_Hack_Symbol (S_GET_NAME (Symbol), Local);
-      /* Stack the global symbol value.  */
-      if (!local_sym)
-       {
-         PUT_CHAR (TIR_S_C_STA_GBL);
-       }
-      else
-       {
-         /* Local symbols have an extra field.  */
-         PUT_CHAR (TIR_S_C_STA_LSY);
-         PUT_SHORT (Current_Environment);
-       }
-      PUT_COUNTED_STRING (Local);
-      if (Offset)
-       {
-         /* Stack the longword offset.  */
-         PUT_CHAR (TIR_S_C_STA_LW);
-         PUT_LONG (Offset);
-         /* Add the two, leaving the result on the stack.  */
-         PUT_CHAR (TIR_S_C_OPR_ADD);
-       }
-      break;
-      /* Uninitialized local data.  */
-    case N_BSS:
-      /* Stack the Psect (+offset).  */
-      vms_tir_stack_psect (vsp->Psect_Index,
-                          vsp->Psect_Offset + Offset,
-                          0);
-      break;
-      /* Local text.  */
-    case N_TEXT:
-      /* Stack the Psect (+offset).  */
-      vms_tir_stack_psect (vsp->Psect_Index,
-                          S_GET_VALUE (Symbol) + Offset,
-                          0);
-      break;
-      /* Initialized local or global data.  */
-    case N_DATA:
-#ifndef        NOT_VAX_11_C_COMPATIBLE
-    case N_UNDF | N_EXT:
-    case N_DATA | N_EXT:
-#endif /* NOT_VAX_11_C_COMPATIBLE */
-      /* Stack the Psect (+offset).  */
-      vms_tir_stack_psect (vsp->Psect_Index,
-                          vsp->Psect_Offset + Offset,
-                          0);
-      break;
-    }
-  /* Store either a code or data reference.  */
-  PUT_CHAR (PC_Relative ? TIR_S_C_STO_PICR : TIR_S_C_STO_PIDR);
-  /* Flush the buffer if it is more than 75% full.  */
-  if (Object_Record_Offset > (sizeof (Object_Record_Buffer) * 3 / 4))
-    Flush_VMS_Object_Record_Buffer ();
-}
-\f
-
-/* Check in the text area for an indirect pc-relative reference
-   and fix it up with addressing mode 0xff [PC indirect]
-
-   THIS SHOULD BE REPLACED BY THE USE OF TIR_S_C_STO_PIRR IN THE
-   PIC CODE GENERATING FIXUP ROUTINE.  */
-
-static void
-VMS_Fix_Indirect_Reference (int Text_Psect, addressT Offset,
-                           fragS *fragP, fragS *text_frag_root)
-{
-  /* The addressing mode byte is 1 byte before the address.  */
-  Offset--;
-  /* Is it in THIS frag?  */
-  if ((Offset < fragP->fr_address) ||
-      (Offset >= (fragP->fr_address + fragP->fr_fix)))
-    {
-      /* We need to search for the fragment containing this
-         Offset.  */
-      for (fragP = text_frag_root; fragP; fragP = fragP->fr_next)
-       {
-         if ((Offset >= fragP->fr_address) &&
-             (Offset < (fragP->fr_address + fragP->fr_fix)))
-           break;
-       }
-      /* If we couldn't find the frag, things are BAD!  */
-      if (fragP == 0)
-       error (_("Couldn't find fixup fragment when checking for indirect reference"));
-    }
-  /* Check for indirect PC relative addressing mode.  */
-  if (fragP->fr_literal[Offset - fragP->fr_address] == (char) 0xff)
-    {
-      static char Address_Mode = (char) 0xff;
-
-      /* Yes: Store the indirect mode back into the image
-         to fix up the damage done by STO_PICR.  */
-      VMS_Set_Psect (Text_Psect, Offset, OBJ_S_C_TIR);
-      VMS_Store_Immediate_Data (&Address_Mode, 1, OBJ_S_C_TIR);
-    }
-}
-\f
-
-/* If the procedure "main()" exists we have to add the instruction
-   "jsb c$main_args" at the beginning to be compatible with VAX-11 "C".
-
-   FIXME:  the macro name `HACK_DEC_C_STARTUP' should be renamed
-          to `HACK_VAXCRTL_STARTUP' because Digital's compiler
-          named "DEC C" uses run-time library "DECC$SHR", but this
-          startup code is for "VAXCRTL", the library for Digital's
-          older "VAX C".  Also, this extra code isn't needed for
-          supporting gcc because it already generates the VAXCRTL
-          startup call when compiling main().  The reference to
-          `flag_hash_long_names' looks very suspicious too;
-          probably an old-style command line option was inadvertently
-          overloaded here, then blindly converted into the new one.  */
-void
-vms_check_for_main (void)
-{
-  symbolS *symbolP;
-#ifdef HACK_DEC_C_STARTUP      /* JF */
-  struct frchain *frchainP;
-  fragS *fragP;
-  fragS **prev_fragPP;
-  struct fix *fixP;
-  fragS *New_Frag;
-  int i;
-#endif /* HACK_DEC_C_STARTUP */
-
-  symbolP = (symbolS *) symbol_find ("_main");
-  if (symbolP && !S_IS_DEBUG (symbolP) &&
-      S_IS_EXTERNAL (symbolP) && (S_GET_TYPE (symbolP) == N_TEXT))
-    {
-#ifdef HACK_DEC_C_STARTUP
-      if (!flag_hash_long_names)
-       {
-#endif
-         /* Remember the entry point symbol.  */
-         Entry_Point_Symbol = symbolP;
-#ifdef HACK_DEC_C_STARTUP
-       }
-      else
-       {
-         /* Scan all the fragment chains for the one with "_main"
-            (Actually we know the fragment from the symbol, but we need
-            the previous fragment so we can change its pointer).  */
-         frchainP = frchain_root;
-         while (frchainP)
-           {
-             /* Scan all the fragments in this chain, remembering
-                the "previous fragment".  */
-             prev_fragPP = &frchainP->frch_root;
-             fragP = frchainP->frch_root;
-             while (fragP && (fragP != frchainP->frch_last))
-               {
-                 /* Is this the fragment ?  */
-                 if (fragP == symbolP->sy_frag)
-                   {
-                     /* Yes: Modify the fragment by replacing
-                        it with a new fragment.  */
-                     New_Frag =
-                       xmalloc (sizeof (*New_Frag) +
-                                fragP->fr_fix +
-                                fragP->fr_var +
-                                5);
-                     /* The fragments are the same except
-                               that the "fixed" area is larger.  */
-                     *New_Frag = *fragP;
-                     New_Frag->fr_fix += 6;
-                     /* Copy the literal data opening a hole
-                        2 bytes after "_main" (i.e. just after
-                        the entry mask).  Into which we place
-                        the JSB instruction.  */
-                     New_Frag->fr_literal[0] = fragP->fr_literal[0];
-                     New_Frag->fr_literal[1] = fragP->fr_literal[1];
-                     New_Frag->fr_literal[2] = 0x16;   /* Jsb */
-                     New_Frag->fr_literal[3] = 0xef;
-                     New_Frag->fr_literal[4] = 0;
-                     New_Frag->fr_literal[5] = 0;
-                     New_Frag->fr_literal[6] = 0;
-                     New_Frag->fr_literal[7] = 0;
-                     for (i = 2; i < fragP->fr_fix + fragP->fr_var; i++)
-                       New_Frag->fr_literal[i + 6] =
-                         fragP->fr_literal[i];
-                     /* Now replace the old fragment with the
-                        newly generated one.  */
-                     *prev_fragPP = New_Frag;
-                     /* Remember the entry point symbol.  */
-                     Entry_Point_Symbol = symbolP;
-                     /* Scan the text area fixup structures
-                        as offsets in the fragment may have changed.  */
-                     for (fixP = text_fix_root; fixP; fixP = fixP->fx_next)
-                       {
-                         /* Look for references to this fragment.  */
-                         if (fixP->fx_frag == fragP)
-                           {
-                             /* Change the fragment pointer.  */
-                             fixP->fx_frag = New_Frag;
-                             /* If the offset is after the entry mask we need
-                                to account for the JSB instruction we just
-                                inserted.  */
-                             if (fixP->fx_where >= 2)
-                               fixP->fx_where += 6;
-                           }
-                       }
-                     /* Scan the symbols as offsets in the
-                       fragment may have changed.  */
-                     for (symbolP = symbol_rootP;
-                          symbolP;
-                          symbolP = symbol_next (symbolP))
-                       {
-                         /* Look for references to this fragment.  */
-                         if (symbolP->sy_frag == fragP)
-                           {
-                             /* Change the fragment pointer.  */
-                             symbolP->sy_frag = New_Frag;
-                             /* If the offset is after the entry mask we need
-                                to account for the JSB instruction we just
-                                inserted.  */
-                             if (S_GET_VALUE (symbolP) >= 2)
-                               S_SET_VALUE (symbolP,
-                                            S_GET_VALUE (symbolP) + 6);
-                           }
-                       }
-                     /*  Make a symbol reference to "_c$main_args" so we
-                         can get its address inserted into the JSB
-                         instruction.  */
-                     symbolP = xmalloc (sizeof (*symbolP));
-                     S_SET_NAME (symbolP, "_C$MAIN_ARGS");
-                     S_SET_TYPE (symbolP, N_UNDF);
-                     S_SET_OTHER (symbolP, 0);
-                     S_SET_DESC (symbolP, 0);
-                     S_SET_VALUE (symbolP, 0);
-                     symbolP->sy_name_offset = 0;
-                     symbolP->sy_number = 0;
-                     symbolP->sy_obj = 0;
-                     symbolP->sy_frag = New_Frag;
-                     symbolP->sy_resolved = 0;
-                     symbolP->sy_resolving = 0;
-                     /* This actually inserts at the beginning of the list.  */
-                     symbol_append (symbol_rootP, symbolP,
-                                    &symbol_rootP, &symbol_lastP);
-
-                     symbol_rootP = symbolP;
-                     /* Generate a text fixup structure
-                        to get "_c$main_args" stored into the
-                        JSB instruction.  */
-                     fixP = xmalloc (sizeof (*fixP));
-                     fixP->fx_frag = New_Frag;
-                     fixP->fx_where = 4;
-                     fixP->fx_addsy = symbolP;
-                     fixP->fx_subsy = 0;
-                     fixP->fx_offset = 0;
-                     fixP->fx_size = 4;
-                     fixP->fx_pcrel = 1;
-                     fixP->fx_next = text_fix_root;
-                     text_fix_root = fixP;
-                     /* Now make sure we exit from the loop.  */
-                     frchainP = 0;
-                     break;
-                   }
-                 /* Try the next fragment.  */
-                 prev_fragPP = &fragP->fr_next;
-                 fragP = fragP->fr_next;
-               }
-             /* Try the next fragment chain.  */
-             if (frchainP)
-               frchainP = frchainP->frch_next;
-           }
-       }
-#endif /* HACK_DEC_C_STARTUP */
-    }
-}
-\f
-
-/* Beginning of vms_write_object_file().  */
-
-static
-struct vms_obj_state
-{
-  /* Next program section index to use.  */
-  int  psect_number;
-
-  /* Psect index for code.  Always ends up #0.  */
-  int  text_psect;
-
-  /* Psect index for initialized static variables.  */
-  int  data_psect;
-
-  /* Psect index for uninitialized static variables.  */
-  int  bss_psect;
-
-  /* Psect index for static constructors.  */
-  int  ctors_psect;
-
-  /* Psect index for static destructors.  */
-  int  dtors_psect;
-
-  /* Number of bytes used for local symbol data.  */
-  int  local_initd_data_size;
-
-  /* Dynamic buffer for initialized data.  */
-  char *data_segment;
-
-} vms_obj_state;
-
-#define Psect_Number           vms_obj_state.psect_number
-#define Text_Psect             vms_obj_state.text_psect
-#define Data_Psect             vms_obj_state.data_psect
-#define Bss_Psect              vms_obj_state.bss_psect
-#define Ctors_Psect            vms_obj_state.ctors_psect
-#define Dtors_Psect            vms_obj_state.dtors_psect
-#define Local_Initd_Data_Size  vms_obj_state.local_initd_data_size
-#define Data_Segment           vms_obj_state.data_segment
-
-#define IS_GXX_VTABLE(symP) (strncmp (S_GET_NAME (symP), "__vt.", 5) == 0)
-#define IS_GXX_XTOR(symP) (strncmp (S_GET_NAME (symP), "__GLOBAL_.", 10) == 0)
-#define XTOR_SIZE 4
-\f
-
-/* Perform text segment fixups.  */
-
-static void
-vms_fixup_text_section (unsigned text_siz ATTRIBUTE_UNUSED,
-                       struct frag *text_frag_root,
-                       struct frag *data_frag_root)
-{
-  fragS *fragP;
-  struct fix *fixP;
-  offsetT dif;
-
-  /* Scan the text fragments.  */
-  for (fragP = text_frag_root; fragP; fragP = fragP->fr_next)
-    {
-      /* Stop if we get to the data fragments.  */
-      if (fragP == data_frag_root)
-       break;
-      /* Ignore fragments with no data.  */
-      if ((fragP->fr_fix == 0) && (fragP->fr_var == 0))
-       continue;
-      /* Go to the appropriate offset in the Text Psect.  */
-      VMS_Set_Psect (Text_Psect, fragP->fr_address, OBJ_S_C_TIR);
-      /* Store the "fixed" part.  */
-      if (fragP->fr_fix)
-       VMS_Store_Immediate_Data (fragP->fr_literal,
-                                 fragP->fr_fix,
-                                 OBJ_S_C_TIR);
-      /* Store the "variable" part.  */
-      if (fragP->fr_var && fragP->fr_offset)
-       VMS_Store_Repeated_Data (fragP->fr_offset,
-                                fragP->fr_literal + fragP->fr_fix,
-                                fragP->fr_var,
-                                OBJ_S_C_TIR);
-    }
-
-  /* Now we go through the text segment fixups and generate
-     TIR records to fix up addresses within the Text Psect.  */
-  for (fixP = text_fix_root; fixP; fixP = fixP->fx_next)
-    {
-      /* We DO handle the case of "Symbol - Symbol" as
-        long as it is in the same segment.  */
-      if (fixP->fx_subsy && fixP->fx_addsy)
-       {
-         /* They need to be in the same segment.  */
-         if (S_GET_RAW_TYPE (fixP->fx_subsy) !=
-             S_GET_RAW_TYPE (fixP->fx_addsy))
-           error (_("Fixup data addsy and subsy don't have the same type"));
-         /* And they need to be in one that we can check the psect on.  */
-         if ((S_GET_TYPE (fixP->fx_addsy) != N_DATA) &&
-                   (S_GET_TYPE (fixP->fx_addsy) != N_TEXT))
-           error (_("Fixup data addsy and subsy don't have an appropriate type"));
-         /* This had better not be PC relative!  */
-         if (fixP->fx_pcrel)
-           error (_("Fixup data is erroneously \"pcrel\""));
-         /* Subtract their values to get the difference.  */
-         dif = S_GET_VALUE (fixP->fx_addsy) - S_GET_VALUE (fixP->fx_subsy);
-         md_number_to_chars (Local, (valueT)dif, fixP->fx_size);
-         /* Now generate the fixup object records;
-            set the psect and store the data.  */
-         VMS_Set_Psect (Text_Psect,
-                        fixP->fx_where + fixP->fx_frag->fr_address,
-                        OBJ_S_C_TIR);
-         VMS_Store_Immediate_Data (Local,
-                                   fixP->fx_size,
-                                   OBJ_S_C_TIR);
-         continue;
-       }
-      /* Size will HAVE to be "long".  */
-      if (fixP->fx_size != 4)
-       error (_("Fixup datum is not a longword"));
-      /* Symbol must be "added" (if it is ever
-        subtracted we can fix this assumption).  */
-      if (fixP->fx_addsy == 0)
-       error (_("Fixup datum is not \"fixP->fx_addsy\""));
-      /* Store the symbol value in a PIC fashion.  */
-      VMS_Store_PIC_Symbol_Reference (fixP->fx_addsy,
-                                     fixP->fx_offset,
-                                     fixP->fx_pcrel,
-                                     Text_Psect,
-                                   fixP->fx_where + fixP->fx_frag->fr_address,
-                                     OBJ_S_C_TIR);
-         /* Check for indirect address reference, which has to be fixed up
-            (as the linker will screw it up with TIR_S_C_STO_PICR).  */
-      if (fixP->fx_pcrel)
-       VMS_Fix_Indirect_Reference (Text_Psect,
-                                   fixP->fx_where + fixP->fx_frag->fr_address,
-                                   fixP->fx_frag,
-                                   text_frag_root);
-    }
-}
-\f
-
-/* Create a buffer holding the data segment.  */
-
-static void
-synthesize_data_segment (unsigned data_siz, unsigned text_siz,
-                        struct frag *data_frag_root)
-{
-  fragS *fragP;
-  char *fill_literal;
-  long fill_size, count, i;
-
-  /* Allocate the data segment.  */
-  Data_Segment = xmalloc (data_siz);
-  
-  /* Run through the data fragments, filling in the segment.  */
-  for (fragP = data_frag_root; fragP; fragP = fragP->fr_next)
-    {
-      i = fragP->fr_address - text_siz;
-      if (fragP->fr_fix)
-       memcpy (Data_Segment + i, fragP->fr_literal, fragP->fr_fix);
-      i += fragP->fr_fix;
-
-      if ((fill_size = fragP->fr_var) != 0)
-       {
-         fill_literal = fragP->fr_literal + fragP->fr_fix;
-         for (count = fragP->fr_offset; count; count--)
-           {
-             memcpy (Data_Segment + i, fill_literal, fill_size);
-             i += fill_size;
-           }
-       }
-    }
-}
-
-/* Perform data segment fixups.  */
-
-static void
-vms_fixup_data_section (unsigned int data_siz ATTRIBUTE_UNUSED,
-                       unsigned int text_siz)
-{
-  struct VMS_Symbol *vsp;
-  struct fix *fixP;
-  symbolS *sp;
-  addressT fr_address;
-  offsetT dif;
-  valueT val;
-
-  /* Run through all the data symbols and store the data.  */
-  for (vsp = VMS_Symbols; vsp; vsp = vsp->Next)
-    {
-      /* Ignore anything other than data symbols.  */
-      if (S_GET_TYPE (vsp->Symbol) != N_DATA)
-       continue;
-      /* Set the Psect + Offset.  */
-      VMS_Set_Psect (vsp->Psect_Index,
-                      vsp->Psect_Offset,
-                      OBJ_S_C_TIR);
-      /* Store the data.  */
-      val = S_GET_VALUE (vsp->Symbol);
-      VMS_Store_Immediate_Data (Data_Segment + val - text_siz,
-                               vsp->Size,
-                               OBJ_S_C_TIR);
-    }                  /* N_DATA symbol loop */
-
-  /* Now we go through the data segment fixups and generate
-     TIR records to fix up addresses within the Data Psects.  */
-  for (fixP = data_fix_root; fixP; fixP = fixP->fx_next)
-    {
-      /* Find the symbol for the containing datum.  */
-      for (vsp = VMS_Symbols; vsp; vsp = vsp->Next)
-       {
-         /* Only bother with Data symbols.  */
-         sp = vsp->Symbol;
-         if (S_GET_TYPE (sp) != N_DATA)
-           continue;
-         /* Ignore symbol if After fixup.  */
-         val = S_GET_VALUE (sp);
-         fr_address = fixP->fx_frag->fr_address;
-         if (val > fixP->fx_where + fr_address)
-           continue;
-         /* See if the datum is here.  */
-         if (val + vsp->Size <= fixP->fx_where + fr_address)
-           continue;
-         /* We DO handle the case of "Symbol - Symbol" as
-            long as it is in the same segment.  */
-         if (fixP->fx_subsy && fixP->fx_addsy)
-           {
-             /* They need to be in the same segment.  */
-             if (S_GET_RAW_TYPE (fixP->fx_subsy) !=
-                 S_GET_RAW_TYPE (fixP->fx_addsy))
-               error (_("Fixup data addsy and subsy don't have the same type"));
-             /* And they need to be in one that we can check the psect on.  */
-             if ((S_GET_TYPE (fixP->fx_addsy) != N_DATA) &&
-                 (S_GET_TYPE (fixP->fx_addsy) != N_TEXT))
-               error (_("Fixup data addsy and subsy don't have an appropriate type"));
-             /* This had better not be PC relative!  */
-             if (fixP->fx_pcrel)
-               error (_("Fixup data is erroneously \"pcrel\""));
-             /* Subtract their values to get the difference.  */
-             dif = S_GET_VALUE (fixP->fx_addsy) - S_GET_VALUE (fixP->fx_subsy);
-             md_number_to_chars (Local, (valueT)dif, fixP->fx_size);
-             /* Now generate the fixup object records;
-                set the psect and store the data.  */
-             VMS_Set_Psect (vsp->Psect_Index,
-                            fr_address + fixP->fx_where
-                                - val + vsp->Psect_Offset,
-                            OBJ_S_C_TIR);
-             VMS_Store_Immediate_Data (Local,
-                                       fixP->fx_size,
-                                       OBJ_S_C_TIR);
-                 break;        /* done with this fixup */
-               }
-         /* Size will HAVE to be "long".  */
-         if (fixP->fx_size != 4)
-           error (_("Fixup datum is not a longword"));
-         /* Symbol must be "added" (if it is ever
-            subtracted we can fix this assumption).  */
-         if (fixP->fx_addsy == 0)
-           error (_("Fixup datum is not \"fixP->fx_addsy\""));
-         /* Store the symbol value in a PIC fashion.  */
-         VMS_Store_PIC_Symbol_Reference (fixP->fx_addsy,
-                                         fixP->fx_offset,
-                                         fixP->fx_pcrel,
-                                         vsp->Psect_Index,
-                                         fr_address + fixP->fx_where
-                                             - val + vsp->Psect_Offset,
-                                         OBJ_S_C_TIR);
-         /* Done with this fixup.  */
-         break;
-       }
-    }
-}
-
-/* Perform ctors/dtors segment fixups.  */
-
-static void
-vms_fixup_xtors_section (struct VMS_Symbol *symbols,
-                        int sect_no ATTRIBUTE_UNUSED)
-{
-  struct VMS_Symbol *vsp;
-
-  /* Run through all the symbols and store the data.  */
-  for (vsp = symbols; vsp; vsp = vsp->Next)
-    {
-      symbolS *sp;
-
-      /* Set relocation base.  */
-      VMS_Set_Psect (vsp->Psect_Index, vsp->Psect_Offset, OBJ_S_C_TIR);
-
-      sp = vsp->Symbol;
-      /* Stack the Psect base with its offset.  */
-      VMS_Set_Data (Text_Psect, S_GET_VALUE (sp), OBJ_S_C_TIR, 0);
-    }
-  /* Flush the buffer if it is more than 75% full.  */
-  if (Object_Record_Offset > (sizeof (Object_Record_Buffer) * 3 / 4))
-    Flush_VMS_Object_Record_Buffer ();
-}
-\f
-
-/* Define symbols for the linker.  */
-
-static void
-global_symbol_directory (unsigned text_siz, unsigned data_siz)
-{
-  fragS *fragP;
-  symbolS *sp;
-  struct VMS_Symbol *vsp;
-  int Globalref, define_as_global_symbol;
-
-  /* Now scan the symbols and emit the appropriate GSD records.  */
-  for (sp = symbol_rootP; sp; sp = symbol_next (sp))
-    {
-      define_as_global_symbol = 0;
-      vsp = 0;
-      /* Dispatch on symbol type.  */
-      switch (S_GET_RAW_TYPE (sp))
-       {
-
-       /* Global uninitialized data.  */
-       case N_UNDF | N_EXT:
-         /* Make a VMS data symbol entry.  */
-         vsp = xmalloc (sizeof *vsp);
-         vsp->Symbol = sp;
-         vsp->Size = S_GET_VALUE (sp);
-         vsp->Psect_Index = Psect_Number++;
-         vsp->Psect_Offset = 0;
-         vsp->Next = VMS_Symbols;
-         VMS_Symbols = vsp;
-         sp->sy_obj = vsp;
-         /* Make the psect for this data.  */
-         Globalref = VMS_Psect_Spec (S_GET_NAME (sp),
-                                     vsp->Size,
-                                     S_GET_OTHER (sp) ? ps_CONST : ps_COMMON,
-                                     vsp);
-         if (Globalref)
-           Psect_Number--;
-#ifdef NOT_VAX_11_C_COMPATIBLE
-         define_as_global_symbol = 1;
-#else
-         /* See if this is an external vtable.  We want to help the
-            linker find these things in libraries, so we make a symbol
-            reference.  This is not compatible with VAX-C usage for
-            variables, but since vtables are only used internally by
-            g++, we can get away with this hack.  */
-         define_as_global_symbol = IS_GXX_VTABLE (sp);
-#endif
-         break;
-
-       /* Local uninitialized data.  */
-       case N_BSS:
-         /* Make a VMS data symbol entry.  */
-         vsp = xmalloc (sizeof *vsp);
-         vsp->Symbol = sp;
-         vsp->Size = 0;
-         vsp->Psect_Index = Bss_Psect;
-         vsp->Psect_Offset = S_GET_VALUE (sp) - bss_address_frag.fr_address;
-         vsp->Next = VMS_Symbols;
-         VMS_Symbols = vsp;
-         sp->sy_obj = vsp;
-         break;
-
-       /* Global initialized data.  */
-       case N_DATA | N_EXT:
-         /* Make a VMS data symbol entry.  */
-         vsp = xmalloc (sizeof *vsp);
-         vsp->Symbol = sp;
-         vsp->Size = VMS_Initialized_Data_Size (sp, text_siz + data_siz);
-         vsp->Psect_Index = Psect_Number++;
-         vsp->Psect_Offset = 0;
-         vsp->Next = VMS_Symbols;
-         VMS_Symbols = vsp;
-         sp->sy_obj = vsp;
-         /* Make its psect.  */
-         Globalref = VMS_Psect_Spec (S_GET_NAME (sp),
-                                     vsp->Size,
-                                     S_GET_OTHER (sp) ? ps_CONST : ps_COMMON,
-                                     vsp);
-         if (Globalref)
-           Psect_Number--;
-#ifdef NOT_VAX_11_C_COMPATIBLE
-         define_as_global_symbol = 1;
-#else
-         /* See N_UNDF|N_EXT above for explanation.  */
-         define_as_global_symbol = IS_GXX_VTABLE (sp);
-#endif
-         break;
-
-       /* Local initialized data.  */
-       case N_DATA:
-         {
-           char *sym_name = S_GET_NAME (sp);
-
-           /* Always suppress local numeric labels.  */
-           if (sym_name && strcmp (sym_name, FAKE_LABEL_NAME) == 0)
-             break;
-
-           /* Make a VMS data symbol entry.  */
-           vsp = xmalloc (sizeof *vsp);
-           vsp->Symbol = sp;
-           vsp->Size = VMS_Initialized_Data_Size (sp, text_siz + data_siz);
-           vsp->Psect_Index = Data_Psect;
-           vsp->Psect_Offset = Local_Initd_Data_Size;
-           Local_Initd_Data_Size += vsp->Size;
-           vsp->Next = VMS_Symbols;
-           VMS_Symbols = vsp;
-           sp->sy_obj = vsp;
-         }
-         break;
-
-       /* Global Text definition.  */
-       case N_TEXT | N_EXT:
-         {
-
-           if (IS_GXX_XTOR (sp))
-             {
-               vsp = xmalloc (sizeof *vsp);
-               vsp->Symbol = sp;
-               vsp->Size = XTOR_SIZE;
-               sp->sy_obj = vsp;
-               switch ((S_GET_NAME (sp))[10])
-                 {
-                   case 'I':
-                     vsp->Psect_Index = Ctors_Psect;
-                     vsp->Psect_Offset = (Ctors_Symbols==0)?0:(Ctors_Symbols->Psect_Offset+XTOR_SIZE);
-                     vsp->Next = Ctors_Symbols;
-                     Ctors_Symbols = vsp;
-                     break;
-                   case 'D':
-                     vsp->Psect_Index = Dtors_Psect;
-                     vsp->Psect_Offset = (Dtors_Symbols==0)?0:(Dtors_Symbols->Psect_Offset+XTOR_SIZE);
-                     vsp->Next = Dtors_Symbols;
-                     Dtors_Symbols = vsp;
-                     break;
-                   case 'G':
-                     as_warn (_("Can't handle global xtors symbols yet."));
-                     break;
-                   default:
-                     as_warn (_("Unknown %s"), S_GET_NAME (sp));
-                     break;
-                 }
-             }
-           else
-             {
-               unsigned short Entry_Mask;
-
-               /* Get the entry mask.  */
-               fragP = sp->sy_frag;
-               /* First frag might be empty if we're generating listings.
-                  So skip empty rs_fill frags.  */
-               while (fragP && fragP->fr_type == rs_fill && fragP->fr_fix == 0)
-                 fragP = fragP->fr_next;
-
-               /* If first frag doesn't contain the data, what do we do?
-                  If it's possibly smaller than two bytes, that would
-                  imply that the entry mask is not stored where we're
-                  expecting it.
-
-                  If you can find a test case that triggers this, report
-                  it (and tell me what the entry mask field ought to be),
-                  and I'll try to fix it.  KR */
-               if (fragP->fr_fix < 2)
-                 abort ();
-
-               Entry_Mask = (fragP->fr_literal[0] & 0x00ff) |
-                            ((fragP->fr_literal[1] & 0x00ff) << 8);
-               /* Define the procedure entry point.  */
-               VMS_Procedure_Entry_Pt (S_GET_NAME (sp),
-                                   Text_Psect,
-                                   S_GET_VALUE (sp),
-                                   Entry_Mask);
-             }
-           break;
-         }
-
-       /* Local Text definition.  */
-       case N_TEXT:
-         /* Make a VMS data symbol entry.  */
-         if (Text_Psect != -1)
-           {
-             vsp = xmalloc (sizeof *vsp);
-             vsp->Symbol = sp;
-             vsp->Size = 0;
-             vsp->Psect_Index = Text_Psect;
-             vsp->Psect_Offset = S_GET_VALUE (sp);
-             vsp->Next = VMS_Symbols;
-             VMS_Symbols = vsp;
-             sp->sy_obj = vsp;
-           }
-         break;
-
-       /* Global Reference.  */
-       case N_UNDF:
-         /* Make a GSD global symbol reference record.  */
-         VMS_Global_Symbol_Spec (S_GET_NAME (sp),
-                                 0,
-                                 0,
-                                 GBLSYM_REF);
-         break;
-
-       /* Absolute symbol.  */
-       case N_ABS:
-       case N_ABS | N_EXT:
-         /* gcc doesn't generate these;
-            VMS_Emit_Globalvalue handles them though.  */
-         vsp = xmalloc (sizeof *vsp);
-         vsp->Symbol = sp;
-         vsp->Size = 4;                /* always assume 32 bits */
-         vsp->Psect_Index = 0;
-         vsp->Psect_Offset = S_GET_VALUE (sp);
-         vsp->Next = VMS_Symbols;
-         VMS_Symbols = vsp;
-         sp->sy_obj = vsp;
-         break;
-
-       /* Anything else.  */
-       default:
-         /* Ignore STAB symbols, including .stabs emitted by g++.  */
-         if (S_IS_DEBUG (sp) || (S_GET_TYPE (sp) == 22))
-           break;
-         /*
-          *    Error otherwise.
-          */
-         as_tsktsk (_("unhandled stab type %d"), S_GET_TYPE (sp));
-         break;
-       }
-
-      /* Global symbols have different linkage than external variables.  */
-      if (define_as_global_symbol)
-       VMS_Global_Symbol_Spec (S_GET_NAME (sp),
-                               vsp->Psect_Index,
-                               0,
-                               GBLSYM_DEF);
-    }
-}
-\f
-
-/* Output debugger symbol table information for symbols which
-   are local to a specific routine.  */
-
-static void
-local_symbols_DST (symbolS *s0P, symbolS *Current_Routine)
-{
-  symbolS *s1P;
-  char *s0P_name, *pnt0, *pnt1;
-
-  s0P_name = S_GET_NAME (s0P);
-  if (*s0P_name++ != '_')
-    return;
-
-  for (s1P = Current_Routine; s1P; s1P = symbol_next (s1P))
-    {
-      if (S_GET_RAW_TYPE (s1P) != N_FUN)
-       continue;
-      pnt0 = s0P_name;
-      pnt1 = S_GET_NAME (s1P);
-      /* We assume the two strings are never exactly equal...  */
-      while (*pnt0++ == *pnt1++)
-       {
-       }
-      /* Found it if s0P name is exhausted and s1P name has ":F" or ":f" next.
-        Note:  both pointers have advanced one past the non-matching char.  */
-      if ((*pnt1 == 'F' || *pnt1 == 'f') && *--pnt1 == ':' && *--pnt0 == '\0')
-       {
-         Define_Routine (s1P, 0, Current_Routine, Text_Psect);
-         return;
-       }
-    }
-}
-
-/* Construct and output the debug symbol table.  */
-
-static void
-vms_build_DST (unsigned text_siz)
-{
-  symbolS *symbolP;
-  symbolS *Current_Routine = 0;
-  struct input_file *Cur_File = 0;
-  offsetT Cur_Offset = -1;
-  int Cur_Line_Number = 0;
-  int File_Number = 0;
-  int Debugger_Offset = 0;
-  int file_available;
-  int dsc;
-  offsetT val;
-
-  /* Write the Traceback Begin Module record.  */
-  VMS_TBT_Module_Begin ();
-
-  /* Output debugging info for global variables and static variables
-     that are not specific to one routine.  We also need to examine
-     all stabs directives, to find the definitions to all of the
-     advanced data types, and this is done by VMS_LSYM_Parse.  This
-     needs to be done before any definitions are output to the object
-     file, since there can be forward references in the stabs
-     directives.  When through with parsing, the text of the stabs
-     directive is altered, with the definitions removed, so that later
-     passes will see directives as they would be written if the type
-     were already defined.
-
-     We also look for files and include files, and make a list of
-     them.  We examine the source file numbers to establish the actual
-     lines that code was generated from, and then generate offsets.  */
-  VMS_LSYM_Parse ();
-  for (symbolP = symbol_rootP; symbolP; symbolP = symbol_next (symbolP))
-    {
-      /* Only deal with STAB symbols here.  */
-      if (!S_IS_DEBUG (symbolP))
-       continue;
-      /* Dispatch on STAB type.  */
-      switch (S_GET_RAW_TYPE (symbolP))
-       {
-       case N_SLINE:
-         dsc = S_GET_DESC (symbolP);
-         if (dsc > Cur_File->max_line)
-           Cur_File->max_line = dsc;
-         if (dsc < Cur_File->min_line)
-           Cur_File->min_line = dsc;
-         break;
-       case N_SO:
-         Cur_File = find_file (symbolP);
-         Cur_File->flag = 1;
-         Cur_File->min_line = 1;
-         break;
-       case N_SOL:
-         Cur_File = find_file (symbolP);
-         break;
-       case N_GSYM:
-         VMS_GSYM_Parse (symbolP, Text_Psect);
-         break;
-       case N_LCSYM:
-         VMS_LCSYM_Parse (symbolP, Text_Psect);
-         break;
-       case N_FUN:             /* For static constant symbols */
-       case N_STSYM:
-         VMS_STSYM_Parse (symbolP, Text_Psect);
-         break;
-       default:
-         break;
-       }
-    }
-
-  /* Now we take a quick sweep through the files and assign offsets
-     to each one.  This will essentially be the starting line number to
-     the debugger for each file.  Output the info for the debugger to
-     specify the files, and then tell it how many lines to use.  */
-  for (Cur_File = file_root; Cur_File; Cur_File = Cur_File->next)
-    {
-      if (Cur_File->max_line == 0)
-       continue;
-      if ((strncmp (Cur_File->name, "GNU_GXX_INCLUDE:", 16) == 0) &&
-         !flag_debug)
-       continue;
-      if ((strncmp (Cur_File->name, "GNU_CC_INCLUDE:", 15) == 0) &&
-         !flag_debug)
-       continue;
-      /* show a few extra lines at the start of the region selected */
-      if (Cur_File->min_line > 2)
-       Cur_File->min_line -= 2;
-      Cur_File->offset = Debugger_Offset - Cur_File->min_line + 1;
-      Debugger_Offset += Cur_File->max_line - Cur_File->min_line + 1;
-      if (Cur_File->same_file_fpnt)
-       {
-         Cur_File->file_number = Cur_File->same_file_fpnt->file_number;
-       }
-      else
-       {
-         Cur_File->file_number = ++File_Number;
-         file_available = VMS_TBT_Source_File (Cur_File->name,
-                                               Cur_File->file_number);
-         if (!file_available)
-           {
-             Cur_File->file_number = 0;
-             File_Number--;
-             continue;
-           }
-       }
-      VMS_TBT_Source_Lines (Cur_File->file_number,
-                           Cur_File->min_line,
-                           Cur_File->max_line - Cur_File->min_line + 1);
-  }                    /* for */
-  Cur_File = (struct input_file *) NULL;
-
-  /* Scan the symbols and write out the routines
-     (this makes the assumption that symbols are in
-     order of ascending text segment offset).  */
-  for (symbolP = symbol_rootP; symbolP; symbolP = symbol_next (symbolP))
-    {
-      /* Deal with text symbols.  */
-      if (!S_IS_DEBUG (symbolP) && S_GET_TYPE (symbolP) == N_TEXT)
-       {
-         /* Ignore symbols starting with "L", as they are local symbols.  */
-         if (*S_GET_NAME (symbolP) == 'L')
-           continue;
-         /* If there is a routine start defined, terminate it.  */
-         if (Current_Routine)
-           VMS_TBT_Routine_End (text_siz, Current_Routine);
-
-         /* Check for & skip dummy labels like "gcc_compiled.".
-          * They're identified by the IN_DEFAULT_SECTION flag.  */
-         if ((S_GET_OTHER (symbolP) & IN_DEFAULT_SECTION) != 0 &&
-             S_GET_VALUE (symbolP) == 0)
-           continue;
-         /* Store the routine begin traceback info.  */
-         VMS_TBT_Routine_Begin (symbolP, Text_Psect);
-         Current_Routine = symbolP;
-         /* Define symbols local to this routine.  */
-         local_symbols_DST (symbolP, Current_Routine);
-         /* Done.  */
-         continue;
-
-       }
-      /* Deal with STAB symbols.  */
-      else if (S_IS_DEBUG (symbolP))
-       {
-         /* Dispatch on STAB type.  */
-         switch (S_GET_RAW_TYPE (symbolP))
-           {
-             /* Line number.  */
-           case N_SLINE:
-             /* Offset the line into the correct portion of the file.  */
-             if (Cur_File->file_number == 0)
-               break;
-             val = S_GET_VALUE (symbolP);
-             /* Sometimes the same offset gets several source lines
-                assigned to it.  We should be selective about which
-                lines we allow, we should prefer lines that are in
-                the main source file when debugging inline functions.  */
-             if (val == Cur_Offset && Cur_File->file_number != 1)
-               break;
-
-             /* Calculate actual debugger source line.  */
-             dsc = S_GET_DESC (symbolP) + Cur_File->offset;
-             S_SET_DESC (symbolP, dsc);
-             /* Define PC/Line correlation.  */
-             if (Cur_Offset == -1)
-               {
-                 /* First N_SLINE; set up initial correlation.  */
-                 VMS_TBT_Line_PC_Correlation (dsc,
-                                              val,
-                                              Text_Psect,
-                                              0);
-               }
-             else if ((dsc - Cur_Line_Number) <= 0)
-               {
-                 /* Line delta is not +ve, we need to close the line and
-                    start a new PC/Line correlation.  */
-                 VMS_TBT_Line_PC_Correlation (0,
-                                              val - Cur_Offset,
-                                              0,
-                                              -1);
-                 VMS_TBT_Line_PC_Correlation (dsc,
-                                              val,
-                                              Text_Psect,
-                                              0);
-               }
-             else
-               {
-                 /* Line delta is +ve, all is well.  */
-                 VMS_TBT_Line_PC_Correlation (dsc - Cur_Line_Number,
-                                              val - Cur_Offset,
-                                              0,
-                                              1);
-               }
-             /* Update the current line/PC info.  */
-             Cur_Line_Number = dsc;
-             Cur_Offset = val;
-             break;
-
-               /* Source file.  */
-           case N_SO:
-             /* Remember that we had a source file and emit
-                the source file debugger record.  */
-             Cur_File = find_file (symbolP);
-             break;
-
-           case N_SOL:
-             /* We need to make sure that we are really in the actual
-                source file when we compute the maximum line number.
-                Otherwise the debugger gets really confused.  */
-             Cur_File = find_file (symbolP);
-             break;
-
-           default:
-             break;
-           }
-       }
-    }
-
-    /* If there is a routine start defined, terminate it
-       (and the line numbers).  */
-    if (Current_Routine)
-      {
-       /* Terminate the line numbers.  */
-       VMS_TBT_Line_PC_Correlation (0,
-                                    text_siz - S_GET_VALUE (Current_Routine),
-                                    0,
-                                    -1);
-       /* Terminate the routine.  */
-       VMS_TBT_Routine_End (text_siz, Current_Routine);
-      }
-
-  /* Write the Traceback End Module TBT record.  */
-  VMS_TBT_Module_End ();
-}
-\f
-
-/* Write a VAX/VMS object file (everything else has been done!).  */
-
-void
-vms_write_object_file (unsigned text_siz, unsigned data_siz, unsigned bss_siz,
-                      fragS *text_frag_root, fragS *data_frag_root)
-{
-  struct VMS_Symbol *vsp;
-
-  /* Initialize program section indices; values get updated later.  */
-  Psect_Number = 0;            /* next Psect Index to use */
-  Text_Psect = -1;             /* Text Psect Index   */
-  Data_Psect = -2;             /* Data Psect Index   JF: Was -1 */
-  Bss_Psect = -3;              /* Bss Psect Index    JF: Was -1 */
-  Ctors_Psect = -4;            /* Ctors Psect Index  */
-  Dtors_Psect = -5;            /* Dtors Psect Index  */
-  /* Initialize other state variables.  */
-  Data_Segment = 0;
-  Local_Initd_Data_Size = 0;
-
-  /* Create the actual output file and populate it with required
-     "module header" information.  */
-  Create_VMS_Object_File ();
-  Write_VMS_MHD_Records ();
-
-  /* Create the Data segment:
-
-     Since this is REALLY hard to do any other way,
-     we actually manufacture the data segment and
-     then store the appropriate values out of it.
-     We need to generate this early, so that globalvalues
-     can be properly emitted.  */
-  if (data_siz > 0)
-    synthesize_data_segment (data_siz, text_siz, data_frag_root);
-
-  /* Global Symbol Directory.  */
-
-  /* Emit globalvalues now.  We must do this before the text psect is
-     defined, or we will get linker warnings about multiply defined
-     symbols.  All of the globalvalues "reference" psect 0, although
-     it really does not have anything to do with it.  */
-  VMS_Emit_Globalvalues (text_siz, data_siz, Data_Segment);
-  /* Define the Text Psect.  */
-  Text_Psect = Psect_Number++;
-  VMS_Psect_Spec ("$code", text_siz, ps_TEXT, 0);
-  /* Define the BSS Psect.  */
-  if (bss_siz > 0)
-    {
-      Bss_Psect = Psect_Number++;
-      VMS_Psect_Spec ("$uninitialized_data", bss_siz, ps_DATA, 0);
-    }
-  /* Define symbols to the linker.  */
-  global_symbol_directory (text_siz, data_siz);
-  /* Define the Data Psect.  */
-  if (data_siz > 0 && Local_Initd_Data_Size > 0)
-    {
-      Data_Psect = Psect_Number++;
-      VMS_Psect_Spec ("$data", Local_Initd_Data_Size, ps_DATA, 0);
-      /* Local initialized data (N_DATA) symbols need to be updated to the
-         proper value of Data_Psect now that it's actually been defined.
-         (A dummy value was used in global_symbol_directory() above.)  */
-      for (vsp = VMS_Symbols; vsp; vsp = vsp->Next)
-       if (vsp->Psect_Index < 0 && S_GET_RAW_TYPE (vsp->Symbol) == N_DATA)
-         vsp->Psect_Index = Data_Psect;
-    }
-
-  if (Ctors_Symbols != 0)
-    {
-      char *ps_name = "$ctors";
-      Ctors_Psect = Psect_Number++;
-      VMS_Psect_Spec (ps_name, Ctors_Symbols->Psect_Offset + XTOR_SIZE,
-                     ps_CTORS, 0);
-      VMS_Global_Symbol_Spec (ps_name, Ctors_Psect,
-                                 0, GBLSYM_DEF|GBLSYM_WEAK);
-      for (vsp = Ctors_Symbols; vsp; vsp = vsp->Next)
-       vsp->Psect_Index = Ctors_Psect;
-    }
-
-  if (Dtors_Symbols != 0)
-    {
-      char *ps_name = "$dtors";
-      Dtors_Psect = Psect_Number++;
-      VMS_Psect_Spec (ps_name, Dtors_Symbols->Psect_Offset + XTOR_SIZE,
-                     ps_DTORS, 0);
-      VMS_Global_Symbol_Spec (ps_name, Dtors_Psect,
-                                 0, GBLSYM_DEF|GBLSYM_WEAK);
-      for (vsp = Dtors_Symbols; vsp; vsp = vsp->Next)
-       vsp->Psect_Index = Dtors_Psect;
-    }
-
-  /* Text Information and Relocation Records.  */
-
-  /* Write the text segment data.  */
-  if (text_siz > 0)
-    vms_fixup_text_section (text_siz, text_frag_root, data_frag_root);
-  /* Write the data segment data, then discard it.  */
-  if (data_siz > 0)
-    {
-      vms_fixup_data_section (data_siz, text_siz);
-      free (Data_Segment),  Data_Segment = 0;
-    }
-
-  if (Ctors_Symbols != 0)
-    vms_fixup_xtors_section (Ctors_Symbols, Ctors_Psect);
-
-  if (Dtors_Symbols != 0)
-    vms_fixup_xtors_section (Dtors_Symbols, Dtors_Psect);
-
-  /* Debugger Symbol Table Records.  */
-
-  vms_build_DST (text_siz);
-
-  /* Wrap things up.  */
-
-  /* Write the End Of Module record.  */
-  if (Entry_Point_Symbol)
-    Write_VMS_EOM_Record (Text_Psect, S_GET_VALUE (Entry_Point_Symbol));
-  else
-    Write_VMS_EOM_Record (-1, (valueT) 0);
-
-  /* All done, close the object file.  */
-  Close_VMS_Object_File ();
-}
diff --git a/gas/config/obj-vms.h b/gas/config/obj-vms.h
deleted file mode 100644 (file)
index bd75896..0000000
+++ /dev/null
@@ -1,554 +0,0 @@
-/* VMS object file format
-   Copyright 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 2000,
-   2002, 2003 Free Software Foundation, Inc.
-
-This file is part of GAS, the GNU Assembler.
-
-GAS 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.
-
-GAS 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 GAS; see the file COPYING.  If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA
-02111-1307, USA.  */
-
-/* Tag to validate a.out object file format processing */
-#define OBJ_VMS 1
-
-#include "targ-cpu.h"
-
-#define LONGWORD_ALIGNMENT     2
-
-/* This macro controls subsection alignment within a section.
- *
- * Under VAX/VMS, the linker (and PSECT specifications)
- * take care of correctly aligning the segments.
- * Doing the alignment here (on initialized data) can
- * mess up the calculation of global data PSECT sizes.
- */
-#define SUB_SEGMENT_ALIGN(SEG, FRCHAIN)        \
-  (((SEG) == data_section) ? 0 : LONGWORD_ALIGNMENT)
-
-/* This flag is used to remember whether we are in the const or the
-   data section.  By and large they are identical, but we set a no-write
-   bit for psects in the const section.  */
-
-extern unsigned char const_flag;
-
-/* This is overloaded onto const_flag, for convenience.  It's used to flag
-   dummy labels like "gcc2_compiled."  which occur before the first .text
-   or .data section directive.  */
-
-#define IN_DEFAULT_SECTION 0x80
-
-/* These are defined in obj-vms.c.  */
-extern const short seg_N_TYPE[];
-extern const segT N_TYPE_seg[];
-
-#undef NO_RELOC
-enum reloc_type
-  {
-    NO_RELOC, RELOC_32
-  };
-
-#define N_BADMAG(x)    (0)
-#define N_TXTOFF(x)    ( sizeof (struct exec) )
-#define N_DATOFF(x)    ( N_TXTOFF(x) + (x).a_text )
-#define N_TROFF(x)     ( N_DATOFF(x) + (x).a_data )
-#define N_DROFF(x)     ( N_TROFF(x) + (x).a_trsize )
-#define N_SYMOFF(x)    ( N_DROFF(x) + (x).a_drsize )
-#define N_STROFF(x)    ( N_SYMOFF(x) + (x).a_syms )
-
-/* We use this copy of the exec header for VMS.  We do not actually use it, but
-   what we actually do is let gas fill in the relevant slots, and when we get
-   around to writing an obj file, we just pick out what we need.  */
-
-struct exec
-{
-  unsigned long a_text;                /* length of text, in bytes */
-  unsigned long a_data;                /* length of data, in bytes */
-  unsigned long a_bss;         /* length of uninitialized data area for file, in bytes */
-  unsigned long a_trsize;      /* length of relocation info for text, in bytes */
-  unsigned long a_drsize;      /* length of relocation info for data, in bytes */
-  unsigned long a_entry;       /* start address */
-  unsigned long a_syms;                /* length of symbol table data in file, in bytes */
-};
-
-typedef struct
-  {
-    struct exec header;                /* a.out header */
-    long string_table_size;    /* names + '\0' + sizeof (int) */
-  }
-object_headers;
-
-/* A single entry in the symbol table
- * (this started as a clone of bout.h's nlist, but much was unneeded).
- */
-struct nlist
-  {
-    char *n_name;
-    unsigned char n_type;      /* See below                            */
-    unsigned char n_other;     /* used for const_flag and "default section" */
-    unsigned   : 16;           /* padding for alignment */
-    int n_desc;                        /* source line number for N_SLINE stabs */
-  };
-
-/* Legal values of n_type (see aout/stab.def for the majority of the codes).
- */
-#define N_UNDF 0               /* Undefined symbol     */
-#define N_ABS  2               /* Absolute symbol      */
-#define N_TEXT 4               /* Text symbol          */
-#define N_DATA 6               /* Data symbol          */
-#define N_BSS  8               /* BSS symbol           */
-#define N_FN   31              /* Filename symbol      */
-
-#define N_EXT  1               /* External symbol (OR'd in with one of above)  */
-#define N_TYPE 036             /* Mask for all the type bits                   */
-
-#define N_STAB 0340            /* Mask for all bits used for SDB entries       */
-
-#include "aout/stab_gnu.h"
-
-/* SYMBOL TABLE */
-/* Symbol table entry data type */
-
-typedef struct nlist obj_symbol_type;  /* Symbol table entry */
-
-/* Symbol table macros and constants */
-
-#define OBJ_SYMFIELD_TYPE struct VMS_Symbol *
-
-/*
- *  Macros to extract information from a symbol table entry.
- *  This syntactic indirection allows independence regarding a.out or coff.
- *  The argument (s) of all these macros is a pointer to a symbol table entry.
- */
-
-/* True if the symbol is external */
-#define S_IS_EXTERNAL(s)       ((s)->sy_symbol.n_type & N_EXT)
-
-/* True if symbol has been defined, ie is in N_{TEXT,DATA,BSS,ABS} or N_EXT */
-#define S_IS_DEFINED(s)                (S_GET_TYPE(s) != N_UNDF)
-
-#define S_IS_COMMON(s) (S_GET_TYPE(s) == N_UNDF && S_GET_VALUE(s) != 0)
-
-/* Return true for symbols that should not be reduced to section
-   symbols or eliminated from expressions, because they may be
-   overridden by the linker.  */
-#define S_FORCE_RELOC(s, strict) \
-  (!SEG_NORMAL (S_GET_SEGMENT (s)))
-
-#define S_IS_REGISTER(s)       ((s)->sy_symbol.n_type == N_REGISTER)
-
-/* True if a debug special symbol entry */
-#define S_IS_DEBUG(s)          ((s)->sy_symbol.n_type & N_STAB)
-/* True if a symbol is local symbol name */
-/* A symbol name whose name begin with ^A is a gas internal pseudo symbol
-   nameless symbols come from .stab directives.  */
-#define S_IS_LOCAL(s)          (S_GET_NAME(s) && \
-                                !S_IS_DEBUG(s) && \
-                                (strchr(S_GET_NAME(s), '\001') != 0 || \
-                                 strchr(S_GET_NAME(s), '\002') != 0 || \
-                                 (S_LOCAL_NAME(s) && !flag_keep_locals)))
-/* True if a symbol is not defined in this file */
-#define S_IS_EXTERN(s)         ((s)->sy_symbol.n_type & N_EXT)
-/* True if the symbol has been generated because of a .stabd directive */
-#define S_IS_STABD(s)          (S_GET_NAME(s) == (char *)0)
-
-/* Accessors */
-/* The name of the symbol */
-#define S_GET_NAME(s)          ((s)->sy_symbol.n_name)
-/* The pointer to the string table */
-#define S_GET_OFFSET(s)                ((s)->sy_name_offset)
-/* The raw type of the symbol */
-#define S_GET_RAW_TYPE(s)              ((s)->sy_symbol.n_type)
-/* The type of the symbol */
-#define S_GET_TYPE(s)          ((s)->sy_symbol.n_type & N_TYPE)
-/* The numeric value of the segment */
-#define S_GET_SEGMENT(s)       (N_TYPE_seg[S_GET_TYPE(s)])
-/* The n_other expression value */
-#define S_GET_OTHER(s)         ((s)->sy_symbol.n_other)
-/* The n_desc expression value */
-#define S_GET_DESC(s)          ((s)->sy_symbol.n_desc)
-
-/* Modifiers */
-/* Assume that a symbol cannot be simultaneously in more than on segment */
-/* set segment */
-#define S_SET_SEGMENT(s,seg)   ((s)->sy_symbol.n_type &= ~N_TYPE,(s)->sy_symbol.n_type|=SEGMENT_TO_SYMBOL_TYPE(seg))
-/* The symbol is external */
-#define S_SET_EXTERNAL(s)      ((s)->sy_symbol.n_type |= N_EXT)
-/* The symbol is not external */
-#define S_CLEAR_EXTERNAL(s)    ((s)->sy_symbol.n_type &= ~N_EXT)
-/* Set the name of the symbol */
-#define S_SET_NAME(s,v)                ((s)->sy_symbol.n_name = (v))
-/* Set the offset in the string table */
-#define S_SET_OFFSET(s,v)      ((s)->sy_name_offset = (v))
-/* Set the n_other expression value */
-#define S_SET_OTHER(s,v)       ((s)->sy_symbol.n_other = (v))
-/* Set the n_desc expression value */
-#define S_SET_DESC(s,v)                ((s)->sy_symbol.n_desc = (v))
-/* Set the n_type expression value */
-#define S_SET_TYPE(s,v)                ((s)->sy_symbol.n_type = (v))
-
-/* File header macro and type definition */
-
-#define H_GET_TEXT_SIZE(h)             ((h)->header.a_text)
-#define H_GET_DATA_SIZE(h)             ((h)->header.a_data)
-#define H_GET_BSS_SIZE(h)              ((h)->header.a_bss)
-
-#define H_SET_TEXT_SIZE(h,v)           ((h)->header.a_text = md_section_align(SEG_TEXT, (v)))
-#define H_SET_DATA_SIZE(h,v)           ((h)->header.a_data = md_section_align(SEG_DATA, (v)))
-#define H_SET_BSS_SIZE(h,v)            ((h)->header.a_bss = md_section_align(SEG_BSS, (v)))
-
-#define H_SET_STRING_SIZE(h,v)         ((h)->string_table_size = (v))
-#define H_SET_SYMBOL_TABLE_SIZE(h,v)   ((h)->header.a_syms = (v) * \
-                                        sizeof (struct nlist))
-
-/* line numbering stuff.  */
-#define OBJ_EMIT_LINENO(a, b, c)       {;}
-
-#define obj_symbol_new_hook(s) {;}
-
-/* Force structure tags into scope so that their use in prototypes
-   will never be their first occurrence.  */
-struct fix;
-struct frag;
-
-/* obj-vms routines visible to the rest of gas.  */
-
-extern void tc_aout_fix_to_chars PARAMS ((char *,struct fix *,relax_addressT));
-
-extern int vms_resolve_symbol_redef PARAMS ((symbolS *));
-#define RESOLVE_SYMBOL_REDEFINITION(X) vms_resolve_symbol_redef(X)
-
-/* Compiler-generated label "__vax_g_doubles" is used to augment .stabs.  */
-extern void vms_check_for_special_label PARAMS ((symbolS *));
-#define obj_frob_label(X) vms_check_for_special_label(X)
-
-extern void vms_check_for_main PARAMS ((void));
-
-extern void vms_write_object_file PARAMS ((unsigned,unsigned,unsigned,
-                                          struct frag *,struct frag *));
-
-/* VMS executables are nothing like a.out, but the VMS port of gcc uses
-   a.out format stabs which obj-vms.c then translates.  */
-
-#define AOUT_STABS
-
-\f
-#ifdef WANT_VMS_OBJ_DEFS
-
-/* The rest of this file contains definitions for constants used within
-   the actual VMS object file.  We do not use a $ in the symbols (as per
-   usual VMS convention) since System V gags on it.  */
-
-#define        OBJ_S_C_HDR     0
-#define        OBJ_S_C_HDR_MHD 0
-#define        OBJ_S_C_HDR_LNM 1
-#define        OBJ_S_C_HDR_SRC 2
-#define        OBJ_S_C_HDR_TTL 3
-#define        OBJ_S_C_HDR_CPR 4
-#define        OBJ_S_C_HDR_MTC 5
-#define        OBJ_S_C_HDR_GTX 6
-#define        OBJ_S_C_GSD     1
-#define        OBJ_S_C_GSD_PSC 0
-#define        OBJ_S_C_GSD_SYM 1
-#define        OBJ_S_C_GSD_EPM 2
-#define        OBJ_S_C_GSD_PRO 3
-#define        OBJ_S_C_GSD_SYMW        4
-#define        OBJ_S_C_GSD_EPMW        5
-#define        OBJ_S_C_GSD_PROW        6
-#define        OBJ_S_C_GSD_IDC 7
-#define        OBJ_S_C_GSD_ENV 8
-#define        OBJ_S_C_GSD_LSY 9
-#define        OBJ_S_C_GSD_LEPM        10
-#define        OBJ_S_C_GSD_LPRO        11
-#define        OBJ_S_C_GSD_SPSC        12
-#define        OBJ_S_C_TIR     2
-#define        OBJ_S_C_EOM     3
-#define        OBJ_S_C_DBG     4
-#define        OBJ_S_C_TBT     5
-#define        OBJ_S_C_LNK     6
-#define        OBJ_S_C_EOMW    7
-#define        OBJ_S_C_MAXRECTYP       7
-#define        OBJ_S_K_SUBTYP  1
-#define        OBJ_S_C_SUBTYP  1
-#define        OBJ_S_C_MAXRECSIZ       2048
-#define        OBJ_S_C_STRLVL  0
-#define        OBJ_S_C_SYMSIZ  31
-#define        OBJ_S_C_STOREPLIM       -1
-#define        OBJ_S_C_PSCALILIM       9
-\f
-#define        MHD_S_C_MHD     0
-#define        MHD_S_C_LNM     1
-#define        MHD_S_C_SRC     2
-#define        MHD_S_C_TTL     3
-#define        MHD_S_C_CPR     4
-#define        MHD_S_C_MTC     5
-#define        MHD_S_C_GTX     6
-#define        MHD_S_C_MAXHDRTYP       6
-\f
-#define        GSD_S_K_ENTRIES 1
-#define        GSD_S_C_ENTRIES 1
-#define        GSD_S_C_PSC     0
-#define        GSD_S_C_SYM     1
-#define        GSD_S_C_EPM     2
-#define        GSD_S_C_PRO     3
-#define        GSD_S_C_SYMW    4
-#define        GSD_S_C_EPMW    5
-#define        GSD_S_C_PROW    6
-#define        GSD_S_C_IDC     7
-#define        GSD_S_C_ENV     8
-#define        GSD_S_C_LSY     9
-#define        GSD_S_C_LEPM    10
-#define        GSD_S_C_LPRO    11
-#define        GSD_S_C_SPSC    12
-#define        GSD_S_C_SYMV    13
-#define        GSD_S_C_EPMV    14
-#define        GSD_S_C_PROV    15
-#define        GSD_S_C_MAXRECTYP       15
-\f
-#define        GSY_S_M_WEAK    1
-#define        GSY_S_M_DEF     2
-#define        GSY_S_M_UNI     4
-#define        GSY_S_M_REL     8
-
-#define        LSY_S_M_DEF     2
-#define        LSY_S_M_REL     8
-
-#define        ENV_S_M_DEF     1
-#define        ENV_S_M_NESTED  2
-\f
-#define        GPS_S_M_PIC     1
-#define        GPS_S_M_LIB     2
-#define        GPS_S_M_OVR     4
-#define        GPS_S_M_REL     8
-#define        GPS_S_M_GBL     16
-#define        GPS_S_M_SHR     32
-#define        GPS_S_M_EXE     64
-#define        GPS_S_M_RD      128
-#define        GPS_S_M_WRT     256
-#define        GPS_S_M_VEC     512
-#define        GPS_S_K_NAME    9
-#define        GPS_S_C_NAME    9
-\f
-#define        TIR_S_C_STA_GBL 0
-#define        TIR_S_C_STA_SB  1
-#define        TIR_S_C_STA_SW  2
-#define        TIR_S_C_STA_LW  3
-#define        TIR_S_C_STA_PB  4
-#define        TIR_S_C_STA_PW  5
-#define        TIR_S_C_STA_PL  6
-#define        TIR_S_C_STA_UB  7
-#define        TIR_S_C_STA_UW  8
-#define        TIR_S_C_STA_BFI 9
-#define        TIR_S_C_STA_WFI 10
-#define        TIR_S_C_STA_LFI 11
-#define        TIR_S_C_STA_EPM 12
-#define        TIR_S_C_STA_CKARG       13
-#define        TIR_S_C_STA_WPB 14
-#define        TIR_S_C_STA_WPW 15
-#define        TIR_S_C_STA_WPL 16
-#define        TIR_S_C_STA_LSY 17
-#define        TIR_S_C_STA_LIT 18
-#define        TIR_S_C_STA_LEPM        19
-#define        TIR_S_C_MAXSTACOD       19
-#define        TIR_S_C_MINSTOCOD       20
-#define        TIR_S_C_STO_SB  20
-#define        TIR_S_C_STO_SW  21
-#define        TIR_S_C_STO_L   22
-#define        TIR_S_C_STO_BD  23
-#define        TIR_S_C_STO_WD  24
-#define        TIR_S_C_STO_LD  25
-#define        TIR_S_C_STO_LI  26
-#define        TIR_S_C_STO_PIDR        27
-#define        TIR_S_C_STO_PICR        28
-#define        TIR_S_C_STO_RSB 29
-#define        TIR_S_C_STO_RSW 30
-#define        TIR_S_C_STO_RL  31
-#define        TIR_S_C_STO_VPS 32
-#define        TIR_S_C_STO_USB 33
-#define        TIR_S_C_STO_USW 34
-#define        TIR_S_C_STO_RUB 35
-#define        TIR_S_C_STO_RUW 36
-#define        TIR_S_C_STO_B   37
-#define        TIR_S_C_STO_W   38
-#define        TIR_S_C_STO_RB  39
-#define        TIR_S_C_STO_RW  40
-#define        TIR_S_C_STO_RIVB        41
-#define        TIR_S_C_STO_PIRR        42
-#define        TIR_S_C_MAXSTOCOD       42
-#define        TIR_S_C_MINOPRCOD       50
-#define        TIR_S_C_OPR_NOP 50
-#define        TIR_S_C_OPR_ADD 51
-#define        TIR_S_C_OPR_SUB 52
-#define        TIR_S_C_OPR_MUL 53
-#define        TIR_S_C_OPR_DIV 54
-#define        TIR_S_C_OPR_AND 55
-#define        TIR_S_C_OPR_IOR 56
-#define        TIR_S_C_OPR_EOR 57
-#define        TIR_S_C_OPR_NEG 58
-#define        TIR_S_C_OPR_COM 59
-#define        TIR_S_C_OPR_INSV        60
-#define        TIR_S_C_OPR_ASH 61
-#define        TIR_S_C_OPR_USH 62
-#define        TIR_S_C_OPR_ROT 63
-#define        TIR_S_C_OPR_SEL 64
-#define        TIR_S_C_OPR_REDEF       65
-#define        TIR_S_C_OPR_DFLIT       66
-#define        TIR_S_C_MAXOPRCOD       66
-#define        TIR_S_C_MINCTLCOD       80
-#define        TIR_S_C_CTL_SETRB       80
-#define        TIR_S_C_CTL_AUGRB       81
-#define        TIR_S_C_CTL_DFLOC       82
-#define        TIR_S_C_CTL_STLOC       83
-#define        TIR_S_C_CTL_STKDL       84
-#define        TIR_S_C_MAXCTLCOD       84
-\f
-/*
- *     Debugger symbol definitions:  These are done by hand, as no
- *                                     machine-readable version seems
- *                                     to be available.
- */
-#define DST_S_C_C        7     /* Language == "C"      */
-#define DST_S_C_CXX     15     /* Language == "C++"    */
-#define DST_S_C_VERSION        153
-#define        DST_S_C_SOURCE  155     /* Source file          */
-#define DST_S_C_PROLOG 162
-#define        DST_S_C_BLKBEG  176     /* Beginning of block   */
-#define        DST_S_C_BLKEND  177     /* End of block */
-#define DST_S_C_ENTRY  181
-#define DST_S_C_PSECT  184
-#define        DST_S_C_LINE_NUM        185     /* Line Number          */
-#define DST_S_C_LBLORLIT       186
-#define DST_S_C_LABEL  187
-#define        DST_S_C_MODBEG  188     /* Beginning of module  */
-#define        DST_S_C_MODEND  189     /* End of module        */
-#define        DST_S_C_RTNBEG  190     /* Beginning of routine */
-#define        DST_S_C_RTNEND  191     /* End of routine       */
-#define        DST_S_C_DELTA_PC_W      1       /* Incr PC      */
-#define        DST_S_C_INCR_LINUM      2       /* Incr Line #  */
-#define        DST_S_C_INCR_LINUM_W    3       /* Incr Line #  */
-#define DST_S_C_SET_LINUM_INCR 4
-#define DST_S_C_SET_LINUM_INCR_W       5
-#define DST_S_C_RESET_LINUM_INCR       6
-#define DST_S_C_BEG_STMT_MODE  7
-#define DST_S_C_END_STMT_MODE  8
-#define        DST_S_C_SET_LINE_NUM    9       /* Set Line #   */
-#define DST_S_C_SET_PC         10
-#define DST_S_C_SET_PC_W               11
-#define DST_S_C_SET_PC_L               12
-#define DST_S_C_SET_STMTNUM    13
-#define DST_S_C_TERM           14      /* End of lines */
-#define DST_S_C_TERM_W         15      /* End of lines */
-#define        DST_S_C_SET_ABS_PC      16      /* Set PC       */
-#define        DST_S_C_DELTA_PC_L      17      /* Incr PC      */
-#define DST_S_C_INCR_LINUM_L   18      /* Incr Line #  */
-#define DST_S_C_SET_LINUM_B    19      /* Set Line #   */
-#define DST_S_C_SET_LINUM_L    20      /* Set Line #   */
-#define        DST_S_C_TERM_L          21      /* End of lines */
-/* these are used with DST_S_C_SOURCE */
-#define DST_S_C_SRC_DECLFILE    1      /* Declare source file */
-#define DST_S_C_SRC_SETFILE     2      /* Set source file */
-#define DST_S_C_SRC_SETREC_L    3      /* Set record, longword value */
-#define DST_S_C_SRC_SETREC_W    4      /* Set record, word value */
-#define DST_S_C_SRC_DEFLINES_W 10      /* # of line, word counter */
-#define DST_S_C_SRC_DEFLINES_B 11      /* # of line, byte counter */
-#define DST_S_C_SRC_FORMFEED   16      /* ^L counts as a record */
-/* the following are the codes for the various data types.  Anything not on
- * the list is included under 'advanced_type'
- */
-#define DBG_S_C_UCHAR          0x02
-#define DBG_S_C_USINT          0x03
-#define DBG_S_C_ULINT          0x04
-#define DBG_S_C_UQUAD          0x05
-#define DBG_S_C_SCHAR          0x06
-#define DBG_S_C_SSINT          0x07
-#define DBG_S_C_SLINT          0x08
-#define DBG_S_C_SQUAD          0x09
-#define DBG_S_C_REAL4          0x0a
-#define DBG_S_C_REAL8          0x0b            /* D_float double */
-#define DBG_S_C_COMPLX4                0x0c            /* 2xF_float complex float */
-#define DBG_S_C_COMPLX8                0x0d            /* 2xD_float complex double */
-#define DBG_S_C_REAL8_G                0x1b            /* G_float double */
-#define DBG_S_C_COMPLX8_G      0x1d            /* 2xG_float complex double */
-#define DBG_S_C_FUNCTION_ADDR  0x17
-#define DBG_S_C_ADVANCED_TYPE  0xa3
-/*  Some of these are just for future reference.  [pr]
- */
-#define DBG_S_C_UBITA          0x01    /* unsigned, aligned bit field */
-#define DBG_S_C_UBITU          0x22    /* unsigned, unaligned bit field */
-#define DBG_S_C_SBITA          0x29    /* signed, aligned bit field */
-#define DBG_S_C_SBITU          0x2a    /* signed, unaligned bit field */
-#define DBG_S_C_CSTRING                0x2e    /* asciz ('\0' terminated) string */
-#define DBG_S_C_WCHAR          0x38    /* wchar_t */
-/*  These are descriptor class codes.
- */
-#define DSC_K_CLASS_S          0x01    /* static (fixed length) */
-#define DSC_K_CLASS_D          0x02    /* dynamic string (not via malloc!) */
-#define DSC_K_CLASS_A          0x04    /* array */
-#define DSC_K_CLASS_UBS                0x0d    /* unaligned bit string */
-/*  These are the codes that are used to generate the definitions of struct
- *  union and enum records
- */
-#define DBG_S_C_ENUM_ITEM              0xa4
-#define DBG_S_C_ENUM_START             0xa5
-#define DBG_S_C_ENUM_END               0xa6
-#define DBG_S_C_STRUCT_ITEM            DST_K_VFLAGS_BITOFFS    /* 0xff */
-#define DBG_S_C_STRUCT_START           0xab
-#define DBG_S_C_STRUCT_END             0xac
-#define DST_K_TYPSPEC                  0xaf            /* type specification */
-/* These codes are used in the generation of the symbol definition records
- */
-#define DST_K_VFLAGS_NOVAL             0x80    /* struct definition only */
-#define DST_K_VFLAGS_DSC               0xfa    /* descriptor used */
-#define DST_K_VFLAGS_TVS               0xfb    /* trailing value specified */
-#define DST_K_VS_FOLLOWS               0xfd    /* value spec follows */
-#define DST_K_VFLAGS_BITOFFS           0xff    /* value contains bit offset */
-#define DST_K_VALKIND_LITERAL  0
-#define DST_K_VALKIND_ADDR     1
-#define DST_K_VALKIND_DESC     2
-#define DST_K_VALKIND_REG      3
-#define DST_K_REG_VAX_AP       0x0c    /* R12 */
-#define DST_K_REG_VAX_FP       0x0d    /* R13 */
-#define DST_K_REG_VAX_SP       0x0e    /* R14 */
-#define DST_V_VALKIND          0       /* offset of valkind field */
-#define DST_V_INDIRECT         2       /* offset to indirect bit */
-#define DST_V_DISP             3       /* offset to displacement bit */
-#define DST_V_REGNUM           4       /* offset to register number */
-#define DST_M_INDIRECT         (1<<DST_V_INDIRECT)
-#define DST_M_DISP             (1<<DST_V_DISP)
-#define DBG_C_FUNCTION_PARAM   /* 0xc9 */      \
-       (DST_K_VALKIND_ADDR|DST_M_DISP|(DST_K_REG_VAX_AP<<DST_V_REGNUM))
-#define DBG_C_LOCAL_SYM                /* 0xd9 */      \
-       (DST_K_VALKIND_ADDR|DST_M_DISP|(DST_K_REG_VAX_FP<<DST_V_REGNUM))
-/* Kinds of value specifications
- */
-#define DST_K_VS_ALLOC_SPLIT   3       /* split lifetime */
-/* Kinds of type specifications
- */
-#define DST_K_TS_ATOM          0x01    /* atomic type specification */
-#define DST_K_TS_DSC           0x02    /* descriptor type spec */
-#define DST_K_TS_IND           0x03    /* indirect type specification */
-#define DST_K_TS_TPTR          0x04    /* typed pointer type spec */
-#define DST_K_TS_PTR           0x05    /* pointer type spec */
-#define DST_K_TS_ARRAY         0x07    /* array type spec */
-#define DST_K_TS_NOV_LENG      0x0e    /* novel length type spec */
-/*  These are the codes that are used in the suffix records to determine the
- *  actual data type
- */
-#define DBG_S_C_BASIC                  DST_K_TS_ATOM
-#define DBG_S_C_BASIC_ARRAY            DST_K_TS_DSC
-#define DBG_S_C_STRUCT                 DST_K_TS_IND
-#define DBG_S_C_POINTER                        DST_K_TS_TPTR
-#define DBG_S_C_VOID                   DST_K_TS_PTR
-#define DBG_S_C_COMPLEX_ARRAY          DST_K_TS_ARRAY
-
-#endif /* WANT_VMS_OBJ_DEFS */
diff --git a/gas/config/vms-conf.h b/gas/config/vms-conf.h
deleted file mode 100644 (file)
index 1c17074..0000000
+++ /dev/null
@@ -1,179 +0,0 @@
-/* vms-conf.h.  Generated manually from conf.in,
-   and used by config-gas.com when constructing config.h.  */
-
-/* Define if using alloca.c.  */
-#ifdef __GNUC__
-#undef C_ALLOCA
-#else
-#define C_ALLOCA
-#endif
-
-/* Define to one of _getb67, GETB67, getb67 for Cray-2 and Cray-YMP systems.
-   This function is required for alloca.c support on those systems.  */
-#undef CRAY_STACKSEG_END
-
-/* Define if you have alloca, as a function or macro.  */
-#undef HAVE_ALLOCA
-
-/* Define if you have <alloca.h> and it should be used (not on Ultrix).  */
-#undef HAVE_ALLOCA_H
-
-/* Define as __inline if that's what the C compiler calls it.  */
-#ifdef __GNUC__
-#undef inline
-#else
-#define inline
-#endif
-
-/* If using the C implementation of alloca, define if you know the
-   direction of stack growth for your system; otherwise it will be
-   automatically deduced at run-time.
- STACK_DIRECTION > 0 => grows toward higher addresses
- STACK_DIRECTION < 0 => grows toward lower addresses
- STACK_DIRECTION = 0 => direction of growth unknown
- */
-#define STACK_DIRECTION (-1)
-
-/* Define if lex declares yytext as a char * by default, not a char[].  */
-#undef YYTEXT_POINTER
-
-/* Name of package.  */
-#undef PACKAGE
-
-/* Version of package.  */
-/* Define in by config-gas.com */
-/* #undef VERSION */
-
-/* Should gas use high-level BFD interfaces?  */
-#undef BFD_ASSEMBLER
-
-/* Some assert/preprocessor combinations are incapable of handling
-   certain kinds of constructs in the argument of assert.  For example,
-   quoted strings (if requoting isn't done right) or newlines.  */
-#ifdef __GNUC__
-#undef BROKEN_ASSERT
-#else
-#define BROKEN_ASSERT
-#endif
-
-/* If we aren't doing cross-assembling, some operations can be optimized,
-   since byte orders and value sizes don't need to be adjusted.  */
-#undef CROSS_COMPILE
-
-/* Some gas code wants to know these parameters.  */
-#define TARGET_ALIAS   "vms"
-#define TARGET_CPU     "vax"
-#define TARGET_CANONICAL       "vax-dec-vms"
-#define TARGET_OS      "vms"
-#define TARGET_VENDOR  "dec"
-
-/* Sometimes the system header files don't declare strstr.  */
-#undef NEED_DECLARATION_STRSTR
-
-/* Sometimes the system header files don't declare malloc and realloc.  */
-#undef NEED_DECLARATION_MALLOC
-
-/* Sometimes the system header files don't declare free.  */
-#undef NEED_DECLARATION_FREE
-
-/* Sometimes the system header files don't declare sbrk.  */
-#undef NEED_DECLARATION_SBRK
-
-/* Sometimes errno.h doesn't declare errno itself.  */
-#undef NEED_DECLARATION_ERRNO
-
-#undef MANY_SEGMENTS
-
-/* The configure script defines this for some targets based on the
-   target name used.  It is not always defined.  */
-#undef TARGET_BYTES_BIG_ENDIAN
-
-/* Needed only for some configurations that can produce multiple output
-   formats.  */
-#undef DEFAULT_EMULATION
-#undef EMULATIONS
-#undef USE_EMULATIONS
-#undef OBJ_MAYBE_AOUT
-#undef OBJ_MAYBE_BOUT
-#undef OBJ_MAYBE_COFF
-#undef OBJ_MAYBE_ECOFF
-#undef OBJ_MAYBE_ELF
-#undef OBJ_MAYBE_GENERIC
-#undef OBJ_MAYBE_HP300
-#undef OBJ_MAYBE_IEEE
-#undef OBJ_MAYBE_SOM
-#undef OBJ_MAYBE_VMS
-
-/* Used for some of the COFF configurations, when the COFF code needs
-   to select something based on the CPU type before it knows it...  */
-#undef I386COFF
-#undef M68KCOFF
-#undef M88KCOFF
-
-/* Using cgen code?  */
-#undef USING_CGEN
-
-/* Needed only for sparc configuration.  */
-#undef DEFAULT_ARCH
-
-/* Needed only for PowerPC Solaris.  */
-#undef TARGET_SOLARIS_COMMENT
-
-/* Needed only for SCO 5.  */
-#undef SCO_ELF
-
-/* Define if you have the remove function.  */
-#define HAVE_REMOVE
-
-/* Define if you have the sbrk function.  */
-/* sbrk() is available, but we don't want gas to use it.  */
-#undef HAVE_SBRK
-
-/* Define if you have the unlink function.  */
-#undef HAVE_UNLINK
-
-/* Define if you have the <errno.h> header file.  */
-#define HAVE_ERRNO_H
-
-/* Define if you have the <memory.h> header file.  */
-#undef HAVE_MEMORY_H
-
-/* Define if you have the <stdarg.h> header file.  */
-#define HAVE_STDARG_H
-
-/* Define if you have the <stdlib.h> header file.  */
-#define HAVE_STDLIB_H
-
-/* Define if you have the <string.h> header file.  */
-#define HAVE_STRING_H
-
-/* Define if you have the <strings.h> header file.  */
-#undef HAVE_STRINGS_H
-
-/* Define if you have the <sys/types.h> header file.  */
-#ifdef __GNUC__
-#define HAVE_SYS_TYPES_H
-#else
-#undef HAVE_SYS_TYPES_H
-#endif
-
-/* Define if you have the <unistd.h> header file.  */
-#define HAVE_UNISTD_H  /* config-gas.com will make one if necessary */
-
-/* Define if you have the <varargs.h> header file.  */
-#undef HAVE_VARARGS_H
-
-/* VMS-specific:  we need to set up EXIT_xxx here because the default
-   values in as.h are inappropriate for VMS, but we also want to prevent
-   as.h's inclusion of <stdlib.h> from triggering redefinition warnings.
-   <stdlib.h> guards itself against multiple inclusion, so including it
-   here turns as.h's later #include into a no-op.  (We can't simply use
-   #ifndef HAVE_STDLIB_H here, because the <stdlib.h> in several older
-   gcc-vms distributions neglects to define these two required macros.)  */
-#ifdef HAVE_STDLIB_H
-#include <stdlib.h>
-#undef EXIT_SUCCESS
-#undef EXIT_FAILURE
-#endif
-#define EXIT_SUCCESS 1                 /* SS$_NORMAL, STS$K_SUCCESS */
-#define EXIT_FAILURE 0x10000002                /* (STS$K_ERROR | STS$M_INHIB_MSG) */
index 9092d4b..5fa5da8 100755 (executable)
@@ -971,7 +971,7 @@ esac
     else
       echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
     fi
-    cd $ac_popdir
+    cd "$ac_popdir"
   done
 fi
 
@@ -1994,8 +1994,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag"
-                        || test ! -s conftest.err'
+        { ac_try='test -z "$ac_c_werror_flag"                   || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -2053,8 +2052,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag"
-                        || test ! -s conftest.err'
+        { ac_try='test -z "$ac_c_werror_flag"                   || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -2170,8 +2168,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag"
-                        || test ! -s conftest.err'
+        { ac_try='test -z "$ac_c_werror_flag"                   || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -2225,8 +2222,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag"
-                        || test ! -s conftest.err'
+        { ac_try='test -z "$ac_c_werror_flag"                   || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -2271,8 +2267,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag"
-                        || test ! -s conftest.err'
+        { ac_try='test -z "$ac_c_werror_flag"                   || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -2316,8 +2311,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag"
-                        || test ! -s conftest.err'
+        { ac_try='test -z "$ac_c_werror_flag"                   || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -2395,8 +2389,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag"
-                        || test ! -s conftest.err'
+        { ac_try='test -z "$ac_c_werror_flag"                   || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -2450,8 +2443,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag"
-                        || test ! -s conftest.err'
+        { ac_try='test -z "$ac_c_werror_flag"                   || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -3811,7 +3803,7 @@ test x"$pic_mode" = xno && libtool_flags="$libtool_flags --prefer-non-pic"
 case $host in
 *-*-irix6*)
   # Find out which ABI we are using.
-  echo '#line 3814 "configure"' > conftest.$ac_ext
+  echo '#line 3806 "configure"' > conftest.$ac_ext
   if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
@@ -3907,8 +3899,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag"
-                        || test ! -s conftest.err'
+        { ac_try='test -z "$ac_c_werror_flag"                   || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -4165,8 +4156,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag"
-                        || test ! -s conftest.err'
+        { ac_try='test -z "$ac_c_werror_flag"                   || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -4208,8 +4198,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag"
-                        || test ! -s conftest.err'
+        { ac_try='test -z "$ac_c_werror_flag"                   || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -4266,8 +4255,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag"
-                        || test ! -s conftest.err'
+        { ac_try='test -z "$ac_c_werror_flag"                   || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -4969,11 +4957,6 @@ cat >>confdefs.h <<\_ACEOF
 #define OBJ_MAYBE_SOM 1
 _ACEOF
      ;;
-      vms)
-cat >>confdefs.h <<\_ACEOF
-#define OBJ_MAYBE_VMS 1
-_ACEOF
-     ;;
     esac
     extra_objects="$extra_objects obj-$fmt.o"
   done
@@ -5455,8 +5438,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag"
-                        || test ! -s conftest.err'
+        { ac_try='test -z "$ac_c_werror_flag"                   || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -5514,8 +5496,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag"
-                        || test ! -s conftest.err'
+        { ac_try='test -z "$ac_c_werror_flag"                   || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -5631,8 +5612,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag"
-                        || test ! -s conftest.err'
+        { ac_try='test -z "$ac_c_werror_flag"                   || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -5686,8 +5666,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag"
-                        || test ! -s conftest.err'
+        { ac_try='test -z "$ac_c_werror_flag"                   || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -5732,8 +5711,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag"
-                        || test ! -s conftest.err'
+        { ac_try='test -z "$ac_c_werror_flag"                   || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -5777,8 +5755,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag"
-                        || test ! -s conftest.err'
+        { ac_try='test -z "$ac_c_werror_flag"                   || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -5940,8 +5917,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag"
-                        || test ! -s conftest.err'
+        { ac_try='test -z "$ac_c_werror_flag"                   || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -6007,8 +5983,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag"
-                        || test ! -s conftest.err'
+        { ac_try='test -z "$ac_c_werror_flag"                   || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -6097,8 +6072,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag"
-                        || test ! -s conftest.err'
+        { ac_try='test -z "$ac_c_werror_flag"                   || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -6501,8 +6475,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag"
-                        || test ! -s conftest.err'
+        { ac_try='test -z "$ac_c_werror_flag"                   || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -6709,8 +6682,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag"
-                        || test ! -s conftest.err'
+        { ac_try='test -z "$ac_c_werror_flag"                   || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -6770,8 +6742,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag"
-                        || test ! -s conftest.err'
+        { ac_try='test -z "$ac_c_werror_flag"                   || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -6850,8 +6821,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag"
-                        || test ! -s conftest.err'
+        { ac_try='test -z "$ac_c_werror_flag"                   || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -6916,8 +6886,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag"
-                        || test ! -s conftest.err'
+        { ac_try='test -z "$ac_c_werror_flag"                   || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -6982,8 +6951,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag"
-                        || test ! -s conftest.err'
+        { ac_try='test -z "$ac_c_werror_flag"                   || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -7047,8 +7015,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag"
-                        || test ! -s conftest.err'
+        { ac_try='test -z "$ac_c_werror_flag"                   || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -7129,8 +7096,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag"
-                        || test ! -s conftest.err'
+        { ac_try='test -z "$ac_c_werror_flag"                   || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -7271,8 +7237,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag"
-                        || test ! -s conftest.err'
+        { ac_try='test -z "$ac_c_werror_flag"                   || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -7410,8 +7375,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag"
-                        || test ! -s conftest.err'
+        { ac_try='test -z "$ac_c_werror_flag"                   || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -7595,8 +7559,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag"
-                        || test ! -s conftest.err'
+        { ac_try='test -z "$ac_c_werror_flag"                   || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -7847,8 +7810,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag"
-                        || test ! -s conftest.err'
+        { ac_try='test -z "$ac_c_werror_flag"                   || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -8042,8 +8004,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag"
-                        || test ! -s conftest.err'
+        { ac_try='test -z "$ac_c_werror_flag"                   || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -8146,8 +8107,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag"
-                        || test ! -s conftest.err'
+        { ac_try='test -z "$ac_c_werror_flag"                   || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -8218,8 +8178,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag"
-                        || test ! -s conftest.err'
+        { ac_try='test -z "$ac_c_werror_flag"                   || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -8316,8 +8275,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag"
-                        || test ! -s conftest.err'
+        { ac_try='test -z "$ac_c_werror_flag"                   || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -8453,8 +8411,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag"
-                        || test ! -s conftest.err'
+        { ac_try='test -z "$ac_c_werror_flag"                   || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -8518,8 +8475,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag"
-                        || test ! -s conftest.err'
+        { ac_try='test -z "$ac_c_werror_flag"                   || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -8574,8 +8530,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag"
-                        || test ! -s conftest.err'
+        { ac_try='test -z "$ac_c_werror_flag"                   || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -8715,8 +8670,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag"
-                        || test ! -s conftest.err'
+        { ac_try='test -z "$ac_c_werror_flag"                   || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -8849,8 +8803,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag"
-                        || test ! -s conftest.err'
+        { ac_try='test -z "$ac_c_werror_flag"                   || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -9127,8 +9080,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag"
-                        || test ! -s conftest.err'
+        { ac_try='test -z "$ac_c_werror_flag"                   || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -9349,8 +9301,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag"
-                        || test ! -s conftest.err'
+        { ac_try='test -z "$ac_c_werror_flag"                   || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -9514,8 +9465,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag"
-                        || test ! -s conftest.err'
+        { ac_try='test -z "$ac_c_werror_flag"                   || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -9596,8 +9546,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag"
-                        || test ! -s conftest.err'
+        { ac_try='test -z "$ac_c_werror_flag"                   || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -9738,8 +9687,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag"
-                        || test ! -s conftest.err'
+        { ac_try='test -z "$ac_c_werror_flag"                   || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -9871,8 +9819,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag"
-                        || test ! -s conftest.err'
+        { ac_try='test -z "$ac_c_werror_flag"                   || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -9985,8 +9932,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag"
-                        || test ! -s conftest.err'
+        { ac_try='test -z "$ac_c_werror_flag"                   || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -10089,8 +10035,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag"
-                        || test ! -s conftest.err'
+        { ac_try='test -z "$ac_c_werror_flag"                   || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -10170,8 +10115,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag"
-                        || test ! -s conftest.err'
+        { ac_try='test -z "$ac_c_werror_flag"                   || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -10232,8 +10176,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag"
-                        || test ! -s conftest.err'
+        { ac_try='test -z "$ac_c_werror_flag"                   || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -10296,8 +10239,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag"
-                        || test ! -s conftest.err'
+        { ac_try='test -z "$ac_c_werror_flag"                   || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -10374,8 +10316,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag"
-                        || test ! -s conftest.err'
+        { ac_try='test -z "$ac_c_werror_flag"                   || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -10461,8 +10402,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag"
-                        || test ! -s conftest.err'
+        { ac_try='test -z "$ac_c_werror_flag"                   || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -10528,8 +10468,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag"
-                        || test ! -s conftest.err'
+        { ac_try='test -z "$ac_c_werror_flag"                   || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -10595,8 +10534,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag"
-                        || test ! -s conftest.err'
+        { ac_try='test -z "$ac_c_werror_flag"                   || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -10662,8 +10600,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag"
-                        || test ! -s conftest.err'
+        { ac_try='test -z "$ac_c_werror_flag"                   || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -10729,8 +10666,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag"
-                        || test ! -s conftest.err'
+        { ac_try='test -z "$ac_c_werror_flag"                   || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -10803,8 +10739,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
-        { ac_try='test -z "$ac_c_werror_flag"
-                        || test ! -s conftest.err'
+        { ac_try='test -z "$ac_c_werror_flag"                   || test ! -s conftest.err'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -11763,11 +11698,6 @@ esac
   *) ac_INSTALL=$ac_top_builddir$INSTALL ;;
   esac
 
-  if test x"$ac_file" != x-; then
-    { echo "$as_me:$LINENO: creating $ac_file" >&5
-echo "$as_me: creating $ac_file" >&6;}
-    rm -f "$ac_file"
-  fi
   # Let's still pretend it is `configure' which instantiates (i.e., don't
   # use $as_me), people would be surprised to read:
   #    /* config.h.  Generated by config.status.  */
@@ -11806,6 +11736,12 @@ echo "$as_me: error: cannot find input file: $f" >&2;}
         fi;;
       esac
     done` || { (exit 1); exit 1; }
+
+  if test x"$ac_file" != x-; then
+    { echo "$as_me:$LINENO: creating $ac_file" >&5
+echo "$as_me: creating $ac_file" >&6;}
+    rm -f "$ac_file"
+  fi
 _ACEOF
 cat >>$CONFIG_STATUS <<_ACEOF
   sed "$ac_vpsub
index 3bc5a99..8bf3679 100644 (file)
@@ -548,7 +548,6 @@ if test `set . $formats ; shift ; echo $#` -gt 1 ; then
       hp300)   AC_DEFINE(OBJ_MAYBE_HP300, 1,   [HP300 support?])   ;;
       ieee)    AC_DEFINE(OBJ_MAYBE_IEEE, 1,    [IEEE support?])    ;;
       som)     AC_DEFINE(OBJ_MAYBE_SOM, 1,     [SOM support?])     ;;
-      vms)     AC_DEFINE(OBJ_MAYBE_VMS, 1,     [VMS support?])     ;;
     esac
     extra_objects="$extra_objects obj-$fmt.o"
   done