]> 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>
Mon, 10 Jan 2005 15:25:23 +0000 (15:25 +0000)
committerDavid Edelsohn <dje@gcc.gnu.org>
Mon, 10 Jan 2005 15:25:23 +0000 (10:25 -0500)
        PR target/18720
        Backport from mainline
        * 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: r93141

gcc/ChangeLog
gcc/collect2.c

index c499d4263113fd3f284c60f07a0f76659fd397e7..2b98f2b5eedf6998a31fe4898c719348a7eb0bc9 100644 (file)
@@ -1,3 +1,11 @@
+2005-01-10  David Edelsohn  <edelsohn@gnu.org>
+
+       PR target/18720
+       Backport from mainline
+       * 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-08  Jakub Jelinek  <jakub@redhat.com>
 
        PR rtl-optimization/19012
index 4fbe3a420032f40a5930b83732424319b2f3e59d..33206f5cf2ff04f2b1718c5a6a334c4476aa0e68 100644 (file)
@@ -189,6 +189,7 @@ static int strip_flag;                      /* true if -s */
 #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 */
@@ -246,7 +247,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);
@@ -1080,6 +1080,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
 
@@ -2823,6 +2825,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)
@@ -2841,14 +2845,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);
                }
            }