From 4e073f37d6666ed1a8a918d2c3eeb06eb1bc61a4 Mon Sep 17 00:00:00 2001 From: David Edelsohn Date: Mon, 10 Jan 2005 15:25:23 +0000 Subject: [PATCH] re PR other/18720 (collect2 uses wrong search order if -brtl specified) 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 | 8 ++++++++ gcc/collect2.c | 15 ++++++++++----- 2 files changed, 18 insertions(+), 5 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index c499d4263113..2b98f2b5eedf 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,11 @@ +2005-01-10 David Edelsohn + + 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 PR rtl-optimization/19012 diff --git a/gcc/collect2.c b/gcc/collect2.c index 4fbe3a420032..33206f5cf2ff 100644 --- a/gcc/collect2.c +++ b/gcc/collect2.c @@ -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); } } -- 2.47.2