coolidge@clitus.cs.uiuc.edu (John Coolidge) (03/13/90)
I've been getting error messages for some time when debugging code compiled
with gcc (currently using 1.37.1, but the errors are consistent since
1.36) and David Berry's patches (the apple.com set). I finally got tired
of the error messages and found the problem.
The patches add the following to final_start_function:
#if defined(SDB_DEBUGGING_INFO) && defined(AUX)
next_block_index = 1;
if (write_symbols == SDB_DEBUG)
sdbout_begin_function (NOTE_LINE_NUMBER(first));
#endif
which is good, since this fixes some SDB line numbering problems under
AUX. The problem is that these lines in final_scan_insn:
#ifdef SDB_DEBUGGING_INFO
if (write_symbols == SDB_DEBUG)
sdbout_begin_function (last_linenum);
#endif
are left along. sdbout_begin_function is thus being called twice, which
is causing two bf (begin function) directives to be emitted. This makes
SDB marginally unhappy. The fix is simple:
*** ../gcc-1.37.1/final.c Sat Dec 9 08:17:52 1989
--- final.c Mon Mar 12 00:47:20 1990
***************
*** 558,564 ****
break;
f (NOTE_LINE_NUMBER (insn) == NOTE_INSN_FUNCTION_BEG)
{
! #ifdef SDB_DEBUGGING_INFO
if (write_symbols == SDB_DEBUG)
sdbout_begin_function (last_linenum);
#endif
--- 566,572 ----
break;
if (NOTE_LINE_NUMBER (insn) == NOTE_INSN_FUNCTION_BEG)
{
! #if defined(SDB_DEBUGGING_INFO) && !defined(AUX)
if (write_symbols == SDB_DEBUG)
sdbout_begin_function (last_linenum);
#endif
which simply makes the final_scan_insn outputting dependent on AUX. I've
compiled several things (including GCC) with this version of the code,
and it seems to make SDB much happier.
--John
--------------------------------------------------------------------------
John L. Coolidge Internet:coolidge@cs.uiuc.edu UUCP:uiucdcs!coolidge
Of course I don't speak for the U of I (or anyone else except myself)
Copyright 1990 John L. Coolidge. Copying allowed if (and only if) attributed.
You may redistribute this article if and only if your recipients may as well.