From f1148292f050c38acb714a13d98e2a774e5a0145 Mon Sep 17 00:00:00 2001 From: mrs Date: Sat, 24 Feb 2007 00:30:30 +0000 Subject: [PATCH] * tlink.c (scan_linker_output): Parse linker messages from darwin9's linker better. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@122283 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/ChangeLog | 5 +++++ gcc/tlink.c | 21 ++++++++++++++++++++- 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index cb4e0986965..bdec047edf3 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2007-02-23 Mike Stump + + * tlink.c (scan_linker_output): Parse linker messages from + darwin9's linker better. + 2007-02-23 Steve Ellcey PR debug/29614 diff --git a/gcc/tlink.c b/gcc/tlink.c index 1689ddbe242..8e10eebbbaa 100644 --- a/gcc/tlink.c +++ b/gcc/tlink.c @@ -607,12 +607,17 @@ scan_linker_output (const char *fname) { FILE *stream = fopen (fname, "r"); char *line; + int skip_next_line = 0; while ((line = tfgets (stream)) != NULL) { char *p = line, *q; symbol *sym; int end; + int ok = 0; + + if (skip_next_line) + continue; while (*p && ISSPACE ((unsigned char) *p)) ++p; @@ -654,6 +659,19 @@ scan_linker_output (const char *fname) demangled *dem = 0; q = 0; + /* On darwin9, we look for "foo" referenced from:\n.*\n */ + if (strcmp (oldq, "referenced from:") == 0) + { + /* We have to remember that we found a symbol to tweak. */ + ok = 1; + + /* We actually want to start from the first word on the line. */ + oldq = p; + + /* Since the format is multiline, we have to skip the next line. */ + skip_next_line = 1; + } + /* First try `GNU style'. */ p = strchr (oldq, '`'); if (p) @@ -681,7 +699,8 @@ scan_linker_output (const char *fname) /* We need to check for certain error keywords here, or we would mistakenly use GNU ld's "In function `foo':" message. */ - if (q && (strstr (oldq, "ndefined") + if (q && (ok + || strstr (oldq, "ndefined") || strstr (oldq, "nresolved") || strstr (oldq, "nsatisfied") || strstr (oldq, "ultiple"))) -- 2.11.0