@@ -106,26 +106,12 @@ static unsigned int file_info_table_in_u
table. */
#define FILE_TABLE_INCREMENT 64
-/* A structure to hold basic information for the VMS end
- routine. */
-
-typedef struct vms_func_struct
-{
- const char *vms_func_name;
- unsigned funcdef_number;
-}
-vms_func_node;
-
-typedef struct vms_func_struct *vms_func_ref;
-
+static char **funcnam_table;
+static unsigned int *funcnum_table;
static unsigned int func_table_allocated;
static unsigned int func_table_in_use;
#define FUNC_TABLE_INCREMENT 256
-/* A pointer to the base of a table that contains frame description
- information for each routine. */
-static vms_func_ref func_table;
-
/* Local pointer to the name of the main input file. Initialized in
vmsdbgout_init. */
static const char *primary_filename;
@@ -805,9 +665,8 @@ write_rtnbeg (int rtnnum, int dosizeonly
char label[MAX_ARTIFICIAL_LABEL_BYTES];
DST_ROUTINE_BEGIN rtnbeg;
DST_PROLOG prolog;
- vms_func_ref fde = &func_table[rtnnum];
- rtnname = fde->vms_func_name;
+ rtnname = funcnam_table [rtnnum];
rtnnamelen = strlen (rtnname);
rtnentryname = concat (rtnname, "..en", NULL);
@@ -878,7 +737,8 @@ write_rtnbeg (int rtnnum, int dosizeonly
totsize += write_debug_header (&prolog.dst_a_prolog_header, "prolog",
dosizeonly);
- ASM_GENERATE_INTERNAL_LABEL (label, FUNC_PROLOG_LABEL, fde->funcdef_number);
+ ASM_GENERATE_INTERNAL_LABEL (label, FUNC_PROLOG_LABEL,
+ funcnum_table [rtnnum]);
totsize += write_debug_addr (label, "prolog breakpoint addr",
dosizeonly);
}
@@ -896,8 +756,6 @@ write_rtnend (int rtnnum, int dosizeonly
char label1[MAX_ARTIFICIAL_LABEL_BYTES];
char label2[MAX_ARTIFICIAL_LABEL_BYTES];
int totsize;
- vms_func_ref fde = &func_table[rtnnum];
- int corrected_rtnnum = fde->funcdef_number;
totsize = 0;
@@ -912,8 +770,10 @@ write_rtnend (int rtnnum, int dosizeonly
totsize += write_debug_data1 (rtnend.dst_b_rtnend_unused, "unused",
dosizeonly);
- ASM_GENERATE_INTERNAL_LABEL (label1, FUNC_BEGIN_LABEL, corrected_rtnnum);
- ASM_GENERATE_INTERNAL_LABEL (label2, FUNC_END_LABEL, corrected_rtnnum);
+ ASM_GENERATE_INTERNAL_LABEL (label1, FUNC_BEGIN_LABEL,
+ funcnum_table [rtnnum]);
+ ASM_GENERATE_INTERNAL_LABEL (label2, FUNC_END_LABEL,
+ funcnum_table [rtnnum]);
totsize += write_debug_delta4 (label2, label1, "routine size", dosizeonly);
return totsize;
@@ -1383,13 +1275,12 @@ vmsdbgout_ignore_block (const_tree block
return retval;
}
-/* Add an entry for function DECL into the func_table. */
+/* Add an entry for function DECL into the funcnam_table. */
static void
vmsdbgout_begin_function (tree decl)
{
const char *name = XSTR (XEXP (DECL_RTL (decl), 0), 0);
- vms_func_ref fde;
if (write_symbols == VMS_AND_DWARF2_DEBUG)
(*dwarf2_debug_hooks.begin_function) (decl);
@@ -1397,16 +1288,15 @@ vmsdbgout_begin_function (tree decl)
if (func_table_in_use == func_table_allocated)
{
func_table_allocated += FUNC_TABLE_INCREMENT;
- func_table
- = (vms_func_ref) xrealloc (func_table,
- func_table_allocated * sizeof (vms_func_node));
+ funcnam_table = XRESIZEVEC (char *, funcnam_table, func_table_allocated);
+ funcnum_table = XRESIZEVEC (unsigned int, funcnum_table,
+ func_table_allocated);
}
/* Add the new entry to the end of the function name table. */
- fde = &func_table[func_table_in_use++];
- fde->vms_func_name = xstrdup (name);
- fde->funcdef_number = current_function_funcdef_no;
-
+ funcnam_table[func_table_in_use] = xstrdup (name);
+ funcnum_table[func_table_in_use] = current_function_funcdef_no;
+ func_table_in_use++;
}
static char fullname_buff [4096];
@@ -1586,12 +1472,13 @@ vmsdbgout_init (const char *main_input_f
/* Allocate the initial hunk of the file_info_table. */
file_info_table = XCNEWVEC (dst_file_info_entry, FILE_TABLE_INCREMENT);
file_info_table_allocated = FILE_TABLE_INCREMENT;
-
- /* Skip the first entry - file numbers begin at 1 */
+ /* Skip the first entry - file numbers begin at 1. */
file_info_table_in_use = 1;
- func_table = (vms_func_ref) xcalloc (FUNC_TABLE_INCREMENT, sizeof (vms_func_node));
+ funcnam_table = XCNEWVEC (char *, FUNC_TABLE_INCREMENT);
+ funcnum_table = XCNEWVEC (unsigned int, FUNC_TABLE_INCREMENT);
func_table_allocated = FUNC_TABLE_INCREMENT;
+ /* Skip the first entry. */
func_table_in_use = 1;
/* Allocate the initial hunk of the line_info_table. */