diff options
author | Alan Modra <amodra@gmail.com> | 2023-01-31 12:39:29 +1030 |
---|---|---|
committer | Alan Modra <amodra@gmail.com> | 2023-01-31 15:18:04 +1030 |
commit | 6296342ec4473352483eaa82f0553d4a209319a1 (patch) | |
tree | 48b567404ffd8fb9fea9dbd24fed714ddb004d1b /binutils | |
parent | 9884676d9da9c691ba0d223836b5bf70740ee7e3 (diff) | |
download | gdb-6296342ec4473352483eaa82f0553d4a209319a1.zip gdb-6296342ec4473352483eaa82f0553d4a209319a1.tar.gz gdb-6296342ec4473352483eaa82f0553d4a209319a1.tar.bz2 |
PR 30060, ASAN error in bfd_cache_close
After bfd_close nothing should access bfd memory. Now that bfd_close
always tidies up even after an error, attempting to tidy the cached
bfd list by calling bfd_cache_close is wrong and not needed.
PR 30060
* ar.c (remove_output): Don't call bfd_cache_close.
(output_bfd): Delete.
* arsup.c (ar_end): Call bfd_close_all_done, not bfd_cache_close.
Diffstat (limited to 'binutils')
-rw-r--r-- | binutils/ar.c | 6 | ||||
-rw-r--r-- | binutils/arsup.c | 5 |
2 files changed, 3 insertions, 8 deletions
diff --git a/binutils/ar.c b/binutils/ar.c index f8b161a..2c901ca 100644 --- a/binutils/ar.c +++ b/binutils/ar.c @@ -431,15 +431,12 @@ normalize (const char *file, bfd *abfd) static const char *output_filename = NULL; static FILE *output_file = NULL; -static bfd *output_bfd = NULL; static void remove_output (void) { if (output_filename != NULL) { - if (output_bfd != NULL) - bfd_cache_close (output_bfd); if (output_file != NULL) fclose (output_file); unlink_if_ordinary (output_filename); @@ -1272,8 +1269,6 @@ write_archive (bfd *iarch) bfd_fatal (old_name); } - output_bfd = obfd; - bfd_set_format (obfd, bfd_archive); /* Request writing the archive symbol table unless we've @@ -1303,7 +1298,6 @@ write_archive (bfd *iarch) if (!bfd_close (obfd)) bfd_fatal (old_name); - output_bfd = NULL; output_filename = NULL; /* We don't care if this fails; we might be creating the archive. */ diff --git a/binutils/arsup.c b/binutils/arsup.c index 8ffb5f3..744a8d4 100644 --- a/binutils/arsup.c +++ b/binutils/arsup.c @@ -469,8 +469,9 @@ ar_end (void) { if (obfd) { - bfd_cache_close (obfd); - unlink (bfd_get_filename (obfd)); + const char *filename = bfd_get_filename (obfd); + bfd_close_all_done (obfd); + unlink (filename); } } |