mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-23 19:50:13 +08:00
vms cleanup, fixes from Pat Rankin
This commit is contained in:
@ -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>
|
||||||
|
|
||||||
|
@ -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
|
||||||
*/
|
*/
|
||||||
|
Reference in New Issue
Block a user