diff options
author | Tom Wood <wood@gnu.org> | 1992-11-20 20:37:05 +0000 |
---|---|---|
committer | Tom Wood <wood@gnu.org> | 1992-11-20 20:37:05 +0000 |
commit | 89881415f5d45a0da9f300b60d35141e1661ba09 (patch) | |
tree | 1eda3e1ee14c0812ce17f962362978da165d7068 /gcc | |
parent | 3daf3cadb0d501cc3f0a63449e0d76e662b8fc63 (diff) | |
download | gcc-89881415f5d45a0da9f300b60d35141e1661ba09.zip gcc-89881415f5d45a0da9f300b60d35141e1661ba09.tar.gz gcc-89881415f5d45a0da9f300b60d35141e1661ba09.tar.bz2 |
(final): When producing SDB debugging info...
(final): When producing SDB debugging info, delete line
number notes from inlined functions in other files as well as
duplicate line number notes.
From-SVN: r2763
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/final.c | 37 |
1 files changed, 33 insertions, 4 deletions
diff --git a/gcc/final.c b/gcc/final.c index 5b4d531..7c3a61b 100644 --- a/gcc/final.c +++ b/gcc/final.c @@ -902,10 +902,39 @@ final (first, file, optimize, prescan) last_ignored_compare = 0; new_block = 1; - /* Make a map indicating which line numbers appear in this function. */ - for (insn = first; insn; insn = NEXT_INSN (insn)) - if (GET_CODE (insn) == NOTE && NOTE_LINE_NUMBER (insn) > max_line) - max_line = NOTE_LINE_NUMBER (insn); + /* Make a map indicating which line numbers appear in this function. + When producing SDB debugging info, delete troublesome line number + notes from inlined functions in other files as well as duplicate + line number notes. */ +#ifdef SDB_DEBUGGING_INFO + if (write_symbols == SDB_DEBUG) + { + rtx last = 0; + for (insn = first; insn; insn = NEXT_INSN (insn)) + if (GET_CODE (insn) == NOTE && NOTE_LINE_NUMBER (insn) > 0) + { + if ((RTX_INTEGRATED_P (insn) + && strcmp (NOTE_SOURCE_FILE (insn), main_input_filename) != 0) + || (last != 0 + && NOTE_LINE_NUMBER (insn) == NOTE_LINE_NUMBER (last) + && NOTE_SOURCE_FILE (insn) == NOTE_SOURCE_FILE (last))) + { + NOTE_LINE_NUMBER (insn) = NOTE_INSN_DELETED; + NOTE_SOURCE_FILE (insn) = 0; + continue; + } + last = insn; + if (NOTE_LINE_NUMBER (insn) > max_line) + max_line = NOTE_LINE_NUMBER (insn); + } + } + else +#endif + { + for (insn = first; insn; insn = NEXT_INSN (insn)) + if (GET_CODE (insn) == NOTE && NOTE_LINE_NUMBER (insn) > max_line) + max_line = NOTE_LINE_NUMBER (insn); + } line_note_exists = (char *) oballoc (max_line + 1); bzero (line_note_exists, max_line + 1); |