* pe-dll.c (process_def_file): don't assume exports won't move
authorDJ Delorie <dj@redhat.com>
Tue, 10 Nov 1998 03:45:43 +0000 (03:45 +0000)
committerDJ Delorie <dj@redhat.com>
Tue, 10 Nov 1998 03:45:43 +0000 (03:45 +0000)
during a realloc

ld/ChangeLog
ld/pe-dll.c

index 10805fc93d32a7082e757b6beb877df61b5377d2..ea7dd5a1996873905ddf6987d7dee0bd215ddc42 100644 (file)
@@ -1,3 +1,8 @@
+Mon Nov  9 22:44:58 1998  DJ Delorie  <dj@cygnus.com>
+
+       * pe-dll.c (process_def_file): don't assume exports won't move
+       during a realloc
+
 Mon Nov  9 16:41:30 1998  DJ Delorie  <dj@cygnus.com>
 
        * pe-dll.c: New file; direct support for PE DLLs
index abfd9d4b5ea4048917b64a8d9ba59497a98c596c..72444c0e8084640fd852bcb60d999c28807c0415 100644 (file)
@@ -182,7 +182,7 @@ process_def_file (abfd, info)
   struct bfd_link_hash_entry *blhe;
   bfd *b;
   struct sec *s;
-  def_file_export *e;
+  def_file_export *e=0;
 
   if (!pe_def_file)
     pe_def_file = def_file_empty ();
@@ -233,7 +233,6 @@ process_def_file (abfd, info)
 
 #undef NE
 #define NE pe_def_file->num_exports
-  e = pe_def_file->exports;    /* convenience */
 
   /* Canonicalize the export list */
 
@@ -241,13 +240,13 @@ process_def_file (abfd, info)
     {
       for (i = 0; i < NE; i++)
        {
-         if (strchr (e[i].name, '@'))
+         if (strchr (pe_def_file->exports[i].name, '@'))
            {
              /* This will preserve internal_name, which may have been pointing
                 to the same memory as name, or might not have */
-             char *tmp = xstrdup (e[i].name);
+             char *tmp = xstrdup (pe_def_file->exports[i].name);
              *(strchr (tmp, '@')) = 0;
-             e[i].name = tmp;
+             pe_def_file->exports[i].name = tmp;
            }
        }
     }
@@ -256,18 +255,21 @@ process_def_file (abfd, info)
     {
       for (i = 0; i < NE; i++)
        {
-         if (strchr (e[i].name, '@'))
+         if (strchr (pe_def_file->exports[i].name, '@'))
            {
-             char *tmp = xstrdup (e[i].name);
+             char *tmp = xstrdup (pe_def_file->exports[i].name);
              *(strchr (tmp, '@')) = 0;
              if (auto_export (pe_def_file, tmp))
-               def_file_add_export (pe_def_file, tmp, e[i].internal_name, -1);
+               def_file_add_export (pe_def_file, tmp,
+                                    pe_def_file->exports[i].internal_name, -1);
              else
                free (tmp);
            }
        }
     }
 
+  e = pe_def_file->exports;    /* convenience */
+
   exported_symbol_offsets = (bfd_vma *) xmalloc (NE * sizeof (bfd_vma));
   exported_symbol_sections = (struct sec **) xmalloc (NE * sizeof (struct sec *));