]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
bfd: fix potential missing seek
authorRoman Kapl <code@rkapl.cz>
Sat, 29 Nov 2025 11:45:27 +0000 (12:45 +0100)
committerAlan Modra <amodra@gmail.com>
Sun, 30 Nov 2025 03:14:50 +0000 (13:44 +1030)
If a file was closed by cache and then bfd_open_file was called followed
by e.g. bfd_seek to the original position, the seek would be optimized out
while the real file position was still zero (as fopened).  I added
`bfd_io_force` to force the seek at next IO occasion.

This could lead e.g. to appearence of a corrupted object in ld:
  symbol number 0 uses unsupported binding of 6
  or invalid string offset #X >= #Y for section

Signed-off-by: Roman Kapl <code@rkapl.cz>
bfd/cache.c

index 3bf9c9449a407bc4ebb8d2aa5bfc8e9c825f190b..3342e2d5008ca69e1cda6283dc1c494a311aaac3 100644 (file)
@@ -177,6 +177,7 @@ bfd_cache_delete (bfd *abfd)
   BFD_ASSERT (open_files > 0);
   --open_files;
   abfd->flags |= BFD_CLOSED_BY_CACHE;
+  abfd->last_io = bfd_io_force;
 
   return ret;
 }