PR23254, ld.bfd mishandles file pointers while scanning archive
authorAlan Modra <amodra@gmail.com>
Tue, 5 Jun 2018 11:34:00 +0000 (21:04 +0930)
committerAlan Modra <amodra@gmail.com>
Tue, 5 Jun 2018 13:09:11 +0000 (22:39 +0930)
commit27b0767593284f97384b3597ebd211164f8c8b47
tree1f82c304a2abc2acca2d865190b382e0963cd84a
parent8347745522002d5c0093bac584a2eaf9386ad219
PR23254, ld.bfd mishandles file pointers while scanning archive

Best practice is to not mix lseek/read with fseek/fread on the same
underlying file descriptor, as not all stdio implementations will cope.
Since the plugin uses lseek/read while bfd uses fseek/fread this patch
reopens the file for exclusive use by the plugin rather than trying to
restore the file descriptor.  That allows the plugin to read the file
after plugin_call_claim_file too.

bfd/
PR 23254
* plugin.c (bfd_plugin_open_input): Allow for possibility of
nested archives.  Open file again for plugin.
(try_claim): Don't save and restore file position.  Close file
if not claimed.
* sysdep.h (O_BINARY): Define.
ld/
PR 23254
* plugin.c (plugin_call_claim_file): Revert 2016-07-19 patch.
(plugin_object_p): Don't dup file descriptor.
bfd/ChangeLog
bfd/plugin.c
bfd/sysdep.h
ld/ChangeLog
ld/plugin.c