binutils-gdb/gold/testsuite/plugin_test_tls.sh
Cary Coutant 2cfbf2fece 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.
2015-02-03 20:03:42 -08:00

61 lines
2.4 KiB
Bash
Executable File

#!/bin/sh
# plugin_test_tls.sh -- a test case for the plugin API.
# Copyright (C) 2013-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.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_tls.err "API version:"
check plugin_test_tls.err "gold version:"
check plugin_test_tls.err "option: _Z4f13iv"
check plugin_test_tls.err "two_file_test_tls.o: claim file hook called"
check plugin_test_tls.err "two_file_test_1.o.syms: claim file hook called"
check plugin_test_tls.err "two_file_test_1b.o.syms: claim file hook called"
check plugin_test_tls.err "two_file_test_2_tls.o.syms: claim file hook called"
check plugin_test_tls.err "two_file_test_1.o.syms: _Z4f13iv: PREVAILING_DEF_IRONLY"
check plugin_test_tls.err "two_file_test_1.o.syms: _Z2t2v: PREVAILING_DEF_REG"
check plugin_test_tls.err "two_file_test_1.o.syms: v2: RESOLVED_IR"
check plugin_test_tls.err "two_file_test_1.o.syms: t17data: RESOLVED_IR"
check plugin_test_tls.err "two_file_test_2_tls.o.syms: _Z4f13iv: PREEMPTED_IR"
check plugin_test_tls.err "two_file_test_2_tls.o.syms: tls1: PREVAILING_DEF_REG"
check plugin_test_tls.err "two_file_test_1.o: adding new input file"
check plugin_test_tls.err "two_file_test_1b.o: adding new input file"
check plugin_test_tls.err "two_file_test_2_tls.o: adding new input file"
check plugin_test_tls.err "cleanup hook called"
exit 0