more vms fixes from Pat Rankin

This commit is contained in:
Ken Raeburn 1995-07-06 02:52:44 +00:00
parent 0a8310aca8
commit 4b18b7cd88
3 changed files with 197 additions and 106 deletions

View 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.

View 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] =
};
/* 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 *));
/* 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)
}
#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 ()
}
}
#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.

View 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
/* 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 */