2009-11-27 Tristan Gingold <gingold@adacore.com>
authorTristan Gingold <gingold@adacore.com>
Fri, 27 Nov 2009 09:00:36 +0000 (09:00 +0000)
committerTristan Gingold <gingold@adacore.com>
Fri, 27 Nov 2009 09:00:36 +0000 (09:00 +0000)
* pe-dll.c (pe_implied_import_dll): Return early if there is no
export entries.

ld/ChangeLog
ld/pe-dll.c

index 904262f..3a0aa49 100644 (file)
@@ -1,3 +1,8 @@
+2009-11-27  Tristan Gingold  <gingold@adacore.com>
+
+       * pe-dll.c (pe_implied_import_dll): Return early if there is no
+       export entries.
+
 2009-11-26  Nick Clifton  <nickc@redhat.com>
 
        PR ld/10956
index beeb580..fb94813 100644 (file)
@@ -2981,7 +2981,7 @@ pe_implied_import_dll (const char *filename)
       return FALSE;
     }
 
-  /* Get pe_header, optional header and numbers of export entries.  */
+  /* Get pe_header, optional header and numbers of directory entries.  */
   pe_header_offset = pe_get32 (dll, 0x3c);
   opthdr_ofs = pe_header_offset + 4 + 20;
 #ifdef pe_use_x86_64
@@ -2990,7 +2990,8 @@ pe_implied_import_dll (const char *filename)
   num_entries = pe_get32 (dll, opthdr_ofs + 92);
 #endif
 
-  if (num_entries < 1) /* No exports.  */
+  /* No import or export directory entry.  */
+  if (num_entries < 1)
     return FALSE;
 
 #ifdef pe_use_x86_64
@@ -3001,6 +3002,10 @@ pe_implied_import_dll (const char *filename)
   export_size = pe_get32 (dll, opthdr_ofs + 100);
 #endif
 
+  /* No export table - nothing to export.  */
+  if (export_size == 0)
+    return FALSE;
+
   nsections = pe_get16 (dll, pe_header_offset + 4 + 2);
   secptr = (pe_header_offset + 4 + 20 +
            pe_get16 (dll, pe_header_offset + 4 + 16));