]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR other/18720 (collect2 uses wrong search order if -brtl specified)
authorDavid Edelsohn <edelsohn@gnu.org>
Sun, 9 Jan 2005 22:01:48 +0000 (22:01 +0000)
committerDavid Edelsohn <dje@gcc.gnu.org>
Sun, 9 Jan 2005 22:01:48 +0000 (17:01 -0500)
        PR target/18720
        * collect2.c (main): Set aixrtl_flag for -brtl option.
        (resolve_lib_name): Search for .so file extension before .a
        if aixrtl_flag set.

From-SVN: r93119

gcc/ChangeLog
gcc/collect2.c

index da2f470a9cd44d99820d0bf8786eaf1689c7da56..e26229f441a3dc11702c8a13a56026068490a559 100644 (file)
@@ -1,3 +1,10 @@
+2005-01-09  David Edelsohn  <edelsohn@gnu.org>
+
+       PR target/18720
+       * collect2.c (main): Set aixrtl_flag for -brtl option.
+       (resolve_lib_name): Search for .so file extension before .a
+       if aixrtl_flag set.
+
 2005-01-09  Dorit Naishlos  <dorit@il.ibm.com>
 
        * tree-vectorizer.c (vect_enhance_data_refs_alignment): Add dump prints.
index cc55cf4de00099d65e8bc973fcb998d4c7f8b006..999e670fc7c70e5eb9eebf19547036bb200c5740 100644 (file)
@@ -185,6 +185,7 @@ static const char *demangle_flag;
 #ifdef COLLECT_EXPORT_LIST
 static int export_flag;                 /* true if -bE */
 static int aix64_flag;                 /* true if -b64 */
+static int aixrtl_flag;                        /* true if -brtl */
 #endif
 
 int debug;                             /* true if -debug */
@@ -242,7 +243,6 @@ static struct path_prefix cmdline_lib_dirs; /* directories specified with -L */
 static struct path_prefix libpath_lib_dirs; /* directories in LIBPATH */
 static struct path_prefix *libpaths[3] = {&cmdline_lib_dirs,
                                          &libpath_lib_dirs, NULL};
-static const char *const libexts[3] = {"a", "so", NULL};  /* possible library extensions */
 #endif
 
 static void handler (int);
@@ -1087,6 +1087,8 @@ main (int argc, char **argv)
                 export_flag = 1;
              else if (arg[2] == '6' && arg[3] == '4')
                aix64_flag = 1;
+             else if (arg[2] == 'r' && arg[3] == 't' && arg[4] == 'l')
+               aixrtl_flag = 1;
              break;
 #endif
 
@@ -2594,6 +2596,8 @@ resolve_lib_name (const char *name)
 {
   char *lib_buf;
   int i, j, l = 0;
+  /* Library extensions for AIX dynamic linking.  */
+  const char * const libexts[2] = {"a", "so"};
 
   for (i = 0; libpaths[i]; i++)
     if (libpaths[i]->max_len > l)
@@ -2612,14 +2616,15 @@ resolve_lib_name (const char *name)
          const char *p = "";
          if (list->prefix[strlen(list->prefix)-1] != '/')
            p = "/";
-         for (j = 0; libexts[j]; j++)
+         for (j = 0; j < 2; j++)
            {
              sprintf (lib_buf, "%s%slib%s.%s",
-                      list->prefix, p, name, libexts[j]);
-if (debug) fprintf (stderr, "searching for: %s\n", lib_buf);
+                      list->prefix, p, name,
+                      libexts[(j + aixrtl_flag) % 2]);
+             if (debug) fprintf (stderr, "searching for: %s\n", lib_buf);
              if (file_exists (lib_buf))
                {
-if (debug) fprintf (stderr, "found: %s\n", lib_buf);
+                 if (debug) fprintf (stderr, "found: %s\n", lib_buf);
                  return (lib_buf);
                }
            }