aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorTom Wood <wood@gnu.org>1992-11-20 20:37:05 +0000
committerTom Wood <wood@gnu.org>1992-11-20 20:37:05 +0000
commit89881415f5d45a0da9f300b60d35141e1661ba09 (patch)
tree1eda3e1ee14c0812ce17f962362978da165d7068 /gcc
parent3daf3cadb0d501cc3f0a63449e0d76e662b8fc63 (diff)
downloadgcc-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.c37
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);