diff options
author | DJ Delorie <dj@redhat.com> | 2000-07-17 18:59:58 +0000 |
---|---|---|
committer | DJ Delorie <dj@redhat.com> | 2000-07-17 18:59:58 +0000 |
commit | 0ad8cf4c25a62008c63dc37481fc6ef2d94d9218 (patch) | |
tree | a7d51b6edf5ef18c9e857c00128e35f6cfedd7ba /ld/emultempl | |
parent | 874c8c99dbd3b8cd791daf88b8befd858f07587a (diff) | |
download | gdb-0ad8cf4c25a62008c63dc37481fc6ef2d94d9218.zip gdb-0ad8cf4c25a62008c63dc37481fc6ef2d94d9218.tar.gz gdb-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.em | 31 |
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; + } } } } |