aboutsummaryrefslogtreecommitdiff
path: root/ld/emultempl
diff options
context:
space:
mode:
authorDJ Delorie <dj@redhat.com>2000-07-17 18:59:58 +0000
committerDJ Delorie <dj@redhat.com>2000-07-17 18:59:58 +0000
commit0ad8cf4c25a62008c63dc37481fc6ef2d94d9218 (patch)
treea7d51b6edf5ef18c9e857c00128e35f6cfedd7ba /ld/emultempl
parent874c8c99dbd3b8cd791daf88b8befd858f07587a (diff)
downloadbinutils-0ad8cf4c25a62008c63dc37481fc6ef2d94d9218.zip
binutils-0ad8cf4c25a62008c63dc37481fc6ef2d94d9218.tar.gz
binutils-0ad8cf4c25a62008c63dc37481fc6ef2d94d9218.tar.bz2
* src/ld/emultempl/pe.em (gld_*_open_dynamic_archive): New search
order for dynamic library '-lfoo' on pei386: libfoo.dll.a, foo.dll.a, libfoo.a, libfoo.dll, foo.dll. This fixes compatibility errors introduced by the old dynamic lib search order.
Diffstat (limited to 'ld/emultempl')
-rw-r--r--ld/emultempl/pe.em31
1 files changed, 24 insertions, 7 deletions
diff --git a/ld/emultempl/pe.em b/ld/emultempl/pe.em
index 582d541..0ffeffc 100644
--- a/ld/emultempl/pe.em
+++ b/ld/emultempl/pe.em
@@ -1387,16 +1387,33 @@ gld_${EMULATION_NAME}_open_dynamic_archive (arch, search, entry)
sprintf (string, "%s/%s.dll.a", search->name, filename);
if (! ldfile_try_open_bfd (string, entry))
{
- /* Try "libfoo.dll" (preferred dll name) */
- sprintf (string, "%s/lib%s.dll", search->name, filename);
+/*
+ Try libfoo.a next. Normally, this would be interpreted as a static
+ library, but it *could* be an import library. For backwards compatibility,
+ libfoo.a needs to ==precede== libfoo.dll and foo.dll in the search,
+ or sometimes errors occur when building legacy packages.
+
+ Putting libfoo.a here means that in a failure case (i.e. the library
+ -lfoo is not found) we will search for libfoo.a twice before
+ giving up -- once here, and once when searching for a "static" lib.
+ for a "static" lib.
+*/
+ /* Try "libfoo.a" (import lib, or static lib, but must
+ take precedence over dll's) */
+ sprintf (string, "%s/lib%s.a", search->name, filename);
if (! ldfile_try_open_bfd (string, entry))
- {
- /* Finally, try "foo.dll" (alternate dll name) */
- sprintf (string, "%s/%s.dll", search->name, filename);
+ {
+ /* Try "libfoo.dll" (preferred dll name) */
+ sprintf (string, "%s/lib%s.dll", search->name, filename);
if (! ldfile_try_open_bfd (string, entry))
{
- free (string);
- return false;
+ /* Finally, try "foo.dll" (alternate dll name) */
+ sprintf (string, "%s/%s.dll", search->name, filename);
+ if (! ldfile_try_open_bfd (string, entry))
+ {
+ free (string);
+ return false;
+ }
}
}
}