Patch from Bernard Giroud.
authorBernard Giroud <bgiroud2@free.fr>
Wed, 5 May 2004 07:31:05 +0000 (09:31 +0200)
committerJim Wilson <wilson@gcc.gnu.org>
Wed, 5 May 2004 07:31:05 +0000 (00:31 -0700)
* gcc/gcc/vmsdbgout.c (vms_func_node, vms_func_ref): New.
(func_table): Change type from char ** to vms_func_ref.
(write_rtnbeg):  Update to reflect func_table change.  Use
fde->funcdef_number instead of rtnnum in output.
(write_rtnend, vmxdbgout_begin_function, vmsdbgout_init): Likewise.

From-SVN: r81505

gcc/ChangeLog
gcc/vmsdbgout.c

index d82a2de9f024bf21e8ae8cf550efac24027d50f2..7063898f6cd70651e84281dfda8038bdfbbdc09b 100644 (file)
@@ -1,3 +1,11 @@
+2004-05-04  Bernard Giroud  <bgiroud2@free.fr>
+
+       * gcc/gcc/vmsdbgout.c (vms_func_node, vms_func_ref): New.
+       (func_table): Change type from char ** to vms_func_ref.
+       (write_rtnbeg):  Update to reflect func_table change.  Use
+       fde->funcdef_number instead of rtnnum in output.
+       (write_rtnend, vmxdbgout_begin_function, vmsdbgout_init): Likewise.
+
 2004-05-04  Paolo Bonzini  <bonzini@gnu.org>
            Richard Henderson  <rth@redhat.com>
 
index 64562518e9d8f2435ad2423f07184bc0292c6d50..e32564946b713159c23e2f9166a7c559f4e0d309 100644 (file)
@@ -2,6 +2,7 @@
    Copyright (C) 1987, 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
    1999, 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
    Contributed by Douglas B. Rupp (rupp@gnat.com).
+   Updated by Bernard W. Giroud (bgiroud@users.sourceforge.net).
 
 This file is part of GCC.
 
@@ -102,11 +103,26 @@ static unsigned int file_info_table_in_use;
    table.  */
 #define FILE_TABLE_INCREMENT 64
 
-static char **func_table;
+/* 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 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
    avmdbgout_init.  */
 static const char *primary_filename;
@@ -778,8 +794,9 @@ 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 = func_table[rtnnum];
+  rtnname = (char *)fde->vms_func_name;
   rtnnamelen = strlen (rtnname);
   rtnentryname = concat (rtnname, "..en", NULL);
 
@@ -850,7 +867,7 @@ 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, rtnnum);
+      ASM_GENERATE_INTERNAL_LABEL (label, FUNC_PROLOG_LABEL, fde->funcdef_number);
       totsize += write_debug_addr (label, "prolog breakpoint addr",
                                   dosizeonly);
     }
@@ -868,6 +885,8 @@ 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;
 
@@ -882,8 +901,8 @@ 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, rtnnum);
-  ASM_GENERATE_INTERNAL_LABEL (label2, FUNC_END_LABEL, rtnnum);
+  ASM_GENERATE_INTERNAL_LABEL (label1, FUNC_BEGIN_LABEL, corrected_rtnnum);
+  ASM_GENERATE_INTERNAL_LABEL (label2, FUNC_END_LABEL, corrected_rtnnum);
   totsize += write_debug_delta4 (label2, label1, "routine size", dosizeonly);
 
   return totsize;
@@ -1358,6 +1377,7 @@ 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);
@@ -1365,12 +1385,16 @@ vmsdbgout_begin_function (tree decl)
   if (func_table_in_use == func_table_allocated)
     {
       func_table_allocated += FUNC_TABLE_INCREMENT;
-      func_table = xrealloc (func_table,
-                            func_table_allocated * sizeof (char *));
+      func_table
+        = (vms_func_ref) xrealloc (func_table,
+                                  func_table_allocated * sizeof (vms_func_node));
     }
 
   /* Add the new entry to the end of the function name table.  */
-  func_table[func_table_in_use++] = xstrdup (name);
+  fde = &func_table[func_table_in_use++];
+  fde->vms_func_name = xstrdup (name);
+  fde->funcdef_number = current_function_funcdef_no;
+
 }
 
 static char fullname_buff [4096];
@@ -1581,7 +1605,7 @@ vmsdbgout_init (const char *main_input_filename)
   /* Skip the first entry - file numbers begin at 1 */
   file_info_table_in_use = 1;
 
-  func_table = xcalloc (FUNC_TABLE_INCREMENT, sizeof (char *));
+  func_table = (vms_func_ref) xcalloc (FUNC_TABLE_INCREMENT, sizeof (vms_func_node));
   func_table_allocated = FUNC_TABLE_INCREMENT;
   func_table_in_use = 1;