Fix a file descriptor leak in gold.
authorCary Coutant <ccoutant@google.com>
Wed, 4 Feb 2015 03:54:57 +0000 (19:54 -0800)
committerCary Coutant <ccoutant@google.com>
Wed, 4 Feb 2015 04:03:42 +0000 (20:03 -0800)
commit2cfbf2fece582c29df348104b28677c38a8301f4
treeab77dd5b5a56e32e52a6e9824298d9afdd7ea093
parent8265ef950202a4bf0d3444802ad5d7087b4b185d
Fix a file descriptor leak in gold.

When an LTO linker plugin claims an external member of a thin archive, gold
does not properly unlock the file and make its file descriptor available for
reuse. This patch fixes the problem by modifying Archive::include_member to
unlock the object file via an RAII class instance, ensuring that it will be
unlocked no matter what path is taken through the function.

gold/
PR gold/15660
* archive.cc (Thin_archive_object_unlocker): New class.
(Archive::include_member): Unlock external members of thin archives.
* testsuite/Makefile.am (plugin_test_1): Rename .syms files.
(plugin_test_2): Likewise.
(plugin_test_3): Likewise.
(plugin_test_4): Likewise.
(plugin_test_5): Likewise.
(plugin_test_6): Likewise.
(plugin_test_7): Likewise.
(plugin_test_8): Likewise.
(plugin_test_9): Likewise.
(plugin_test_10): Likewise.
(plugin_test_11): New test case.
* testsuite/Makefile.in: Regenerate.
* testsuite/plugin_test.c (claim_file_hook): Check for parallel .syms
file to decide whether to claim file.
(all_symbols_read_hook): Likewise.
* testsuite/plugin_test_1.sh: Adjust expected output.
* testsuite/plugin_test_2.sh: Likewise.
* testsuite/plugin_test_3.sh: Likewise.
* testsuite/plugin_test_6.sh: Likewise.
* testsuite/plugin_test_tls.sh: Likewise.
* testsuite/plugin_test_11.sh: New testcase.
gold/archive.cc
gold/testsuite/Makefile.am
gold/testsuite/Makefile.in
gold/testsuite/plugin_test.c
gold/testsuite/plugin_test_1.sh
gold/testsuite/plugin_test_11.sh [new file with mode: 0755]
gold/testsuite/plugin_test_2.sh
gold/testsuite/plugin_test_3.sh
gold/testsuite/plugin_test_6.sh
gold/testsuite/plugin_test_tls.sh