aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gas/ChangeLog14
-rw-r--r--gas/config/obj-vms.c314
-rw-r--r--gas/config/obj-vms.h9
-rw-r--r--gas/config/tc-vax.c38
-rw-r--r--gas/write.c4
5 files changed, 193 insertions, 186 deletions
diff --git a/gas/ChangeLog b/gas/ChangeLog
index 4fe1ed2..66327c6 100644
--- a/gas/ChangeLog
+++ b/gas/ChangeLog
@@ -1,3 +1,17 @@
+Thu Jan 19 14:49:47 1995 Ken Raeburn <raeburn@cujo.cygnus.com>
+
+ Cleanup of VAX and VMS code, from Pat Rankin:
+ * config/obj-vms.c: Changed exported function names to lower case.
+ (Changed call sites in write.c.) Declare VMS system function
+ names used, conditional on actually being on VMS. Changed many
+ functions that returned no useful value to now be declared to
+ return void. Removed many unused variables. Supply missing
+ return statements or values. Supply `default' case in switch
+ statements. Ensure local variables get initialized.
+ * config/tc-vax.c: Minor changes to silence "gcc -Wall".
+ * config/obj-vms.h, config/tc-vax.h: Added some missing
+ declarations.
+
Wed Jan 18 13:49:26 1995 Ken Raeburn <raeburn@cujo.cygnus.com>
* atof-generic.c (flonum_print) [TRACE]: New function.
diff --git a/gas/config/obj-vms.c b/gas/config/obj-vms.c
index 48e8a97..3e7931f 100644
--- a/gas/config/obj-vms.c
+++ b/gas/config/obj-vms.c
@@ -1,5 +1,5 @@
/* vms.c -- Write out a VAX/VMS object file
- Copyright (C) 1987, 1988, 1992, 1994 Free Software Foundation, Inc.
+ Copyright (C) 1987, 1988, 1992, 1994, 1995 Free Software Foundation, Inc.
This file is part of GAS, the GNU Assembler.
@@ -32,6 +32,7 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
#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
@@ -418,6 +419,7 @@ symbolS *symbolP;
void
obj_read_begin_hook ()
{
+ return;
}
void
@@ -426,7 +428,6 @@ obj_crawl_symbol_chain (headers)
{
symbolS *symbolP;
symbolS **symbolPP;
- int symbol_number = 0;
{ /* crawl symbol table */
register int symbol_number = 0;
@@ -481,7 +482,7 @@ obj_crawl_symbol_chain (headers)
/*
* Create the VMS object file
*/
-static
+static void
Create_VMS_Object_File ()
{
#if defined(eunice) || !defined(VMS)
@@ -506,12 +507,15 @@ Create_VMS_Object_File ()
/*
* Flush the object record buffer to the object file
*/
-static
+static void
Flush_VMS_Object_Record_Buffer ()
{
int i;
+#ifndef VMS
short int zero;
int RecLen;
+#endif
+
/*
* If the buffer is empty, we are done
*/
@@ -533,7 +537,7 @@ Flush_VMS_Object_Record_Buffer ()
number of bytes. */
/* pad it if needed */
zero = 0;
- if (Object_Record_Offset & 1 != 0)
+ if ((Object_Record_Offset & 1) != 0)
write (VMS_Object_File_FD, &zero, 1);
#endif /* not VMS */
/*
@@ -546,7 +550,7 @@ Flush_VMS_Object_Record_Buffer ()
/*
* Declare a particular type of object file record
*/
-static
+static void
Set_VMS_Object_File_Record (Type)
int Type;
{
@@ -570,17 +574,22 @@ Set_VMS_Object_File_Record (Type)
/*
* Close the VMS Object file
*/
-static
+static void
Close_VMS_Object_File ()
{
- short int m_one = -1;
- /* @@ This should not be here!! The same would presumably be needed
- if we were writing vax-bsd a.out files on a vms system. Put it
- someplace else! */
#ifndef VMS /* For cross-assembly purposes. */
-/* Write a 0xffff into the file, which means "End of File" */
+ short int m_one = -1;
+
+ /* Write a record-length field of 0xffff into the file, which means
+ end-of-file when read later. It is only needed for variable-length
+ record files transferred to VMS as fixed-length record files
+ (typical for binary ftp). */
write (VMS_Object_File_FD, &m_one, 2);
-#endif /* not VMS */
+#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);
}
@@ -588,7 +597,7 @@ Close_VMS_Object_File ()
/*
* Store immediate data in current Psect
*/
-static
+static void
VMS_Store_Immediate_Data (Pointer, Size, Record_Type)
CONST char *Pointer;
int Size;
@@ -643,7 +652,7 @@ VMS_Store_Immediate_Data (Pointer, Size, Record_Type)
/*
* Make a data reference
*/
-static
+static void
VMS_Set_Data (Psect_Index, Offset, Record_Type, Force)
int Psect_Index;
int Offset;
@@ -713,7 +722,7 @@ VMS_Set_Data (Psect_Index, Offset, Record_Type, Force)
/*
* Make a debugger reference to a struct, union or enum.
*/
-static
+static void
VMS_Store_Struct (Struct_Index)
int Struct_Index;
{
@@ -741,7 +750,7 @@ VMS_Store_Struct (Struct_Index)
/*
* Make a debugger reference to partially define a struct, union or enum.
*/
-static
+static void
VMS_Def_Struct (Struct_Index)
int Struct_Index;
{
@@ -765,7 +774,7 @@ VMS_Def_Struct (Struct_Index)
Flush_VMS_Object_Record_Buffer ();
}
-static
+static void
VMS_Set_Struct (Struct_Index)
int Struct_Index;
{ /* see previous functions for comments */
@@ -783,7 +792,7 @@ VMS_Set_Struct (Struct_Index)
/*
* Write the Traceback Module Begin record
*/
-static
+static void
VMS_TBT_Module_Begin ()
{
register char *cp, *cp1;
@@ -859,7 +868,7 @@ VMS_TBT_Module_Begin ()
/*
* Write the Traceback Module End record
*/
-static
+static void
VMS_TBT_Module_End ()
{
char Local[2];
@@ -879,7 +888,7 @@ VMS_TBT_Module_End ()
/*
* Write the Traceback Routine Begin record
*/
-static
+static void
VMS_TBT_Routine_Begin (symbolP, Psect)
struct symbol *symbolP;
int Psect;
@@ -956,7 +965,7 @@ VMS_TBT_Routine_Begin (symbolP, Psect)
* next one in memory. For debugging to work correctly we must know the
* size of the routine.
*/
-static
+static void
VMS_TBT_Routine_End (Max_Size, sp)
int Max_Size;
symbolS *sp;
@@ -1018,7 +1027,7 @@ VMS_TBT_Routine_End (Max_Size, sp)
/*
* Write the Traceback Block End record
*/
-static
+static void
VMS_TBT_Block_Begin (symbolP, Psect, Name)
struct symbol *symbolP;
int Psect;
@@ -1083,7 +1092,7 @@ VMS_TBT_Block_Begin (symbolP, Psect, Name)
/*
* Write the Traceback Block End record
*/
-static
+static void
VMS_TBT_Block_End (Size)
int Size;
{
@@ -1107,7 +1116,7 @@ VMS_TBT_Block_End (Size)
/*
* Write a Line number / PC correlation record
*/
-static
+static void
VMS_TBT_Line_PC_Correlation (Line_Number, Offset, Psect, Do_Delta)
int Line_Number;
int Offset;
@@ -1235,7 +1244,7 @@ VMS_TBT_Line_PC_Correlation (Line_Number, Offset, Psect, Do_Delta)
/*
* Describe a source file to the debugger
*/
-static
+static int
VMS_TBT_Source_File (Filename, ID_Number)
char *Filename;
int ID_Number;
@@ -1392,13 +1401,13 @@ VMS_TBT_Source_File (Filename, ID_Number)
/*
* Give the number of source lines to the debugger
*/
-static
+static void
VMS_TBT_Source_Lines (ID_Number, Starting_Line_Number, Number_Of_Lines)
int ID_Number;
int Starting_Line_Number;
int Number_Of_Lines;
{
- char *cp, *cp1;
+ char *cp;
char Local[16];
/*
@@ -1619,16 +1628,13 @@ find_symbol (dbx_type)
* backwards, while the array descriptor is best built forwards. In the end
* they get put together, if there is not a struct/union/enum along the way
*/
-static
-push (value, size)
- int value, size;
+static void
+push (value, size1)
+ int value, size1;
{
- int i;
- int size1;
- size1 = size;
- if (size < 0)
+ if (size1 < 0)
{
- size1 = -size;
+ size1 = -size1;
if (Lpnt < size1)
{
overflow = 1;
@@ -1652,7 +1658,7 @@ push (value, size)
}
/* this routine generates the array descriptor for a given array */
-static
+static void
array_suffix (spnt2)
struct VMS_DBG_Symbol *spnt2;
{
@@ -1660,7 +1666,7 @@ array_suffix (spnt2)
struct VMS_DBG_Symbol *spnt1;
int rank;
int total_size;
- int i;
+
rank = 0;
spnt = spnt2;
while (spnt->advanced != ARRAY)
@@ -1670,7 +1676,6 @@ array_suffix (spnt2)
return;
}
spnt1 = spnt;
- spnt1 = spnt;
total_size = 1;
while (spnt1->advanced == ARRAY)
{
@@ -1712,7 +1717,7 @@ array_suffix (spnt2)
* 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
+static void
new_forward_ref (dbx_type)
int dbx_type;
{
@@ -1742,6 +1747,7 @@ gen1 (spnt, array_suffix_len)
{
struct VMS_DBG_Symbol *spnt1;
int i;
+
switch (spnt->advanced)
{
case VOID:
@@ -1800,12 +1806,12 @@ gen1 (spnt, array_suffix_len)
{
as_tsktsk ("debugger forward reference error, dbx type %d",
spnt->type2);
- return;
+ return 0;
}
}
/* It is too late to generate forward references, so the user gets a message.
* This should only happen on a compiler error */
- i = gen1 (spnt1, 1);
+ (void) gen1 (spnt1, 1);
i = Apoint;
array_suffix (spnt);
array_suffix_len = Apoint - i;
@@ -1825,7 +1831,11 @@ gen1 (spnt, array_suffix_len)
}
total_len += array_suffix_len + 8;
push (total_len, -2);
+ break;
+ default: /* lint suppression */
+ break;
}
+ return 0;
}
/* This generates a suffix for a variable. If it is not a defined type yet,
@@ -1834,7 +1844,7 @@ gen1 (spnt, array_suffix_len)
* 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
+static void
generate_suffix (spnt, dbx_type)
struct VMS_DBG_Symbol *spnt;
int dbx_type;
@@ -1846,9 +1856,8 @@ generate_suffix (spnt, dbx_type)
1, 0, /* type.length == 1 {2 bytes, little endian} */
DBG_S_C_VOID /* type.type == 5 (pointer to unspecified) */
};
- int ilen;
int i;
- struct VMS_DBG_Symbol *spnt1;
+
Apoint = 0;
Lpnt = MAX_DEBUG_RECORD - 1;
total_len = 0;
@@ -1859,7 +1868,7 @@ generate_suffix (spnt, dbx_type)
else
{
if (spnt->VMS_type != DBG_S_C_ADVANCED_TYPE)
- return 0; /* no suffix needed */
+ return; /* no suffix needed */
gen1 (spnt, 0);
}
push (0, -1); /* no name (len==0) */
@@ -1988,20 +1997,20 @@ setup_basic_type (spnt)
* 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
+static void
VMS_DBG_record (spnt, Psect, Offset, Name)
struct VMS_DBG_Symbol *spnt;
int Psect;
int Offset;
char *Name;
{
- char *pnt;
char *Name_pnt;
- int j;
int len;
int i = 0;
- Name_pnt = fix_name (Name); /* if there are bad characters in name, convert them */
+ /* 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 */
@@ -2032,7 +2041,7 @@ VMS_DBG_record (spnt, Psect, Offset, Name)
/* This routine parses the stabs entries in order to make the definition
* for the debugger of local symbols and function parameters
*/
-static int
+static void
VMS_local_stab_Parse (sp)
symbolS *sp;
{
@@ -2040,8 +2049,8 @@ VMS_local_stab_Parse (sp)
char *pnt1;
char *str;
struct VMS_DBG_Symbol *spnt;
- struct VMS_Symbol *vsp;
int dbx_type;
+
dbx_type = 0;
str = S_GET_NAME (sp);
pnt = (char *) strchr (str, ':');
@@ -2049,7 +2058,8 @@ VMS_local_stab_Parse (sp)
return; /* no colon present */
pnt1 = pnt++; /* save this for later, and skip colon */
if (*pnt == 'c')
- return 0; /* ignore static constants */
+ return; /* ignore static constants */
+
/* 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
@@ -2093,11 +2103,11 @@ VMS_local_stab_Parse (sp)
pnt = cvt_integer (pnt, &dbx_type);
spnt = find_symbol (dbx_type);
if (!spnt)
- return 0; /*Dunno what this is*/
+ return; /*Dunno what this is*/
*pnt1 = '\0';
VMS_DBG_record (spnt, -1, S_GET_VALUE (sp), str);
*pnt1 = ':'; /* and restore the string */
- return 1;
+ return;
}
/* This routine parses a stabs entry to find the information required to define
@@ -2112,7 +2122,7 @@ VMS_local_stab_Parse (sp)
* a stab to tell us the value, but I am not sure what to do with it.
*/
-static
+static void
VMS_stab_parse (sp, expected_type, type1, type2, Text_Psect)
symbolS *sp;
char expected_type;
@@ -2137,7 +2147,7 @@ VMS_stab_parse (sp, expected_type, type1, type2, Text_Psect)
pnt = cvt_integer (pnt + 1, &dbx_type);
spnt = find_symbol (dbx_type);
if (spnt == (struct VMS_DBG_Symbol *) NULL)
- return 0; /*Dunno what this is*/
+ return; /*Dunno what this is*/
/* now we need to search the symbol table to find the psect and offset for
* this variable.
*/
@@ -2159,7 +2169,7 @@ VMS_stab_parse (sp, expected_type, type1, type2, Text_Psect)
{
VMS_DBG_record (spnt, vsp->Psect_Index, vsp->Psect_Offset, str);
*pnt1 = ':'; /* and restore the string */
- return 1;
+ return;
}
/* the symbol was not in the symbol list, but it may be an "entry point"
if it was a constant */
@@ -2194,15 +2204,15 @@ VMS_stab_parse (sp, expected_type, type1, type2, Text_Psect)
*S_GET_NAME (sp1) = 'L';
/* fool assembler to not output this
* as a routine in the TBT */
- return 1;
+ return;
}
}
}
*pnt1 = ':'; /* and restore the string */
- return 0;
+ return;
}
-static
+static void
VMS_GSYM_Parse (sp, Text_Psect)
symbolS *sp;
int Text_Psect;
@@ -2211,7 +2221,7 @@ VMS_GSYM_Parse (sp, Text_Psect)
}
-static
+static void
VMS_LCSYM_Parse (sp, Text_Psect)
symbolS *sp;
int Text_Psect;
@@ -2219,7 +2229,7 @@ VMS_LCSYM_Parse (sp, Text_Psect)
VMS_stab_parse (sp, 'S', N_BSS, -1, Text_Psect);
}
-static
+static void
VMS_STSYM_Parse (sp, Text_Psect)
symbolS *sp;
int Text_Psect;
@@ -2235,7 +2245,7 @@ VMS_STSYM_Parse (sp, Text_Psect)
* handle on what is going on.
* Caveat Emptor.
*/
-static
+static void
VMS_RSYM_Parse (sp, Current_Routine, Text_Psect)
symbolS *sp, *Current_Routine;
int Text_Psect;
@@ -2245,7 +2255,6 @@ VMS_RSYM_Parse (sp, Current_Routine, Text_Psect)
char *str;
int dbx_type;
struct VMS_DBG_Symbol *spnt;
- int j;
int len;
int i = 0;
int bcnt = 0;
@@ -2317,11 +2326,11 @@ VMS_RSYM_Parse (sp, Current_Routine, Text_Psect)
pnt1 = pnt; /* save this for later*/
pnt++;
if (*pnt != 'r')
- return 0;
+ return;
pnt = cvt_integer (pnt + 1, &dbx_type);
spnt = find_symbol (dbx_type);
if (!spnt)
- return 0; /*Dunno what this is yet*/
+ 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);
@@ -2434,7 +2443,6 @@ VMS_typedef_parse (str)
int dtype;
struct forward_ref *fpnt;
int i1, i2, i3, len;
- int convert_integer;
struct VMS_DBG_Symbol *spnt;
struct VMS_DBG_Symbol *spnt1;
@@ -2851,7 +2859,7 @@ parsing do not have to worry about it */
* paste together the entire contents of the stab before we pass it to
* VMS_typedef_parse.
*/
-static int
+static void
VMS_LSYM_Parse ()
{
char *pnt;
@@ -2860,11 +2868,10 @@ VMS_LSYM_Parse ()
char *str;
char *parse_buffer = 0;
char fixit[10];
- int incomplete, i, pass, incom1;
- struct VMS_DBG_Symbol *spnt;
- struct VMS_Symbol *vsp;
+ int incomplete, pass, incom1;
struct forward_ref *fpnt;
symbolS *sp;
+
pass = 0;
final_pass = 0;
incomplete = 0;
@@ -2898,6 +2905,7 @@ VMS_LSYM_Parse ()
{
symbolS *spnext;
int tlen = 0;
+
spnext = sp;
do {
tlen += strlen(str) - 1;
@@ -2982,7 +2990,7 @@ VMS_LSYM_Parse ()
}
}
-static
+static void
Define_Local_Symbols (s1, s2)
symbolS *s1, *s2;
{
@@ -3080,7 +3088,7 @@ everything */
}
-static
+static void
VMS_DBG_Define_Routine (symbolP, Curr_Routine, Txt_Psect)
symbolS *symbolP;
symbolS *Curr_Routine;
@@ -3118,7 +3126,7 @@ get_VMS_time_on_unix (Now)
/*
* Write the MHD (Module Header) records
*/
-static
+static void
Write_VMS_MHD_Records ()
{
register char *cp, *cp1;
@@ -3243,7 +3251,7 @@ Write_VMS_MHD_Records ()
/*
* Write the EOM (End Of Module) record
*/
-static
+static void
Write_VMS_EOM_Record (Psect, Offset)
int Psect;
int Offset;
@@ -3303,14 +3311,14 @@ hash_string (ptr)
/*
* Generate a Case-Hacked VMS symbol name (limited to 31 chars)
*/
-static
+static void
VMS_Case_Hack_Symbol (In, Out)
register char *In;
register char *Out;
{
- long int init = 0;
+ long int init;
long int result;
- char *pnt;
+ char *pnt = 0;
char *new_name;
char *old_name;
register int i;
@@ -3335,8 +3343,7 @@ VMS_Case_Hack_Symbol (In, Out)
#endif
/* We may need to truncate the symbol, save the hash for later*/
- if (strlen (In) > 23)
- result = hash_string (In);
+ result = (strlen (In) > 23) ? hash_string (In) : 0;
/*
* Is there a Psect Attribute to skip??
*/
@@ -3474,10 +3481,7 @@ VMS_Case_Hack_Symbol (In, Out)
for (i = 0; i < 7; i++)
{
init = result & 0x01f;
- if (init < 10)
- *Out++ = '0' + init;
- else
- *Out++ = 'A' + init - 10;
+ *Out++ = (init < 10) ? ('0' + init) : ('A' + init - 10);
result = result >> 5;
}
}
@@ -3498,7 +3502,7 @@ VMS_Case_Hack_Symbol (In, Out)
#define GLOBALVALUE_BIT 0x20000
-static
+static void
VMS_Modify_Psect_Attributes (Name, Attribute_Pointer)
char *Name;
int *Attribute_Pointer;
@@ -3602,14 +3606,19 @@ VMS_Modify_Psect_Attributes (Name, Attribute_Pointer)
}
+#define GBLSYM_REF 0
+#define GBLSYM_DEF 1
+#define GBLSYM_VAL 2
+
/*
* Define a global symbol
*/
-static
-VMS_Global_Symbol_Spec (Name, Psect_Number, Psect_Offset, Defined)
+static void
+VMS_Global_Symbol_Spec (Name, Psect_Number, Psect_Offset, Flags)
char *Name;
int Psect_Number;
int Psect_Offset;
+ int Flags;
{
char Local[32];
@@ -3625,14 +3634,7 @@ VMS_Global_Symbol_Spec (Name, Psect_Number, Psect_Offset, Defined)
/*
* We are writing a Global symbol definition subrecord
*/
- if (Psect_Number <= 255)
- {
- PUT_CHAR (GSD_S_C_SYM);
- }
- else
- {
- PUT_CHAR (GSD_S_C_SYMW);
- }
+ PUT_CHAR ((Psect_Number <= 255) ? GSD_S_C_SYM : GSD_S_C_SYMW);
/*
* Data type is undefined
*/
@@ -3640,21 +3642,20 @@ VMS_Global_Symbol_Spec (Name, Psect_Number, Psect_Offset, Defined)
/*
* Switch on Definition/Reference
*/
- if ((Defined & 1) != 0)
+ if ((Flags & GBLSYM_DEF) == 0)
{
/*
- * Definition:
- * Flags = "RELOCATABLE" and "DEFINED" for regular symbol
- * = "DEFINED" for globalvalue (Defined & 2 == 1)
+ * Reference
*/
- if ((Defined & 2) == 0)
- {
- PUT_SHORT (GSY_S_M_DEF | GSY_S_M_REL);
- }
- else
- {
- PUT_SHORT (GSY_S_M_DEF);
- }
+ PUT_SHORT (((Flags & GBLSYM_VAL) == 0) ? GSY_S_M_REL : 0);
+ }
+ else
+ {
+ /*
+ * Definition
+ */
+ PUT_SHORT (((Flags & GBLSYM_VAL) == 0) ?
+ GSY_S_M_DEF | GSY_S_M_REL : GSY_S_M_DEF);
/*
* Psect Number
*/
@@ -3671,22 +3672,6 @@ VMS_Global_Symbol_Spec (Name, Psect_Number, Psect_Offset, Defined)
*/
PUT_LONG (Psect_Offset);
}
- else
- {
- /*
- * Reference:
- * Flags = "RELOCATABLE" for regular symbol,
- * = "" for globalvalue (Defined & 2 == 1)
- */
- if ((Defined & 2) == 0)
- {
- PUT_SHORT (GSY_S_M_REL);
- }
- else
- {
- PUT_SHORT (0);
- }
- }
/*
* Finally, the global symbol name
*/
@@ -3773,7 +3758,7 @@ VMS_Psect_Spec (Name, Size, Type, vsp)
* fixup references are emitted correctly.
*/
vsp->Psect_Index = -1; /* to catch errors */
- S_GET_RAW_TYPE (vsp->Symbol) = N_UNDF; /* make refs work */
+ S_SET_TYPE (vsp->Symbol, N_UNDF); /* make refs work */
return 1; /* decrement psect counter */
}
@@ -3783,13 +3768,13 @@ VMS_Psect_Spec (Name, Size, Type, vsp)
{
case N_UNDF | N_EXT:
VMS_Global_Symbol_Spec (Name, vsp->Psect_Index,
- vsp->Psect_Offset, 0);
+ vsp->Psect_Offset, GBLSYM_REF);
vsp->Psect_Index = -1;
- S_GET_RAW_TYPE (vsp->Symbol) = N_UNDF;
+ S_SET_TYPE (vsp->Symbol, N_UNDF);
return 1; /* return and indicate no psect */
case N_DATA | N_EXT:
VMS_Global_Symbol_Spec (Name, vsp->Psect_Index,
- vsp->Psect_Offset, 1);
+ vsp->Psect_Offset, GBLSYM_DEF);
/* In this case we still generate the psect */
break;
default:
@@ -3852,7 +3837,7 @@ VMS_Initialized_Data_Size (sp, End_Of_Data)
{
struct symbol *sp1, *Next_Symbol;
/* Cache values to avoid extra lookups. */
- valueT sp_val = S_GET_VALUE (sp), sp1_val, next_val;
+ valueT sp_val = S_GET_VALUE (sp), sp1_val, next_val = 0;
/*
* Find the next symbol
@@ -3908,7 +3893,7 @@ VMS_Initialized_Data_Size (sp, End_Of_Data)
* Check symbol names for the Psect hack with a globalvalue, and then
* generate globalvalues for those that have it.
*/
-static
+static void
VMS_Emit_Globalvalues (text_siz, data_siz, Data_Segment)
unsigned text_siz;
unsigned data_siz;
@@ -3919,6 +3904,7 @@ VMS_Emit_Globalvalues (text_siz, data_siz, Data_Segment)
int Size;
int Psect_Attributes;
int globalvalue;
+ int typ;
/*
* Scan the symbol table for globalvalues, and emit def/ref when
@@ -3927,11 +3913,12 @@ VMS_Emit_Globalvalues (text_siz, data_siz, Data_Segment)
*/
for (sp = symbol_rootP; sp; sp = sp->sy_next)
{
+ typ = S_GET_RAW_TYPE (sp);
/*
* See if this is something we want to look at.
*/
- if ((S_GET_RAW_TYPE (sp) != (N_DATA | N_EXT)) &&
- (S_GET_RAW_TYPE (sp) != (N_UNDF | N_EXT)))
+ if (typ != (N_DATA | N_EXT) &&
+ typ != (N_UNDF | N_EXT))
continue;
/*
* See if this has globalvalue specification.
@@ -3941,17 +3928,17 @@ VMS_Emit_Globalvalues (text_siz, data_siz, Data_Segment)
if (!HAS_PSECT_ATTRIBUTES (Name))
continue;
- stripped_name = (char *) xmalloc (strlen (Name) + 1);
- strcpy (stripped_name, Name);
- Psect_Attributes = 0;
- VMS_Modify_Psect_Attributes (stripped_name, &Psect_Attributes);
+ stripped_name = (char *) xmalloc (strlen (Name) + 1);
+ strcpy (stripped_name, Name);
+ Psect_Attributes = 0;
+ VMS_Modify_Psect_Attributes (stripped_name, &Psect_Attributes);
if ((Psect_Attributes & GLOBALVALUE_BIT) != 0)
{
- switch (S_GET_RAW_TYPE (sp))
+ switch (typ)
{
case N_UNDF | N_EXT:
- VMS_Global_Symbol_Spec (stripped_name, 0, 0, 2);
+ 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);
@@ -3961,16 +3948,18 @@ VMS_Emit_Globalvalues (text_siz, data_siz, 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, 2);
- VMS_Global_Symbol_Spec (stripped_name, 0, globalvalue, 3);
- VMS_Global_Symbol_Spec (stripped_name, 0, globalvalue, 3);
+ 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_tsktsk ("Invalid globalvalue of %s", stripped_name);
break;
} /* switch */
} /* if */
- free (stripped_name); /* clean up */
+ if (stripped_name) free (stripped_name); /* clean up */
} /* for */
}
@@ -3979,7 +3968,7 @@ VMS_Emit_Globalvalues (text_siz, data_siz, Data_Segment)
/*
* Define a procedure entry pt/mask
*/
-static
+static void
VMS_Procedure_Entry_Pt (Name, Psect_Number, Psect_Offset, Entry_Mask)
char *Name;
int Psect_Number;
@@ -4000,14 +3989,7 @@ VMS_Procedure_Entry_Pt (Name, Psect_Number, Psect_Offset, Entry_Mask)
/*
* We are writing a Procedure Entry Pt/Mask subrecord
*/
- if (Psect_Number <= 255)
- {
- PUT_CHAR (GSD_S_C_EPM);
- }
- else
- {
- PUT_CHAR (GSD_S_C_EPMW);
- }
+ PUT_CHAR ((Psect_Number <= 255) ? GSD_S_C_EPM : GSD_S_C_EPMW);
/*
* Data type is undefined
*/
@@ -4052,7 +4034,7 @@ VMS_Procedure_Entry_Pt (Name, Psect_Number, Psect_Offset, Entry_Mask)
/*
* Set the current location counter to a particular Psect and Offset
*/
-static
+static void
VMS_Set_Psect (Psect_Index, Offset, Record_Type)
int Psect_Index;
int Offset;
@@ -4097,7 +4079,7 @@ VMS_Set_Psect (Psect_Index, Offset, Record_Type)
/*
* Store repeated immediate data in current Psect
*/
-static
+static void
VMS_Store_Repeated_Data (Repeat_Count, Pointer, Size, Record_Type)
int Repeat_Count;
register char *Pointer;
@@ -4169,7 +4151,7 @@ VMS_Store_Repeated_Data (Repeat_Count, Pointer, Size, Record_Type)
/*
* Store a Position Independent Reference
*/
-static
+static void
VMS_Store_PIC_Symbol_Reference (Symbol, Offset, PC_Relative,
Psect, Psect_Offset, Record_Type)
struct symbol *Symbol;
@@ -4332,7 +4314,7 @@ VMS_Store_PIC_Symbol_Reference (Symbol, Offset, PC_Relative,
* THIS SHOULD BE REPLACED BY THE USE OF TIR_S_C_STO_PIRR IN THE
* PIC CODE GENERATING FIXUP ROUTINE.
*/
-static
+static void
VMS_Fix_Indirect_Reference (Text_Psect, Offset, fragP, text_frag_root)
int Text_Psect;
int Offset;
@@ -4385,7 +4367,8 @@ VMS_Fix_Indirect_Reference (Text_Psect, Offset, fragP, text_frag_root)
* 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".
*/
-VMS_Check_For_Main ()
+void
+vms_check_for_main ()
{
register symbolS *symbolP;
#ifdef HACK_DEC_C_STARTUP /* JF */
@@ -4598,7 +4581,8 @@ VMS_Check_For_Main ()
/*
* Write a VAX/VMS object file (everything else has been done!)
*/
-VMS_write_object_file (text_siz, data_siz, bss_siz, text_frag_root,
+void
+vms_write_object_file (text_siz, data_siz, bss_siz, text_frag_root,
data_frag_root)
unsigned text_siz;
unsigned data_siz;
@@ -4611,7 +4595,7 @@ VMS_write_object_file (text_siz, data_siz, bss_siz, text_frag_root,
register symbolS *sp;
register struct fix *fixP;
register struct VMS_Symbol *vsp;
- char *Data_Segment;
+ char *Data_Segment = 0;
int Local_Initialized_Data_Size = 0;
int Globalref;
int Psect_Number = 0; /* Psect Index Number */
@@ -4720,7 +4704,7 @@ VMS_write_object_file (text_siz, data_siz, bss_siz, text_frag_root,
*/
if (strncmp (S_GET_NAME (sp),"__vt.",5) == 0)
{
- S_GET_RAW_TYPE (sp) = N_UNDF | N_EXT;
+ 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. */
@@ -4780,7 +4764,7 @@ VMS_write_object_file (text_siz, data_siz, bss_siz, text_frag_root,
VMS_Global_Symbol_Spec (S_GET_NAME(sp),
vsp->Psect_Index,
0,
- 0);
+ GBLSYM_REF);
#ifdef NOT_VAX_11_C_COMPATIBLE
/*
@@ -4790,7 +4774,7 @@ VMS_write_object_file (text_siz, data_siz, bss_siz, text_frag_root,
VMS_Global_Symbol_Spec (S_GET_NAME (sp),
vsp->Psect_Index,
0,
- 1);
+ GBLSYM_DEF);
#endif /* NOT_VAX_11_C_COMPATIBLE */
break;
/*
@@ -4848,7 +4832,7 @@ VMS_write_object_file (text_siz, data_siz, bss_siz, text_frag_root,
VMS_Global_Symbol_Spec (S_GET_NAME (sp),
vsp->Psect_Index,
0,
- 1);
+ GBLSYM_DEF);
#ifdef NOT_VAX_11_C_COMPATIBLE
/*
@@ -4858,7 +4842,7 @@ VMS_write_object_file (text_siz, data_siz, bss_siz, text_frag_root,
VMS_Global_Symbol_Spec (S_GET_NAME (sp),
vsp->Psect_Index,
0,
- 1);
+ GBLSYM_DEF);
#endif /* NOT_VAX_11_C_COMPATIBLE */
break;
/*
@@ -4953,7 +4937,7 @@ VMS_write_object_file (text_siz, data_siz, bss_siz, text_frag_root,
VMS_Global_Symbol_Spec (S_GET_NAME (sp),
0,
0,
- 0);
+ GBLSYM_REF);
break;
/*
* Anything else
@@ -5303,7 +5287,7 @@ VMS_write_object_file (text_siz, data_siz, bss_siz, text_frag_root,
struct symbol *Current_Routine = 0;
int Current_Line_Number = 0;
int Current_Offset = -1;
- struct input_file *Current_File;
+ struct input_file *Current_File = 0;
/* 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
diff --git a/gas/config/obj-vms.h b/gas/config/obj-vms.h
index 3e2e109..85a8ad8 100644
--- a/gas/config/obj-vms.h
+++ b/gas/config/obj-vms.h
@@ -1,5 +1,5 @@
/* VMS object file format
- Copyright (C) 1989, 1990, 1991, 1994 Free Software Foundation, Inc.
+ Copyright (C) 1989, 1990, 1991, 1994, 1995 Free Software Foundation, Inc.
This file is part of GAS, the GNU Assembler.
@@ -215,11 +215,16 @@ typedef struct nlist obj_symbol_type; /* Symbol table entry */
#define obj_symbol_new_hook(s) {;}
struct fix;
-void tc_aout_fix_to_chars PARAMS ((char *where, struct fix *fixP, relax_addressT segment_address));
+extern void tc_aout_fix_to_chars PARAMS ((char *,struct fix *,relax_addressT));
extern int vms_resolve_symbol_redef ();
#define RESOLVE_SYMBOL_REDEFINITION(X) vms_resolve_symbol_redef(X)
+extern void vms_check_for_main PARAMS ((void));
+
+extern void vms_write_object_file PARAMS ((unsigned,unsigned,unsigned,
+ struct frag *,struct frag *));
+
/* 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. */
diff --git a/gas/config/tc-vax.c b/gas/config/tc-vax.c
index 36a0afe..dced489 100644
--- a/gas/config/tc-vax.c
+++ b/gas/config/tc-vax.c
@@ -1,5 +1,5 @@
/* tc-vax.c - vax-specific -
- Copyright (C) 1987, 1991, 1992 Free Software Foundation, Inc.
+ Copyright (C) 1987, 1991, 1992, 1994 Free Software Foundation, Inc.
This file is part of GAS, the GNU Assembler.
@@ -257,7 +257,7 @@ md_begin ()
FLONUM_TYPE *fP;
int i;
- if (errtxt = vip_begin (1, "$", "*", "`"))
+ if ((errtxt = vip_begin (1, "$", "*", "`")) != 0)
{
as_fatal ("VIP_BEGIN error:%s", errtxt);
}
@@ -362,7 +362,7 @@ md_assemble (instruction_string)
* and we can safely flush it, without causing interpass symbol phase
* errors. That is, without changing label values in different passes.
*/
- if (goofed = (*v.vit_error))
+ if ((goofed = (*v.vit_error)) != 0)
{
as_warn ("Ignoring statement due to \"%s\"", v.vit_error);
}
@@ -587,8 +587,8 @@ md_assemble (instruction_string)
}
else
{
- as_warn ("A bignum/flonum may not be a displacement: 0x%x used",
- expP->X_add_number = 0x80000000);
+ as_warn ("A bignum/flonum may not be a displacement: 0x%lx used",
+ (expP->X_add_number = 0x80000000L));
/* Chosen so luser gets the most offset bits to patch later. */
}
expP->X_add_number = floatP->low[0]
@@ -909,7 +909,8 @@ md_assemble (instruction_string)
{
if (this_add_number < 0 || this_add_number >= 64)
{
- as_warn ("Short literal overflow(%d.), immediate mode assumed.", this_add_number);
+ as_warn ("Short literal overflow(%ld.), immediate mode assumed.",
+ (long) this_add_number);
operandP->vop_short = 'i';
operandP->vop_mode = 8;
operandP->vop_reg = 0xF;
@@ -1022,7 +1023,7 @@ md_assemble (instruction_string)
{
/* # or S^# or I^# */
if (length == 0
- && to_seg == SEG_ABSOLUTE
+ && to_seg == SEG_ABSOLUTE && (expP->X_op != O_big)
&& operandP->vop_mode == 8 /* No '@'. */
&& this_add_number < 64
&& this_add_number >= 0)
@@ -1040,7 +1041,7 @@ md_assemble (instruction_string)
p = frag_more (nbytes + 1);
know (operandP->vop_reg == 0xF);
p[0] = (operandP->vop_mode << 4) | 0xF;
- if (to_seg == SEG_ABSOLUTE)
+ if ((to_seg == SEG_ABSOLUTE) && (expP->X_op != O_big))
{
/*
* If nbytes > 4, then we are scrod. We
@@ -1669,7 +1670,7 @@ static const struct vot
/* CASEx has no branch addresses in our conception of it. */
/* You should use ".word ..." statements after the "case ...". */
- {"", ""} /* empty is end sentinel */
+ {"", {"", 0}} /* empty is end sentinel */
}; /* synthetic_votstrs */
@@ -1823,7 +1824,7 @@ vip (vitP, instring)
*/
*q = 0;
operandp->vop_width = p[1];
- operandp->vop_nbytes = vax_operand_width_size[p[1]];
+ operandp->vop_nbytes = vax_operand_width_size[(unsigned) p[1]];
operandp->vop_access = p[0];
vip_op (instring, operandp);
*q = c; /* Restore input text. */
@@ -2187,7 +2188,7 @@ vip_op_1 (bit, syms)
{
unsigned char t;
- while (t = *syms++)
+ while ((t = *syms++) != 0)
vip_metacharacters[t] |= bit;
}
@@ -2324,7 +2325,7 @@ vip_op (optext, vopP)
if (*p == ' ') /* Expect all whitespace reduced to ' '. */
p++; /* skip over whitespace */
- if (at = INDIRECTP (*p))
+ if ((at = INDIRECTP (*p)) != 0)
{ /* 1 if *p=='@'(or '*' for Un*x) */
p++; /* at is determined */
if (*p == ' ') /* Expect all whitespace reduced to ' '. */
@@ -2351,7 +2352,7 @@ vip_op (optext, vopP)
if (*p == ' ') /* Expect all whitespace reduced to ' '. */
p++; /* skip over whitespace */
- if (hash = IMMEDIATEP (*p)) /* 1 if *p=='#' ('$' for Un*x) */
+ if ((hash = IMMEDIATEP (*p)) != 0) /* 1 if *p=='#' ('$' for Un*x) */
p++; /* hash is determined */
/*
@@ -3098,7 +3099,7 @@ md_create_long_jump (ptr, from_addr, to_addr, frag, to_symbol)
}
#ifdef OBJ_VMS
-CONST char *md_shortopts = "d:STt:V+1h:Hv:";
+CONST char *md_shortopts = "d:STt:V+1h:Hv::";
#else
CONST char *md_shortopts = "d:STt:V";
#endif
@@ -3158,6 +3159,8 @@ md_parse_option (c, arg)
case 'v':
{
extern char *compiler_version_string;
+ if (!arg || !*arg || access (arg, 0) == 0)
+ return 0; /* have caller show the assembler version */
compiler_version_string = arg;
}
break;
@@ -3184,12 +3187,13 @@ VAX options:\n\
-V ignored\n");
#ifdef OBJ_VMS
fprintf (stream, "\
--+ hash names longer than 31 characters\n\
--1 don't do const thing\n\
+VMS options:\n\
+-+ hash encode names longer than 31 characters\n\
+-1 `const' handling compatible with gcc 1.x\n\
-H show new symbol after hash truncation\n\
-h NUM don't hash mixed-case names, and adjust case:\n\
0 = upper, 2 = lower, 3 = preserve case\n\
--vVERSION compiler version is VERSION\n");
+-v\"VERSION\" code being assembled was produced by compiler \"VERSION\"\n");
#endif
}
diff --git a/gas/write.c b/gas/write.c
index 63084e1..92a9e08 100644
--- a/gas/write.c
+++ b/gas/write.c
@@ -1177,7 +1177,7 @@ write_object_file ()
/* Under VMS we try to be compatible with VAX-11 "C". Thus, we call
a routine to check for the definition of the procedure "_main",
and if so -- fix it up so that it can be program entry point. */
- VMS_Check_For_Main ();
+ vms_check_for_main ();
#endif /* VMS */
/* After every sub-segment, we fake an ".align ...". This conforms to
@@ -1527,7 +1527,7 @@ write_object_file ()
/*
* Now do the VMS-dependent part of writing the object file
*/
- VMS_write_object_file (H_GET_TEXT_SIZE (&headers),
+ vms_write_object_file (H_GET_TEXT_SIZE (&headers),
H_GET_DATA_SIZE (&headers),
H_GET_BSS_SIZE (&headers),
text_frag_root, data_frag_root);