PR25993, read of freed memory
[deliverable/binutils-gdb.git] / ld / pe-dll.c
index 0ed21facd07dd5a12f29817b32ad2c47fd1a4e92..60504293f35878e0518185e2495db6c70777aa8e 100644 (file)
@@ -560,7 +560,7 @@ auto_export (bfd *abfd, def_file *d, const char *n)
   const char * libname = NULL;
 
   if (abfd && abfd->my_archive)
-    libname = lbasename (abfd->my_archive->filename);
+    libname = lbasename (bfd_get_filename (abfd->my_archive));
 
   key.name = key.its_name = (char *) n;
 
@@ -594,7 +594,7 @@ auto_export (bfd *abfd, def_file *d, const char *n)
 
       /* Next, exclude symbols from certain startup objects.  */
 
-      if (abfd && (p = lbasename (abfd->filename)))
+      if (abfd && (p = lbasename (bfd_get_filename (abfd))))
        {
          afptr = autofilter_objlist;
          while (afptr->name)
@@ -655,7 +655,7 @@ auto_export (bfd *abfd, def_file *d, const char *n)
        }
       else if (ex->type == EXCLUDEFORIMPLIB)
        {
-         if (filename_cmp (abfd->filename, ex->string) == 0)
+         if (filename_cmp (bfd_get_filename (abfd), ex->string) == 0)
            return 0;
        }
       else if (strcmp (n, ex->string) == 0)
@@ -1079,7 +1079,7 @@ generate_edata (bfd *abfd, struct bfd_link_info *info ATTRIBUTE_UNUSED)
     dll_name = pe_def_file->name;
   else
     {
-      dll_name = abfd->filename;
+      dll_name = bfd_get_filename (abfd);
 
       for (dlnp = dll_name; *dlnp; dlnp++)
        if (*dlnp == '\\' || *dlnp == '/' || *dlnp == ':')
@@ -2767,7 +2767,7 @@ pe_create_import_fixup (arelent *rel, asection *s, bfd_vma addend, char *name,
       if (!(name_thunk_sym && name_thunk_sym->type == bfd_link_hash_defined))
        {
          b = make_singleton_name_thunk (name, link_info.output_bfd);
-         add_bfd_to_link (b, b->filename, &link_info);
+         add_bfd_to_link (b, bfd_get_filename (b), &link_info);
 
          /* If we ever use autoimport, we have to cast text section writable.  */
          config.text_read_only = FALSE;
@@ -2778,7 +2778,7 @@ pe_create_import_fixup (arelent *rel, asection *s, bfd_vma addend, char *name,
        {
          b = make_import_fixup_entry (name, fixup_name, symname,
                                       link_info.output_bfd);
-         add_bfd_to_link (b, b->filename, &link_info);
+         add_bfd_to_link (b, bfd_get_filename (b), &link_info);
        }
     }
 
@@ -2794,12 +2794,12 @@ pe_create_import_fixup (arelent *rel, asection *s, bfd_vma addend, char *name,
 
       b = make_runtime_pseudo_reloc (name, fixup_name, addend, rel->howto->bitsize,
                                     link_info.output_bfd);
-      add_bfd_to_link (b, b->filename, &link_info);
+      add_bfd_to_link (b, bfd_get_filename (b), &link_info);
 
       if (runtime_pseudo_relocs_created++ == 0)
        {
          b = pe_create_runtime_relocator_reference (link_info.output_bfd);
-         add_bfd_to_link (b, b->filename, &link_info);
+         add_bfd_to_link (b, bfd_get_filename (b), &link_info);
        }
     }
 
@@ -2855,7 +2855,7 @@ pe_dll_generate_implib (def_file *def, const char *impfilename, struct bfd_link_
        {
          if (ex->type != EXCLUDEFORIMPLIB)
            continue;
-         found = (filename_cmp (ex->string, ibfd->filename) == 0);
+         found = (filename_cmp (ex->string, bfd_get_filename (ibfd)) == 0);
        }
       /* If it matched, we must open a fresh BFD for it (the original
         input BFD is still needed for the DLL's final link) and add
@@ -2863,10 +2863,11 @@ pe_dll_generate_implib (def_file *def, const char *impfilename, struct bfd_link_
       if (found)
        {
          bfd *newbfd = bfd_openr (ibfd->my_archive
-               ? ibfd->my_archive->filename : ibfd->filename, NULL);
+                                  ? bfd_get_filename (ibfd->my_archive)
+                                  : bfd_get_filename (ibfd), NULL);
          if (!newbfd)
            {
-             einfo (_("%X%P: bfd_openr %s: %E\n"), ibfd->filename);
+             einfo (_("%X%P: bfd_openr %s: %E\n"), bfd_get_filename (ibfd));
              return;
            }
          if (ibfd->my_archive)
@@ -2879,19 +2880,22 @@ pe_dll_generate_implib (def_file *def, const char *impfilename, struct bfd_link_
              if (!bfd_check_format_matches (arbfd, bfd_archive, NULL))
                {
                  einfo (_("%X%P: %s(%s): can't find member in non-archive file"),
-                   ibfd->my_archive->filename, ibfd->filename);
+                        bfd_get_filename (ibfd->my_archive),
+                        bfd_get_filename (ibfd));
                  return;
                }
              newbfd = NULL;
              while ((newbfd = bfd_openr_next_archived_file (arbfd, newbfd)) != 0)
                {
-                 if (filename_cmp (newbfd->filename, ibfd->filename) == 0)
+                 if (filename_cmp (bfd_get_filename (newbfd),
+                                   bfd_get_filename (ibfd)) == 0)
                    break;
                }
              if (!newbfd)
                {
                  einfo (_("%X%P: %s(%s): can't find member in archive"),
-                   ibfd->my_archive->filename, ibfd->filename);
+                        bfd_get_filename (ibfd->my_archive),
+                        bfd_get_filename (ibfd));
                  return;
                }
            }
@@ -3248,7 +3252,7 @@ pe_process_import_defs (bfd *output_bfd, struct bfd_link_info *linfo)
              if (!do_this_dll)
                {
                  bfd *ar_head = make_head (output_bfd);
-                 add_bfd_to_link (ar_head, ar_head->filename, linfo);
+                 add_bfd_to_link (ar_head, bfd_get_filename (ar_head), linfo);
                  do_this_dll = 1;
                }
              exp.internal_name = imp[i].internal_name;
@@ -3261,13 +3265,13 @@ pe_process_import_defs (bfd *output_bfd, struct bfd_link_info *linfo)
              exp.flag_data = imp[i].data;
              exp.flag_noname = exp.name ? 0 : 1;
              one = make_one (&exp, output_bfd, (! exp.flag_data) && include_jmp_stub);
-             add_bfd_to_link (one, one->filename, linfo);
+             add_bfd_to_link (one, bfd_get_filename (one), linfo);
            }
        }
       if (do_this_dll)
        {
          bfd *ar_tail = make_tail (output_bfd);
-         add_bfd_to_link (ar_tail, ar_tail->filename, linfo);
+         add_bfd_to_link (ar_tail, bfd_get_filename (ar_tail), linfo);
        }
 
       free (dll_symname);
This page took 0.027763 seconds and 4 git commands to generate.