more vms fixes from Pat Rankin
authorKen Raeburn <raeburn@cygnus>
Thu, 6 Jul 1995 02:52:44 +0000 (02:52 +0000)
committerKen Raeburn <raeburn@cygnus>
Thu, 6 Jul 1995 02:52:44 +0000 (02:52 +0000)
gas/ChangeLog
gas/config/obj-vms.c
gas/config/obj-vms.h

index 121d05d8bceaacc4dd4fd404ac679a7cbffc2668..4cd45c348c9010baa537acb6a52c84d5fb7cef39 100644 (file)
@@ -1,3 +1,26 @@
+Wed Jul  5 22:49:31 1995  Ken Raeburn  <raeburn@cygnus.com>
+
+       Mon Jul  3 19:47:53 1995  Pat Rankin  (rankin@eql.caltech.edu)
+
+       * config/obj-vms.h (vms_resolve_symbol_redef): Use full prototype.
+       (vms_check_for_special_label, tc_frob_label): Move them to group
+       with other prototypes.
+       [WANT_VMS_OBJ_DEFS]: Only define the many OBJ_x, DBG_x, and DST_x
+       macros when this is defined.
+       * config/obj-vms.c: Fully prototype all local functions.
+       [symbolS, fragS]: Use consistently instead of their struct tags.
+       [WANT_VMS_OBJ_DEFS]: Define this.
+       (s_const): Make definition correctly match actual usage.
+       (VMS_stab_parse): Make `expected_type' arg be int rather than char.
+       (get_VMS_time_on_unix): Define as `static void'.
+       (hash_string): Make definition match actual usage; argument is
+       `char const *' rather than `unsigned char *'.
+       (VMS_Case_Hack_Symbol, VMS_Modify_Psect_Attributes, VMS_Psect_Spec,
+       VMS_Global_Symbol_Spec): Declare string args as `const char *'.
+       [IS_GXX_VTABLE]: New macro.
+       (vms_write_object_file: GSD loop): Use it.
+       (vms_write_object_file: data segment): Reorganize `fill' loop.
+
 Wed Jul  5 12:01:49 1995  Ian Lance Taylor  <ian@cygnus.com>
 
        * config/tc-sparc.c (md_shortopts): Add "K:" if OBJ_ELF.
index febad4b658308413ed0b40da5d62f5e834a6a1b6..4479ec71af413b515efa40bc349f5392b6f5d70f 100644 (file)
@@ -20,6 +20,10 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, 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 "subsegs.h"
@@ -34,6 +38,7 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
 #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.)
@@ -41,7 +46,7 @@ extern int sys$open(), sys$close(), sys$asctim();
 char *compiler_version_string;
 
 extern int flag_hash_long_names;       /* -+ */
-extern int flag_one;                   /* -1 */
+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 */
 
@@ -54,7 +59,7 @@ extern int flag_no_hash_mixed_case;   /* -h NUM */
  * that case should be preserved.  */
 
 /* If the -+ switch is given, then the hash is appended to any name that is
- * longer than 31 characters, irregardless of the setting of the -h switch.
+ * longer than 31 characters, regardless of the setting of the -h switch.
  */
 
 char vms_name_mapping = 0;
@@ -67,11 +72,12 @@ static symbolS *Entry_Point_Symbol = 0;     /* Pointer to "_main" */
 struct VMS_Symbol
 {
   struct VMS_Symbol *Next;
-  struct symbol *Symbol;
+  symbolS *Symbol;
   int Size;
   int Psect_Index;
   int Psect_Offset;
 };
+
 struct VMS_Symbol *VMS_Symbols = 0;
 
 /* We need this to keep track of the various input files, so that we can
@@ -94,8 +100,6 @@ struct input_file
 static struct input_file *file_root = (struct input_file *) NULL;
 
 
-static struct input_file *find_file PARAMS ((symbolS *));
-
 /*
  * This enum is used to keep track of the various types of variables that
  * may be present.
@@ -156,14 +160,13 @@ struct forward_ref
   char resolved;
 };
 
-struct forward_ref *f_ref_root =
-{(struct forward_ref *) NULL};
+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 )
+#define type_check(X)  !strcmp (symbol_name, X)
 
 /*
  * This variable is used to keep track of the name of the symbol we are
@@ -331,19 +334,93 @@ const segT N_TYPE_seg[N_TYPE + 2] =
 };
 \f
 
+/* Local support routines which return a value.  */
+
+static struct input_file *find_file PARAMS ((symbolS *));
+static struct VMS_DBG_Symbol *find_symbol PARAMS ((int));
+static symbolS *Define_Routine PARAMS ((symbolS *,int));
+
+static char *cvt_integer PARAMS ((char *,int *));
+static char *fix_name PARAMS ((char *));
+static char *get_struct_name PARAMS ((char *));
+
+static int VMS_TBT_Source_File PARAMS ((char *,int));
+static int gen1 PARAMS ((struct VMS_DBG_Symbol *,int));
+static int forward_reference PARAMS ((char *));
+static int final_forward_reference PARAMS ((struct VMS_DBG_Symbol *));
+static int VMS_typedef_parse PARAMS ((char *));
+static int hash_string PARAMS ((const char *));
+static int VMS_Psect_Spec PARAMS ((const char *,int,const char *,
+                                  struct VMS_Symbol *));
+static int VMS_Initialized_Data_Size PARAMS ((symbolS *,int));
+
+/* Local support routines which don't directly return any value.  */
+
+static void s_const PARAMS ((int));
+static void Create_VMS_Object_File PARAMS ((void));
+static void Flush_VMS_Object_Record_Buffer PARAMS ((void));
+static void Set_VMS_Object_File_Record PARAMS ((int));
+static void Close_VMS_Object_File PARAMS ((void));
+static void vms_tir_stack_psect PARAMS ((int,int,int));
+static void VMS_Store_Immediate_Data PARAMS ((const char *,int,int));
+static void VMS_Set_Data PARAMS ((int,int,int,int));
+static void VMS_Store_Struct PARAMS ((int));
+static void VMS_Def_Struct PARAMS ((int));
+static void VMS_Set_Struct PARAMS ((int));
+static void VMS_TBT_Module_Begin PARAMS ((void));
+static void VMS_TBT_Module_End PARAMS ((void));
+static void VMS_TBT_Routine_Begin PARAMS ((symbolS *,int));
+static void VMS_TBT_Routine_End PARAMS ((int,symbolS *));
+static void VMS_TBT_Block_Begin PARAMS ((symbolS *,int,char *));
+static void VMS_TBT_Block_End PARAMS ((int));
+static void VMS_TBT_Line_PC_Correlation PARAMS ((int,int,int,int));
+static void VMS_TBT_Source_Lines PARAMS ((int,int,int));
+static void fpush PARAMS ((int,int));
+static void rpush PARAMS ((int,int));
+static void array_suffix PARAMS ((struct VMS_DBG_Symbol *));
+static void new_forward_ref PARAMS ((int));
+static void generate_suffix PARAMS ((struct VMS_DBG_Symbol *,int));
+static void bitfield_suffix PARAMS ((struct VMS_DBG_Symbol *,int));
+static void setup_basic_type PARAMS ((struct VMS_DBG_Symbol *));
+static void VMS_DBG_record PARAMS ((struct VMS_DBG_Symbol *,int,int,char *));
+static void VMS_local_stab_Parse PARAMS ((symbolS *));
+static void VMS_stab_parse PARAMS ((symbolS *,int,int,int,int));
+static void VMS_GSYM_Parse PARAMS ((symbolS *,int));
+static void VMS_LCSYM_Parse PARAMS ((symbolS *,int));
+static void VMS_STSYM_Parse PARAMS ((symbolS *,int));
+static void VMS_RSYM_Parse PARAMS ((symbolS *,symbolS *,int));
+static void VMS_LSYM_Parse PARAMS ((void));
+static void Define_Local_Symbols PARAMS ((symbolS *,symbolS *));
+static void VMS_DBG_Define_Routine PARAMS ((symbolS *,symbolS *,int));
+static void Write_VMS_MHD_Records PARAMS ((void));
+static void Write_VMS_EOM_Record PARAMS ((int,int));
+static void VMS_Case_Hack_Symbol PARAMS ((const char *,char *));
+static void VMS_Modify_Psect_Attributes PARAMS ((const char *,int *));
+static void VMS_Global_Symbol_Spec PARAMS ((const char *,int,int,int));
+static void VMS_Local_Environment_Setup PARAMS ((const char *));
+static void VMS_Emit_Globalvalues PARAMS ((unsigned,unsigned,char *));
+static void VMS_Procedure_Entry_Pt PARAMS ((char *,int,int,int));
+static void VMS_Set_Psect PARAMS ((int,int,int));
+static void VMS_Store_Repeated_Data PARAMS ((int,char *,int,int));
+static void VMS_Store_PIC_Symbol_Reference PARAMS ((symbolS *,int,
+                                                   int,int,int,int));
+static void VMS_Fix_Indirect_Reference PARAMS ((int,int,fragS *,fragS *));
+\f
+
 /* The following code defines the special types of pseudo-ops that we
  *  use with VMS.
  */
 
 char const_flag = IN_DEFAULT_SECTION;
 
-void
-s_const ()
+static void
+s_const (arg)
+     int arg;  /* 3rd field from obj_pseudo_table[]; not needed here */
 {
-  register int temp;
-
-  temp = get_absolute_expression ();
-  subseg_set (SEG_DATA, (subsegT) temp);
+  /* 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 ();
 }
@@ -649,7 +726,7 @@ vms_tir_stack_psect (Psect_Index, Offset, Force)
  */
 static void
 VMS_Store_Immediate_Data (Pointer, Size, Record_Type)
-     CONST char *Pointer;
+     const char *Pointer;
      int Size;
      int Record_Type;
 {
@@ -899,7 +976,7 @@ VMS_TBT_Module_End ()
  */
 static void
 VMS_TBT_Routine_Begin (symbolP, Psect)
-     struct symbol *symbolP;
+     symbolS *symbolP;
      int Psect;
 {
   register char *cp, *cp1;
@@ -1036,7 +1113,7 @@ VMS_TBT_Routine_End (Max_Size, sp)
  */
 static void
 VMS_TBT_Block_Begin (symbolP, Psect, Name)
-     struct symbol *symbolP;
+     symbolS *symbolP;
      int Psect;
      char *Name;
 {
@@ -1879,7 +1956,7 @@ generate_suffix (spnt, dbx_type)
      struct VMS_DBG_Symbol *spnt;
      int dbx_type;
 {
-  static CONST char pvoid[6] = {
+  static const char pvoid[6] = {
                5,              /* record.length == 5 */
                DST_K_TYPSPEC,  /* record.type == 1 (type specification) */
                0,              /* name.length == 0, no name follows */
@@ -2159,7 +2236,7 @@ VMS_local_stab_Parse (sp)
 static void
 VMS_stab_parse (sp, expected_type, type1, type2, Text_Psect)
      symbolS *sp;
-     char expected_type;
+     int expected_type;        /* char */
      int type1, type2, Text_Psect;
 {
   char *pnt;
@@ -2443,7 +2520,7 @@ forward_reference (pnt)
 
 static int
 final_forward_reference (spnt)
-  struct VMS_DBG_Symbol *spnt;
+     struct VMS_DBG_Symbol *spnt;
 {
   struct VMS_DBG_Symbol *spnt1;
 
@@ -3142,18 +3219,19 @@ VMS_DBG_Define_Routine (symbolP, Curr_Routine, Txt_Psect)
 }
 \f
 
-
-
 #ifndef VMS
 #include <sys/types.h>
 #include <time.h>
+static void get_VMS_time_on_unix PARAMS ((char *));
 
-/* Manufacure a VMS like time on a unix based system. */
+/* Manufacture a VMS-like time string on a Unix based system.  */
+static void
 get_VMS_time_on_unix (Now)
      char *Now;
 {
   char *pnt;
   time_t timeb;
+
   time (&timeb);
   pnt = ctime (&timeb);
   pnt[3] = 0;
@@ -3163,8 +3241,8 @@ get_VMS_time_on_unix (Now)
   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
  */
@@ -3344,10 +3422,10 @@ Write_VMS_EOM_Record (Psect, Offset)
 
 static int
 hash_string (ptr)
-     unsigned char *ptr;
+     const char *ptr;
 {
-  register unsigned char *p = ptr;
-  register unsigned char *end = p + strlen (ptr);
+  register const unsigned char *p = (unsigned char *) ptr;
+  register const unsigned char *end = p + strlen (ptr);
   register unsigned char c;
   register int hash = 0;
 
@@ -3364,14 +3442,14 @@ hash_string (ptr)
  */
 static void
 VMS_Case_Hack_Symbol (In, Out)
-     register char *In;
+     register const char *In;
      register char *Out;
 {
   long int init;
   long int result;
   char *pnt = 0;
   char *new_name;
-  char *old_name;
+  const char *old_name;
   register int i;
   int destructor = 0;          /*hack to allow for case sens in a destructor*/
   int truncate = 0;
@@ -3555,11 +3633,11 @@ VMS_Case_Hack_Symbol (In, Out)
 
 static void
 VMS_Modify_Psect_Attributes (Name, Attribute_Pointer)
-     char *Name;
+     const char *Name;
      int *Attribute_Pointer;
 {
   register int i;
-  register char *cp;
+  register const char *cp;
   int Negate;
   static const struct
   {
@@ -3667,7 +3745,7 @@ VMS_Modify_Psect_Attributes (Name, Attribute_Pointer)
  */
 static void
 VMS_Global_Symbol_Spec (Name, Psect_Number, Psect_Offset, Flags)
-     char *Name;
+     const char *Name;
      int Psect_Number;
      int Psect_Offset;
      int Flags;
@@ -3777,9 +3855,9 @@ VMS_Local_Environment_Setup (Env_Name)
  */
 static int
 VMS_Psect_Spec (Name, Size, Type, vsp)
-     char *Name;
+     const char *Name;
      int Size;
-     char *Type;
+     const char *Type;
      struct VMS_Symbol *vsp;
 {
   char Local[32];
@@ -3919,10 +3997,10 @@ VMS_Psect_Spec (Name, Size, Type, vsp)
  */
 static int
 VMS_Initialized_Data_Size (sp, End_Of_Data)
-     register struct symbol *sp;
+     register symbolS *sp;
      int End_Of_Data;
 {
-  struct symbol *sp1, *Next_Symbol;
+  symbolS *sp1, *Next_Symbol;
   /* Cache values to avoid extra lookups.  */
   valueT sp_val = S_GET_VALUE (sp), sp1_val, next_val = 0;
 
@@ -4244,7 +4322,7 @@ VMS_Store_Repeated_Data (Repeat_Count, Pointer, Size, Record_Type)
 static void
 VMS_Store_PIC_Symbol_Reference (Symbol, Offset, PC_Relative,
                                Psect, Psect_Offset, Record_Type)
-     struct symbol *Symbol;
+     symbolS *Symbol;
      int Offset;
      int PC_Relative;
      int Psect;
@@ -4389,7 +4467,7 @@ VMS_Fix_Indirect_Reference (Text_Psect, Offset, fragP, text_frag_root)
      int Text_Psect;
      int Offset;
      register fragS *fragP;
-     struct frag *text_frag_root;
+     fragS *text_frag_root;
 {
   /*
    *   The addressing mode byte is 1 byte before the address
@@ -4461,7 +4539,7 @@ vms_check_for_main ()
   int i;
 #endif /* HACK_DEC_C_STARTUP */
 
-  symbolP = (struct symbol *) symbol_find ("_main");
+  symbolP = (symbolS *) symbol_find ("_main");
   if (symbolP && !S_IS_DEBUG (symbolP) &&
       S_IS_EXTERNAL (symbolP) && (S_GET_TYPE (symbolP) == N_TEXT))
     {
@@ -4660,6 +4738,9 @@ vms_check_for_main ()
     }
 }
 \f
+
+#define IS_GXX_VTABLE(symP) (strncmp (S_GET_NAME (symP), "__vt.", 5) == 0)
+
 /*
  *     Write a VAX/VMS object file (everything else has been done!)
  */
@@ -4669,8 +4750,8 @@ vms_write_object_file (text_siz, data_siz, bss_siz, text_frag_root,
      unsigned text_siz;
      unsigned data_siz;
      unsigned bss_siz;
-     struct frag *text_frag_root;
-     struct frag *data_frag_root;
+     fragS *text_frag_root;
+     fragS *data_frag_root;
 {
   register fragS *fragP;
   register symbolS *symbolP;
@@ -4727,13 +4808,12 @@ vms_write_object_file (text_siz, data_siz, bss_siz, text_frag_root,
          i += fragP->fr_fix;
 
          fill_literal = fragP->fr_literal + fragP->fr_fix;
-         fill_size = fragP->fr_var;
-         for (count = fragP->fr_offset; count; count--)
-           {
-             if (fill_size)
+         if ((fill_size = fragP->fr_var) != 0)
+           for (count = fragP->fr_offset; count; count--)
+             {
                memcpy (Data_Segment + i, fill_literal, fill_size);
-             i += fill_size;
-           }
+               i += fill_size;
+             }
        }
     }
 
@@ -4769,36 +4849,17 @@ vms_write_object_file (text_siz, data_siz, bss_siz, text_frag_root,
    * The g++ compiler does not write out external references to vtables
    * correctly.  Check for this and holler if we see it happening.
    * If that compiler bug is ever fixed we can remove this.
+   * (Jun'95:  gcc 2.7.0's cc1plus still exhibits this behavior.)
    */
   for (sp = symbol_rootP; sp; sp = symbol_next (sp)) 
-    {
-      /*
-       *       Dispatch on symbol type
-       */
-      switch (S_GET_RAW_TYPE (sp)) {
-       /*
-        *      Global Reference
-        */
-      case N_UNDF:
-       /*
-        *      Make a GSD global symbol reference
-        *      record.
-        */
-       if (strncmp (S_GET_NAME (sp),"__vt.",5) == 0)
-         {
-           S_SET_TYPE (sp, N_UNDF | N_EXT);
-           S_SET_OTHER (sp, 1);
-           /* Is this warning still needed?  It sounds like it describes
-              a compiler bug.  Does it?  If not, let's dump it.  */
-           as_warn("g++ wrote an extern reference to %s as a routine.",
-                   S_GET_NAME (sp));
-           as_warn("I will fix it, but I hope that it was not really a routine");
-         }
-       break;
-      default:
-       break;
+    if (S_GET_RAW_TYPE (sp) == N_UNDF && IS_GXX_VTABLE (sp))
+      {
+       S_SET_TYPE (sp, N_UNDF | N_EXT);
+       S_SET_OTHER (sp, 1);
+       as_warn ("g++ wrote an extern reference to `%s' as a routine.\n%s",
+                S_GET_NAME (sp),
+                "I will fix it, but I hope that it was not really a routine.");
       }
-    }
 #endif /* gxx_bug_fixed */
   /*
    *   Now scan the symbols and emit the appropriate GSD records
@@ -4828,11 +4889,10 @@ vms_write_object_file (text_siz, data_siz, bss_siz, text_frag_root,
          /*
           *    Make the psect for this data
           */
-         Globalref = VMS_Psect_Spec (
-                                      S_GET_NAME (sp),
-                                      vsp->Size,
-                                      S_GET_OTHER (sp) ? "CONST" : "COMMON",
-                                      vsp);
+         Globalref = VMS_Psect_Spec (S_GET_NAME (sp),
+                                     vsp->Size,
+                                     S_GET_OTHER (sp) ? "CONST" : "COMMON",
+                                     vsp);
          if (Globalref)
            Psect_Number--;
 
@@ -4841,7 +4901,7 @@ vms_write_object_file (text_siz, data_siz, bss_siz, text_frag_root,
    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.  */
 
-         if(strncmp (S_GET_NAME (sp), "__vt.", 5) == 0)
+         if (IS_GXX_VTABLE (sp))
            VMS_Global_Symbol_Spec (S_GET_NAME(sp),
                                    vsp->Psect_Index,
                                    0,
@@ -4904,7 +4964,7 @@ vms_write_object_file (text_siz, data_siz, bss_siz, text_frag_root,
    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.  */
 
-         if(strncmp (S_GET_NAME (sp), "__vt.", 5) == 0)
+         if (IS_GXX_VTABLE (sp))
            VMS_Global_Symbol_Spec (S_GET_NAME (sp),
                                    vsp->Psect_Index,
                                    0,
@@ -4957,6 +5017,10 @@ vms_write_object_file (text_siz, data_siz, bss_siz, text_frag_root,
             *  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
@@ -4966,18 +5030,13 @@ vms_write_object_file (text_siz, data_siz, bss_siz, text_frag_root,
               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 */
-           /* 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 (fragP->fr_fix < 2)
              abort ();
 
            Entry_Mask = (fragP->fr_literal[0] & 0x00ff) |
                         ((fragP->fr_literal[1] & 0x00ff) << 8);
            /*
-            *  Define the Procedure entry pt.
+            *  Define the procedure entry point.
             */
            VMS_Procedure_Entry_Pt (S_GET_NAME (sp),
                                    Text_Psect,
@@ -5028,7 +5087,7 @@ vms_write_object_file (text_siz, data_siz, bss_siz, text_frag_root,
           */
          vsp = (struct VMS_Symbol *) xmalloc (sizeof (*vsp));
          vsp->Symbol = sp;
-         vsp->Size = 4;
+         vsp->Size = 4;                /* always assume 32 bits */
          vsp->Psect_Index = 0;
          vsp->Psect_Offset = S_GET_VALUE (sp);
          vsp->Next = VMS_Symbols;
@@ -5040,16 +5099,14 @@ vms_write_object_file (text_siz, data_siz, bss_siz, text_frag_root,
           */
        default:
          /*
-          *    Ignore STAB symbols
-          *    Including .stabs emitted by g++
+          *    Ignore STAB symbols, including .stabs emitted by g++.
           */
          if (S_IS_DEBUG (sp) || (S_GET_TYPE (sp) == 22))
            break;
          /*
-          *    Error
+          *    Error otherwise.
           */
-         if (S_GET_TYPE (sp) != 22)
-           as_tsktsk ("unhandled stab type %d", S_GET_TYPE (sp));
+         as_tsktsk ("unhandled stab type %d", S_GET_TYPE (sp));
          break;
        }
     }
@@ -5248,9 +5305,8 @@ vms_write_object_file (text_siz, data_siz, bss_siz, text_frag_root,
          /*
           *    Store the data
           */
-         VMS_Store_Immediate_Data (Data_Segment +
-                                   S_GET_VALUE (vsp->Symbol) -
-                                   text_siz,
+         VMS_Store_Immediate_Data (
+                         Data_Segment + S_GET_VALUE (vsp->Symbol) - text_siz,
                                    vsp->Size,
                                    OBJ_S_C_TIR);
        }
@@ -5379,7 +5435,7 @@ vms_write_object_file (text_siz, data_siz, bss_siz, text_frag_root,
    *    order of ascending text segment offset)
    */
   {
-    struct symbol *Current_Routine = 0;
+    symbolS *Current_Routine = 0;
     int Current_Line_Number = 0;
     int Current_Offset = -1;
     struct input_file *Current_File = 0;
@@ -5525,6 +5581,7 @@ vms_write_object_file (text_siz, data_siz, bss_siz, text_frag_root,
                VMS_TBT_Routine_Begin (symbolP, Text_Psect);
                Current_Routine = symbolP;
              }
+
 /* Output local symbols, i.e. all symbols that are associated with a specific
  * routine.  We output them now so the debugger recognizes them as local to
  * this routine.
index 1fc8ba7546cca52107c6f6e31de924dee4d9ec79..c0582e3f1e093804dbb68051cb5ef2d905115e8e 100644 (file)
@@ -43,11 +43,6 @@ extern char const_flag;
 
 #define IN_DEFAULT_SECTION 0x80
 
-/* Compiler-generated label "__vax_g_doubles" is used to augment .stabs. */
-
-#define tc_frob_label(X) vms_check_for_special_label(X)
-extern void vms_check_for_special_label();
-
 /* These are defined in obj-vms.c. */
 extern const short seg_N_TYPE[];
 extern const segT N_TYPE_seg[];
@@ -214,12 +209,23 @@ typedef struct nlist obj_symbol_type;     /* Symbol table entry */
 
 #define obj_symbol_new_hook(s) {;}
 
+/* Force structure tags into scope so that their use in prototypes
+   will never be their first occurance.  */
 struct fix;
+struct symbol;
+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 ();
+extern int vms_resolve_symbol_redef PARAMS ((struct symbol *));
 #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 ((struct symbol *));
+#define tc_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,
@@ -231,9 +237,11 @@ extern void vms_write_object_file PARAMS ((unsigned,unsigned,unsigned,
 #define AOUT_STABS
 
 \f
-/* 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.  */
+#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
@@ -534,4 +542,7 @@ extern void vms_write_object_file PARAMS ((unsigned,unsigned,unsigned,
 #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 */
+
 /* end of obj-vms.h */