===================================================================
RCS file: /cvs/src/src/ld/deffile.h,v
retrieving revision 1.6
diff -u -3 -p -B -u -p -r1.6 deffile.h
--- deffile.h   16 Dec 2002 18:02:14 -0000      1.6
+++ deffile.h   25 Jan 2003 21:54:24 -0000
@@ -100,6 +100,11 @@ extern def_file_import * def_file_add_im
   PARAMS ((def_file *, const char *, const char *, int, const char *));
 extern void def_file_add_directive
   PARAMS ((def_file *, const char *, int));
+
+/* return def module pointer or zero if not available */
+extern def_file_module *def_get_module
+       PARAMS ((def_file *, const char *));
+
 #ifdef DEF_FILE_PRINT
 extern void def_file_print
   PARAMS ((FILE *, def_file *));
Index: deffilep.y
===================================================================
RCS file: /cvs/src/src/ld/deffilep.y,v
retrieving revision 1.10
diff -u -3 -p -B -u -p -r1.10 deffilep.y
--- deffilep.y  6 Nov 2002 19:36:20 -0000       1.10
+++ deffilep.y  25 Jan 2003 21:54:26 -0000
@@ -493,6 +493,18 @@ def_file_add_export (def, external_name,
   return e;
 }

+def_file_module *
+def_get_module (def, name)
+     def_file *def;
+     const char *name;
+{
+  def_file_module *s;
+  for (s=def->modules; s; s=s->next)
+    if (strcmp (s->name, name) == 0)
+      return s;
+       return (def_file_module *)0;
+}
+
 static def_file_module *
 def_stash_module (def, name)
      def_file *def;
Index: pe-dll.c
===================================================================
RCS file: /cvs/src/src/ld/pe-dll.c,v
retrieving revision 1.53
diff -u -3 -p -B -u -p -r1.53 pe-dll.c
--- pe-dll.c    5 Jan 2003 03:04:10 -0000       1.53
+++ pe-dll.c    25 Jan 2003 21:54:32 -0000
@@ -2609,6 +2609,16 @@ pe_implied_import_dll (filename)
      to enable symbolic dll linking.  */
   dll_name = pe_as32 (expdata + 12) + erva;

+       /* check if module is already added to the definition 
+          list and if so return without error to avoid
+          multiple symbol definitions */
+       if (def_get_module(pe_def_file,dll_name))
+               {
+               if (pe_dll_extra_pe_debug)
+               printf ("%s is already loaded\n", dll_name);
+                       return TRUE;
+               }
+
   /* Iterate through the list of symbols.  */
   for (i = 0; i < nexp; i++)
     {
