mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-12-24 09:43:36 +08:00
2cfbf2fece
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.
60 lines
2.2 KiB
Bash
Executable File
60 lines
2.2 KiB
Bash
Executable File
#!/bin/sh
|
|
|
|
# plugin_test_1.sh -- a test case for the plugin API.
|
|
|
|
# Copyright (C) 2008-2015 Free Software Foundation, Inc.
|
|
# Written by Cary Coutant <ccoutant@google.com>.
|
|
|
|
# This file is part of gold.
|
|
|
|
# This program is free software; you can redistribute it and/or modify
|
|
# it under the terms of the GNU General Public License as published by
|
|
# the Free Software Foundation; either version 3 of the License, or
|
|
# (at your option) any later version.
|
|
|
|
# This program is distributed in the hope that it will be useful,
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
# GNU General Public License for more details.
|
|
|
|
# You should have received a copy of the GNU General Public License
|
|
# along with this program; if not, write to the Free Software
|
|
# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
|
|
# MA 02110-1301, USA.
|
|
|
|
# This file goes with plugin_test_1.c, a simple plug-in library that
|
|
# exercises the basic interfaces and prints out version numbers and
|
|
# options passed to the plugin.
|
|
|
|
check()
|
|
{
|
|
if ! grep -q "$2" "$1"
|
|
then
|
|
echo "Did not find expected output in $1:"
|
|
echo " $2"
|
|
echo ""
|
|
echo "Actual output below:"
|
|
cat "$1"
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
check plugin_test_1.err "API version:"
|
|
check plugin_test_1.err "gold version:"
|
|
check plugin_test_1.err "option: _Z4f13iv"
|
|
check plugin_test_1.err "two_file_test_main.o: claim file hook called"
|
|
check plugin_test_1.err "two_file_test_1.o.syms: claim file hook called"
|
|
check plugin_test_1.err "two_file_test_1b.o.syms: claim file hook called"
|
|
check plugin_test_1.err "two_file_test_2.o.syms: claim file hook called"
|
|
check plugin_test_1.err "two_file_test_1.o.syms: _Z4f13iv: PREVAILING_DEF_IRONLY"
|
|
check plugin_test_1.err "two_file_test_1.o.syms: _Z2t2v: PREVAILING_DEF_REG"
|
|
check plugin_test_1.err "two_file_test_1.o.syms: v2: RESOLVED_IR"
|
|
check plugin_test_1.err "two_file_test_1.o.syms: t17data: RESOLVED_IR"
|
|
check plugin_test_1.err "two_file_test_2.o.syms: _Z4f13iv: PREEMPTED_IR"
|
|
check plugin_test_1.err "two_file_test_1.o: adding new input file"
|
|
check plugin_test_1.err "two_file_test_1b.o: adding new input file"
|
|
check plugin_test_1.err "two_file_test_2.o: adding new input file"
|
|
check plugin_test_1.err "cleanup hook called"
|
|
|
|
exit 0
|