diff options
author | Bernard Giroud <bgiroud2@free.fr> | 2004-05-05 09:31:05 +0200 |
---|---|---|
committer | Jim Wilson <wilson@gcc.gnu.org> | 2004-05-05 00:31:05 -0700 |
commit | 87fac4e31ce01c15d44c4526b639f06879f1c697 (patch) | |
tree | 9cbac15969c0747a0fcde1ccc425a45997fd373b | |
parent | cc27e657d36005a8b1672f2ee60a5ad779a0d804 (diff) | |
download | gcc-87fac4e31ce01c15d44c4526b639f06879f1c697.zip gcc-87fac4e31ce01c15d44c4526b639f06879f1c697.tar.gz gcc-87fac4e31ce01c15d44c4526b639f06879f1c697.tar.bz2 |
Patch from Bernard Giroud.
* 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
-rw-r--r-- | gcc/ChangeLog | 8 | ||||
-rw-r--r-- | gcc/vmsdbgout.c | 42 |
2 files changed, 41 insertions, 9 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index d82a2de..7063898 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -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> diff --git a/gcc/vmsdbgout.c b/gcc/vmsdbgout.c index 6456251..e325649 100644 --- a/gcc/vmsdbgout.c +++ b/gcc/vmsdbgout.c @@ -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; |