rfg@nsc.nsc.com (Ron Guilmette) (10/27/88)
BUGS (3) in GCC 1.30 -- suggested patches included below
In the file sdbout.c in GCC 1.30 there are three bugs.
A) The function sdbout_syms() is declared (implicitly) extern and later
is redeclared as static.
B) The macro PUT_SDB_FUNCTION_START outputs a COFF symbolic declaration
for the ".bf" (begin-function) symbol for each function, but it fails
to actually declare the name of the function itself.
C) In the function sdbout_end_function() the line number used in the
call to the macro PUT_SDB_FUNCTION_END() is an absolute (file)
line number. What is really required by the COFF standard is a
function-relative line number (i.e. the number of lines AFTER THE
START OF THE CURRENT FUNCTION at which the end-of-function was
encountered.
The following patches to sdbout.c fix all three of these bugs.
diff -rc2 1.30/sdbout.c 1.30-gnx/sdbout.c
*** 1.30/sdbout.c Mon Sep 26 14:43:59 1988
--- 1.30-gnx/sdbout.c Wed Oct 26 12:18:50 1988
***************
*** 44,48
void sdbout_init ();
! void sdbout_syms ();
void sdbout_symbol ();
void sdbout_tags();
--- 44,48 -----
void sdbout_init ();
! static void sdbout_syms ();
void sdbout_symbol ();
void sdbout_tags();
***************
*** 121,125
#ifndef PUT_SDB_FUNCTION_START
! #define PUT_SDB_FUNCTION_START(LINE) \
fprintf (asm_out_file, \
"\t.def\t.bf;\t.val\t.;\t.scl\t101;\t.line\t%d;\t.endef\n", \
--- 121,125 -----
#ifndef PUT_SDB_FUNCTION_START
! #define PUT_SDB_FUNCTION_START(LINE,NAME) \
fprintf (asm_out_file, \
"\t.def\t_%s;\t.val\t_%s;\t.scl\t2;\t.type\t044;\t.endef\n", \
***************
*** 123,126
#define PUT_SDB_FUNCTION_START(LINE) \
fprintf (asm_out_file, \
"\t.def\t.bf;\t.val\t.;\t.scl\t101;\t.line\t%d;\t.endef\n", \
(LINE))
--- 123,129 -----
#define PUT_SDB_FUNCTION_START(LINE,NAME) \
fprintf (asm_out_file, \
+ "\t.def\t_%s;\t.val\t_%s;\t.scl\t2;\t.type\t044;\t.endef\n", \
+ (NAME), (NAME)); \
+ fprintf (asm_out_file, \
"\t.def\t.bf;\t.val\t.;\t.scl\t101;\t.line\t%d;\t.endef\n", \
(LINE))
***************
*** 869,873
{
sdb_begin_function_line = line - 1;
! PUT_SDB_FUNCTION_START (line);
sdbout_parms (DECL_ARGUMENTS (current_function_decl));
sdbout_reg_parms (DECL_ARGUMENTS (current_function_decl));
--- 872,876 -----
{
sdb_begin_function_line = line - 1;
! PUT_SDB_FUNCTION_START (line, IDENTIFIER_POINTER (DECL_NAME (current_function_decl)));
sdbout_parms (DECL_ARGUMENTS (current_function_decl));
sdbout_reg_parms (DECL_ARGUMENTS (current_function_decl));
***************
*** 881,885
int line;
{
! PUT_SDB_FUNCTION_END (line);
/* Indicate we are between functions, for line-number output. */
--- 884,888 -----
int line;
{
! PUT_SDB_FUNCTION_END (line - sdb_begin_function_line); /* relative line # */
/* Indicate we are between functions, for line-number output. */