OSDN Git Service

* tlink.c (scan_linker_output): Parse linker messages from
authormrs <mrs@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 24 Feb 2007 06:22:12 +0000 (06:22 +0000)
committermrs <mrs@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 24 Feb 2007 06:22:12 +0000 (06:22 +0000)
darwin9's linker better.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@122286 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/tlink.c

index 8e79d24..7907f41 100644 (file)
@@ -607,7 +607,7 @@ scan_linker_output (const char *fname)
 {
   FILE *stream = fopen (fname, "r");
   char *line;
 {
   FILE *stream = fopen (fname, "r");
   char *line;
-  int skip_next_line = 0;
+  int skip_next_in_line = 0;
 
   while ((line = tfgets (stream)) != NULL)
     {
 
   while ((line = tfgets (stream)) != NULL)
     {
@@ -616,11 +616,11 @@ scan_linker_output (const char *fname)
       int end;
       int ok = 0;
 
       int end;
       int ok = 0;
 
-      if (skip_next_line)
-       {
-         skip_next_line = 0;
+      /* On darwin9, we might have to skip " in " lines as well.  */
+      if (skip_next_in_line
+         && strstr (p, " in "))
          continue;
          continue;
-       }
+      skip_next_in_line = 0;
 
       while (*p && ISSPACE ((unsigned char) *p))
        ++p;
 
       while (*p && ISSPACE ((unsigned char) *p))
        ++p;
@@ -662,17 +662,19 @@ scan_linker_output (const char *fname)
          demangled *dem = 0;
          q = 0;
 
          demangled *dem = 0;
          q = 0;
 
-         /* On darwin9, we look for "foo" referenced from:\n.*\n  */
+         /* On darwin9, we look for "foo" referenced from:\n\(.* in .*\n\)*  */
          if (strcmp (oldq, "referenced from:") == 0)
            {
              /* We have to remember that we found a symbol to tweak.  */
              ok = 1;
 
          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.  */
+             /* We actually want to start from the first word on the
+                line.  */
              oldq = p;
 
              oldq = p;
 
-             /* Since the format is multiline, we have to skip the next line.  */
-             skip_next_line = 1;
+             /* Since the format is multiline, we have to skip
+                following lines with " in ".  */
+             skip_next_in_line = 1;
            }
 
          /* First try `GNU style'.  */
            }
 
          /* First try `GNU style'.  */