vms cleanup, fixes from Pat Rankin

This commit is contained in:
Ken Raeburn
1995-06-09 21:16:07 +00:00
parent 9f28686c2b
commit 3c650d09e8
2 changed files with 130 additions and 130 deletions

View File

@ -1,3 +1,15 @@
Thu 8 Jun 19:33:02 1995 Pat Rankin (rankin@eql.caltech.edu)
* config/obj-vms.c (myname): Delete all references.
(VMS_stab_parse, Write_VMS_MHD_Records, VMS_Case_Hack_Symbol):
Replace printf calls with as_tsktsk.
(PUT_LONG, PUT_SHORT): Use COPY_LONG, COPY_SHORT.
(VMS_Store_Immediate_Data): Move second buffer capacity check
below bottom of loop; first check at top suffices for loop itself.
(find_file): Remove redundant pointer checks in first two loops;
replace third loop with pointer to last list element determined
in first loop.
start-sanitize-arc start-sanitize-arc
Thu Jun 8 11:44:35 1995 Doug Evans <dje@chestnut.cygnus.com> Thu Jun 8 11:44:35 1995 Doug Evans <dje@chestnut.cygnus.com>

View File

@ -59,7 +59,6 @@ extern int flag_no_hash_mixed_case; /* -h NUM */
char vms_name_mapping = 0; char vms_name_mapping = 0;
extern char *myname;
static symbolS *Entry_Point_Symbol = 0; /* Pointer to "_main" */ static symbolS *Entry_Point_Symbol = 0; /* Pointer to "_main" */
/* /*
@ -236,7 +235,7 @@ static int total_len; /* used to calculate the total length of variable
/* Flag if we have told user about finding global constants in the text /* Flag if we have told user about finding global constants in the text
section. */ section. */
static gave_compiler_message = 0; static int gave_compiler_message = 0;
/* A pointer to the current routine that we are working on. */ /* A pointer to the current routine that we are working on. */
@ -268,15 +267,12 @@ static int Current_Object_Record_Type; /* Type of record in above */
/* /*
* Macros for placing data into the object record buffer * Macros for placing data into the object record buffer
*/ */
#define PUT_LONG(val) \ #define PUT_LONG(val) \
{ md_number_to_chars(Object_Record_Buffer + \ { COPY_LONG(&Object_Record_Buffer[Object_Record_Offset], val); \
Object_Record_Offset, val, 4); \
Object_Record_Offset += 4; } Object_Record_Offset += 4; }
#define PUT_SHORT(val) \ #define PUT_SHORT(val) \
{ md_number_to_chars(Object_Record_Buffer + \ { COPY_SHORT(&Object_Record_Buffer[Object_Record_Offset], val); \
Object_Record_Offset, val, 2); \
Object_Record_Offset += 2; } Object_Record_Offset += 2; }
#define PUT_CHAR(val) Object_Record_Buffer[Object_Record_Offset++] = val #define PUT_CHAR(val) Object_Record_Buffer[Object_Record_Offset++] = val
@ -617,6 +613,7 @@ vms_tir_stack_psect (Psect_Index, Offset, Force)
offset_width = (Force || Offset > 32767 || Offset < -32768) ? 4 offset_width = (Force || Offset > 32767 || Offset < -32768) ? 4
: (Offset > 127 || Offset < -128) ? 2 : 1; : (Offset > 127 || Offset < -128) ? 2 : 1;
#define Sta_P(p,o) (((o)<<1) | ((p)-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)) switch (Sta_P(psect_width,offset_width))
{ {
case Sta_P(1,1): PUT_CHAR (TIR_S_C_STA_PB); case Sta_P(1,1): PUT_CHAR (TIR_S_C_STA_PB);
@ -676,8 +673,7 @@ VMS_Store_Immediate_Data (Pointer, Size, Record_Type)
* If we cannot accommodate this record, flush the * If we cannot accommodate this record, flush the
* buffer. * buffer.
*/ */
if ((Object_Record_Offset + i + 1) >= if ((Object_Record_Offset + i + 1) >= sizeof (Object_Record_Buffer))
sizeof (Object_Record_Buffer))
Flush_VMS_Object_Record_Buffer (); Flush_VMS_Object_Record_Buffer ();
/* /*
* If the buffer is empty we must insert record type * If the buffer is empty we must insert record type
@ -693,13 +689,12 @@ VMS_Store_Immediate_Data (Pointer, Size, Record_Type)
*/ */
while (--i >= 0) while (--i >= 0)
PUT_CHAR (*Pointer++); 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 ();
} }
/*
* 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 ();
} }
/* /*
@ -732,8 +727,7 @@ VMS_Set_Data (Psect_Index, Offset, Record_Type, Force)
/* /*
* Flush the buffer if it is more than 75% full * Flush the buffer if it is more than 75% full
*/ */
if (Object_Record_Offset > if (Object_Record_Offset > (sizeof (Object_Record_Buffer) * 3 / 4))
(sizeof (Object_Record_Buffer) * 3 / 4))
Flush_VMS_Object_Record_Buffer (); Flush_VMS_Object_Record_Buffer ();
} }
@ -760,8 +754,7 @@ VMS_Store_Struct (Struct_Index)
/* /*
* Flush the buffer if it is more than 75% full * Flush the buffer if it is more than 75% full
*/ */
if (Object_Record_Offset > if (Object_Record_Offset > (sizeof (Object_Record_Buffer) * 3 / 4))
(sizeof (Object_Record_Buffer) * 3 / 4))
Flush_VMS_Object_Record_Buffer (); Flush_VMS_Object_Record_Buffer ();
} }
@ -787,8 +780,7 @@ VMS_Def_Struct (Struct_Index)
/* /*
* Flush the buffer if it is more than 75% full * Flush the buffer if it is more than 75% full
*/ */
if (Object_Record_Offset > if (Object_Record_Offset > (sizeof (Object_Record_Buffer) * 3 / 4))
(sizeof (Object_Record_Buffer) * 3 / 4))
Flush_VMS_Object_Record_Buffer (); Flush_VMS_Object_Record_Buffer ();
} }
@ -802,8 +794,7 @@ VMS_Set_Struct (Struct_Index)
PUT_CHAR (TIR_S_C_STA_UW); PUT_CHAR (TIR_S_C_STA_UW);
PUT_SHORT (Struct_Index); PUT_SHORT (Struct_Index);
PUT_CHAR (TIR_S_C_CTL_STLOC); PUT_CHAR (TIR_S_C_CTL_STLOC);
if (Object_Record_Offset > if (Object_Record_Offset > (sizeof (Object_Record_Buffer) * 3 / 4))
(sizeof (Object_Record_Buffer) * 3 / 4))
Flush_VMS_Object_Record_Buffer (); Flush_VMS_Object_Record_Buffer ();
} }
@ -1119,11 +1110,8 @@ VMS_TBT_Block_End (Size)
*/ */
Local[0] = 6; Local[0] = 6;
Local[1] = DST_S_C_BLKEND; Local[1] = DST_S_C_BLKEND;
Local[2] = 0; /* unused, must be zero */
COPY_LONG (&Local[3], Size); COPY_LONG (&Local[3], Size);
/*
* Unused
*/
Local[2] = 0;
VMS_Store_Immediate_Data (Local, 7, OBJ_S_C_DBG); VMS_Store_Immediate_Data (Local, 7, OBJ_S_C_DBG);
} }
@ -1454,29 +1442,29 @@ VMS_TBT_Source_Lines (ID_Number, Starting_Line_Number, Number_Of_Lines)
/*
/* This routine locates a file in the list of files. If an entry does not * 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 * exist, one is created. For include files, a new entry is always created
* such that inline functions can be properly debugged. */ * such that inline functions can be properly debugged.
*/
static struct input_file * static struct input_file *
find_file (sp) find_file (sp)
symbolS *sp; symbolS *sp;
{ {
struct input_file *same_file; struct input_file *same_file = 0;
struct input_file *fpnt; struct input_file *fpnt, *last = 0;
same_file = (struct input_file *) NULL; char *sp_name;
for (fpnt = file_root; fpnt; fpnt = fpnt->next) for (fpnt = file_root; fpnt; fpnt = fpnt->next)
{ {
if (fpnt == (struct input_file *) NULL)
break;
if (fpnt->spnt == sp) if (fpnt->spnt == sp)
return fpnt; return fpnt;
last = fpnt;
} }
sp_name = S_GET_NAME (sp);
for (fpnt = file_root; fpnt; fpnt = fpnt->next) for (fpnt = file_root; fpnt; fpnt = fpnt->next)
{ {
if (fpnt == (struct input_file *) NULL) if (strcmp (sp_name, fpnt->name) == 0)
break;
if (strcmp (S_GET_NAME (sp), fpnt->name) == 0)
{ {
if (fpnt->flag == 1) if (fpnt->flag == 1)
return fpnt; return fpnt;
@ -1485,16 +1473,12 @@ find_file (sp)
} }
} }
fpnt = (struct input_file *) xmalloc (sizeof (struct input_file)); fpnt = (struct input_file *) xmalloc (sizeof (struct input_file));
if (file_root == (struct input_file *) NULL) if (!file_root)
file_root = fpnt; file_root = fpnt;
else else
{ last->next = fpnt;
struct input_file *fpnt1; fpnt->next = 0;
for (fpnt1 = file_root; fpnt1->next; fpnt1 = fpnt1->next) ; fpnt->name = sp_name;
fpnt1->next = fpnt;
}
fpnt->next = (struct input_file *) NULL;
fpnt->name = S_GET_NAME (sp);
fpnt->min_line = 0x7fffffff; fpnt->min_line = 0x7fffffff;
fpnt->max_line = 0; fpnt->max_line = 0;
fpnt->offset = 0; fpnt->offset = 0;
@ -1837,7 +1821,7 @@ gen1 (spnt, array_suffix_len)
else else
i = gen1 (spnt1, 0); i = gen1 (spnt1, 0);
if (i) if (i)
{ /* (*void) is a special case, do not put pointer suffix*/ { /* (*void) is a special case, do not put pointer suffix */
rpush (DBG_S_C_POINTER, 1); rpush (DBG_S_C_POINTER, 1);
total_len += 3; total_len += 3;
rpush (total_len, 2); rpush (total_len, 2);
@ -1926,7 +1910,8 @@ generate_suffix (spnt, dbx_type)
*/ */
if ((total_len >= MAX_DEBUG_RECORD) || overflow) if ((total_len >= MAX_DEBUG_RECORD) || overflow)
{ {
as_warn ("Variable descriptor %d too complicated. Defined as void*", spnt->dbx_type); as_warn ("Variable descriptor %d too complicated. Defined as `void *'.",
spnt->dbx_type);
VMS_Store_Immediate_Data (pvoid, 6, OBJ_S_C_DBG); VMS_Store_Immediate_Data (pvoid, 6, OBJ_S_C_DBG);
return; return;
} }
@ -1941,10 +1926,10 @@ generate_suffix (spnt, dbx_type)
Lpnt = 0; Lpnt = 0;
VMS_Store_Struct (struct_number); VMS_Store_Struct (struct_number);
} }
/* we use this for a forward reference to a structure that has yet to be /* 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 * defined. We store four bytes of zero to make room for the actual address
* it is known * once it is known.
*/ */
if (struct_number < 0) if (struct_number < 0)
{ {
struct_number = -struct_number; struct_number = -struct_number;
@ -2038,6 +2023,7 @@ setup_basic_type (spnt)
VMS_Store_Immediate_Data (Local, Lpnt, OBJ_S_C_DBG); VMS_Store_Immediate_Data (Local, Lpnt, OBJ_S_C_DBG);
Lpnt = 0; Lpnt = 0;
#endif /* SETUP_BASIC_TYPES */ #endif /* SETUP_BASIC_TYPES */
return;
} }
/* This routine generates a symbol definition for a C symbol for the debugger. /* This routine generates a symbol definition for a C symbol for the debugger.
@ -2236,13 +2222,16 @@ VMS_stab_parse (sp, expected_type, type1, type2, Text_Psect)
{ {
if (!gave_compiler_message && expected_type == 'G') if (!gave_compiler_message && expected_type == 'G')
{ {
printf ("***Warning - the assembly code generated by the compiler has placed\n"); static const char long_const_msg[] = "\
printf ("global constant(s) in the text psect. These will not be available to\n"); ***Warning - the assembly code generated by the compiler has placed \n\
printf ("other modules, since this is not the correct way to handle this. You\n"); global constant(s) in the text psect. These will not be available to \n\
printf ("have two options: 1) get a patched compiler that does not put global\n"); other modules, since this is not the correct way to handle this. You \n\
printf ("constants in the text psect, or 2) remove the 'const' keyword from\n"); have two options: 1) get a patched compiler that does not put global \n\
printf ("definitions of global variables in your source module(s). Don't say\n"); constants in the text psect, or 2) remove the 'const' keyword from \n\
printf ("I didn't warn you!"); 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; gave_compiler_message = 1;
} }
VMS_DBG_record (spnt, VMS_DBG_record (spnt,
@ -2990,15 +2979,17 @@ VMS_LSYM_Parse ()
pnt2 = (char *) strchr (pnt1, '='); pnt2 = (char *) strchr (pnt1, '=');
if (pnt2 != (char *) NULL) if (pnt2 != (char *) NULL)
incomplete += VMS_typedef_parse (pnt2); incomplete += VMS_typedef_parse (pnt2);
if (parse_buffer){ 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, /* At this point the parse buffer should just
this is always shorter than the original line. */ contain name:nn. If it does not, then we
strcpy(S_GET_NAME (sp), parse_buffer); are in real trouble. Anyway, this is always
free (parse_buffer); shorter than the original line. */
parse_buffer = 0; strcpy (S_GET_NAME (sp), parse_buffer);
} free (parse_buffer);
*pnt = ':'; /* put back colon so variable def code finds dbx_type*/ parse_buffer = 0;
}
*pnt = ':'; /* put back colon to restore dbx_type */
} }
break; break;
} /*switch*/ } /*switch*/
@ -3183,13 +3174,11 @@ Write_VMS_MHD_Records ()
register const char *cp; register const char *cp;
register char *cp1; register char *cp1;
register int i; register int i;
struct #ifdef VMS
{ struct { unsigned short len, mbz; char *ptr; } Descriptor;
int Size; #endif
char *Ptr; char Module_Name[255+1];
} Descriptor; char Now[17+1];
char Module_Name[256];
char Now[18];
/* /*
* We are writing a module header record * We are writing a module header record
@ -3212,6 +3201,12 @@ Write_VMS_MHD_Records ()
* Maximum record size is size of the object record buffer * Maximum record size is size of the object record buffer
*/ */
PUT_SHORT (sizeof (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) * Get module name (the FILENAME part of the object file)
*/ */
@ -3238,7 +3233,7 @@ Write_VMS_MHD_Records ()
if (strlen (Module_Name) > 31) if (strlen (Module_Name) > 31)
{ {
if (flag_hash_long_names) if (flag_hash_long_names)
printf ("%s: Module name truncated: %s\n", myname, Module_Name); as_tsktsk ("Module name truncated: %s\n", Module_Name);
Module_Name[31] = 0; Module_Name[31] = 0;
} }
PUT_COUNTED_STRING (Module_Name); PUT_COUNTED_STRING (Module_Name);
@ -3247,14 +3242,15 @@ Write_VMS_MHD_Records ()
*/ */
PUT_COUNTED_STRING ("V1.0"); PUT_COUNTED_STRING ("V1.0");
/* /*
* Creation time is "now" (17 chars of time string) * Creation time is "now" (17 chars of time string): "dd-MMM-yyyy hh:mm".
*/ */
#ifndef VMS #ifndef VMS
get_VMS_time_on_unix (&Now[0]); get_VMS_time_on_unix (Now);
#else /* VMS */ #else /* VMS */
Descriptor.Size = 17; Descriptor.len = sizeof Now - 1;
Descriptor.Ptr = Now; Descriptor.mbz = 0; /* type & class unspecified */
sys$asctim (0, &Descriptor, 0, 0); Descriptor.ptr = Now;
(void) sys$asctim ((unsigned short *)0, &Descriptor, (long *)0, 0);
#endif /* VMS */ #endif /* VMS */
for (i = 0; i < 17; i++) for (i = 0; i < 17; i++)
PUT_CHAR (Now[i]); PUT_CHAR (Now[i]);
@ -3421,7 +3417,7 @@ VMS_Case_Hack_Symbol (In, Out)
old_name = In; old_name = In;
/* if (strlen(In) > 31 && flag_hash_long_names) /* if (strlen(In) > 31 && flag_hash_long_names)
printf("%s: Symbol name truncated: %s\n",myname,In);*/ as_tsktsk("Symbol name truncated: %s\n", In); */
/* /*
* Do the case conversion * Do the case conversion
*/ */
@ -3546,7 +3542,7 @@ VMS_Case_Hack_Symbol (In, Out)
*/ */
*Out = 0; *Out = 0;
if (truncate == 1 && flag_hash_long_names && flag_show_after_trunc) if (truncate == 1 && flag_hash_long_names && flag_show_after_trunc)
printf ("%s: Symbol %s replaced by %s\n", myname, old_name, new_name); as_tsktsk ("Symbol %s replaced by %s\n", old_name, new_name);
} }
@ -3722,13 +3718,9 @@ VMS_Global_Symbol_Spec (Name, Psect_Number, Psect_Offset, Flags)
* Psect Number * Psect Number
*/ */
if ((Flags & GBLSYM_LCL) == 0 && (unsigned) Psect_Number <= 255) if ((Flags & GBLSYM_LCL) == 0 && (unsigned) Psect_Number <= 255)
{ PUT_CHAR (Psect_Number);
PUT_CHAR (Psect_Number);
}
else else
{ PUT_SHORT (Psect_Number);
PUT_SHORT (Psect_Number);
}
/* /*
* Offset * Offset
*/ */
@ -3914,8 +3906,7 @@ VMS_Psect_Spec (Name, Size, Type, vsp)
/* /*
* Flush the buffer if it is more than 75% full * Flush the buffer if it is more than 75% full
*/ */
if (Object_Record_Offset > if (Object_Record_Offset > (sizeof (Object_Record_Buffer) * 3 / 4))
(sizeof (Object_Record_Buffer) * 3 / 4))
Flush_VMS_Object_Record_Buffer (); Flush_VMS_Object_Record_Buffer ();
return 0; return 0;
} }
@ -4074,7 +4065,7 @@ VMS_Emit_Globalvalues (text_siz, data_siz, Data_Segment)
GBLSYM_DEF|GBLSYM_VAL); GBLSYM_DEF|GBLSYM_VAL);
break; break;
default: default:
as_tsktsk ("Invalid globalvalue of %s", stripped_name); as_warn ("Invalid globalvalue of %s", stripped_name);
break; break;
} /* switch */ } /* switch */
} /* if */ } /* if */
@ -4121,13 +4112,9 @@ VMS_Procedure_Entry_Pt (Name, Psect_Number, Psect_Offset, Entry_Mask)
* Psect Number * Psect Number
*/ */
if ((unsigned) Psect_Number <= 255) if ((unsigned) Psect_Number <= 255)
{ PUT_CHAR (Psect_Number);
PUT_CHAR (Psect_Number);
}
else else
{ PUT_SHORT (Psect_Number);
PUT_SHORT (Psect_Number);
}
/* /*
* Offset * Offset
*/ */
@ -4144,8 +4131,7 @@ VMS_Procedure_Entry_Pt (Name, Psect_Number, Psect_Offset, Entry_Mask)
/* /*
* Flush the buffer if it is more than 75% full * Flush the buffer if it is more than 75% full
*/ */
if (Object_Record_Offset > if (Object_Record_Offset > (sizeof (Object_Record_Buffer) * 3 / 4))
(sizeof (Object_Record_Buffer) * 3 / 4))
Flush_VMS_Object_Record_Buffer (); Flush_VMS_Object_Record_Buffer ();
} }
@ -4179,8 +4165,7 @@ VMS_Set_Psect (Psect_Index, Offset, Record_Type)
/* /*
* Flush the buffer if it is more than 75% full * Flush the buffer if it is more than 75% full
*/ */
if (Object_Record_Offset > if (Object_Record_Offset > (sizeof (Object_Record_Buffer) * 3 / 4))
(sizeof (Object_Record_Buffer) * 3 / 4))
Flush_VMS_Object_Record_Buffer (); Flush_VMS_Object_Record_Buffer ();
} }
@ -4248,8 +4233,7 @@ VMS_Store_Repeated_Data (Repeat_Count, Pointer, Size, Record_Type)
/* /*
* Flush the buffer if it is more than 75% full * Flush the buffer if it is more than 75% full
*/ */
if (Object_Record_Offset > if (Object_Record_Offset > (sizeof (Object_Record_Buffer) * 3 / 4))
(sizeof (Object_Record_Buffer) * 3 / 4))
Flush_VMS_Object_Record_Buffer (); Flush_VMS_Object_Record_Buffer ();
} }
@ -4281,23 +4265,14 @@ VMS_Store_PIC_Symbol_Reference (Symbol, Offset, PC_Relative,
if (Object_Record_Offset == 0) if (Object_Record_Offset == 0)
PUT_CHAR (Record_Type); PUT_CHAR (Record_Type);
/* /*
* Set to the appropriate offset in the Psect * 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.
*/ */
if (PC_Relative) VMS_Set_Psect (Psect,
{ PC_Relative ? Psect_Offset - 1 : Psect_Offset,
/* Record_Type);
* For a Code reference we need to fix the operand
* specifier as well (so back up 1 byte)
*/
VMS_Set_Psect (Psect, Psect_Offset - 1, Record_Type);
}
else
{
/*
* For a Data reference we just store HERE
*/
VMS_Set_Psect (Psect, Psect_Offset, Record_Type);
}
/* /*
* Make sure we are still generating a "Record Type" record * Make sure we are still generating a "Record Type" record
*/ */
@ -4397,8 +4372,7 @@ VMS_Store_PIC_Symbol_Reference (Symbol, Offset, PC_Relative,
/* /*
* Flush the buffer if it is more than 75% full * Flush the buffer if it is more than 75% full
*/ */
if (Object_Record_Offset > if (Object_Record_Offset > (sizeof (Object_Record_Buffer) * 3 / 4))
(sizeof (Object_Record_Buffer) * 3 / 4))
Flush_VMS_Object_Record_Buffer (); Flush_VMS_Object_Record_Buffer ();
} }
@ -4448,7 +4422,7 @@ VMS_Fix_Indirect_Reference (Text_Psect, Offset, fragP, text_frag_root)
*/ */
if (fragP->fr_literal[Offset - fragP->fr_address] == (char) 0xff) if (fragP->fr_literal[Offset - fragP->fr_address] == (char) 0xff)
{ {
static char Address_Mode = 0xff; static char Address_Mode = (char) 0xff;
/* /*
* Yes: Store the indirect mode back into the image * Yes: Store the indirect mode back into the image
@ -4462,6 +4436,17 @@ VMS_Fix_Indirect_Reference (Text_Psect, Offset, fragP, text_frag_root)
/* /*
* If the procedure "main()" exists we have to add the instruction * 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". * "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 void
vms_check_for_main () vms_check_for_main ()
@ -4633,7 +4618,8 @@ vms_check_for_main ()
symbolP->sy_resolved = 0; symbolP->sy_resolved = 0;
symbolP->sy_resolving = 0; symbolP->sy_resolving = 0;
/* this actually inserts at the beginning of the list */ /* this actually inserts at the beginning of the list */
symbol_append (symbol_rootP, symbolP, &symbol_rootP, &symbol_lastP); symbol_append (symbol_rootP, symbolP,
&symbol_rootP, &symbol_lastP);
symbol_rootP = symbolP; symbol_rootP = symbolP;
/* /*
@ -5452,16 +5438,17 @@ vms_write_object_file (text_siz, data_siz, bss_siz, text_frag_root,
} }
} }
/* now we take a quick sweep through the files and assign offsets /* 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 to each one. This will essentially be the starting line number to
debugger for each file. Output the info for the debugger to specify the the debugger for each file. Output the info for the debugger to
files, and then tell it how many lines to use */ specify the files, and then tell it how many lines to use. */
{ {
int File_Number = 0; int File_Number = 0;
int Debugger_Offset = 0; int Debugger_Offset = 0;
int file_available; int file_available;
Current_File = file_root; Current_File = file_root;
for (Current_File = file_root; Current_File; Current_File = Current_File->next) for (Current_File = file_root; Current_File;
Current_File = Current_File->next)
{ {
if (Current_File == (struct input_file *) NULL) if (Current_File == (struct input_file *) NULL)
break; break;
@ -5717,7 +5704,8 @@ vms_write_object_file (text_siz, data_siz, bss_siz, text_frag_root,
else else
Write_VMS_EOM_Record (Text_Psect, Write_VMS_EOM_Record (Text_Psect,
S_GET_VALUE (Entry_Point_Symbol)); S_GET_VALUE (Entry_Point_Symbol));
/* /*
* All done, close the object file * All done, close the object file
*/ */