From 686c8caf41c336e1cf0619e1b92f1ee10f7a2c21 Mon Sep 17 00:00:00 2001 From: Ian Lance Taylor Date: Sat, 29 Mar 2008 08:39:26 +0000 Subject: [PATCH] * symtab.cc (Symbol_table::do_define_as_constant): Don't force a version symbol to be local. * testsuite/ver_test_4.sh: New file. * testsuite/Makefile.am (check_SCRIPTS): Add ver_test_4.sh. (check_DATA): Add ver_test_4.syms. (ver_test_4.syms): New target. * testsuite/Makefile.in: Rebuild. --- gold/ChangeLog | 8 +++++++ gold/symtab.cc | 9 ++++++-- gold/testsuite/Makefile.am | 5 ++++ gold/testsuite/Makefile.in | 4 ++++ gold/testsuite/ver_test_4.sh | 44 ++++++++++++++++++++++++++++++++++++ 5 files changed, 68 insertions(+), 2 deletions(-) create mode 100755 gold/testsuite/ver_test_4.sh diff --git a/gold/ChangeLog b/gold/ChangeLog index 9a213c21fbb..0f55b5ce043 100644 --- a/gold/ChangeLog +++ b/gold/ChangeLog @@ -1,5 +1,13 @@ 2008-03-29 Ian Lance Taylor + * symtab.cc (Symbol_table::do_define_as_constant): Don't force a + version symbol to be local. + * testsuite/ver_test_4.sh: New file. + * testsuite/Makefile.am (check_SCRIPTS): Add ver_test_4.sh. + (check_DATA): Add ver_test_4.syms. + (ver_test_4.syms): New target. + * testsuite/Makefile.in: Rebuild. + * output.cc (Output_section::Input_section_sort_entry::has_priority): New function. diff --git a/gold/symtab.cc b/gold/symtab.cc index 08e5f9265fd..a216b3bcbdb 100644 --- a/gold/symtab.cc +++ b/gold/symtab.cc @@ -1406,8 +1406,13 @@ Symbol_table::do_define_as_constant( if (oldsym == NULL) { - if (binding == elfcpp::STB_LOCAL - || this->version_script_.symbol_is_local(name)) + // Version symbols are absolute symbols with name == version. + // We don't want to force them to be local. + if ((version == NULL + || name != version + || value != 0) + && (binding == elfcpp::STB_LOCAL + || this->version_script_.symbol_is_local(name))) this->force_local(sym); return sym; } diff --git a/gold/testsuite/Makefile.am b/gold/testsuite/Makefile.am index 93aa0f01b7c..70b3e15dda7 100644 --- a/gold/testsuite/Makefile.am +++ b/gold/testsuite/Makefile.am @@ -561,6 +561,11 @@ check_DATA += ver_test_2.syms ver_test_2.syms: ver_test_2 readelf -s $< >$@ 2>/dev/null +check_SCRIPTS += ver_test_4.sh +check_DATA += ver_test_4.syms +ver_test_4.syms: ver_test_4.so + readelf -s $< >$@ 2>/dev/null + endif if READELF diff --git a/gold/testsuite/Makefile.in b/gold/testsuite/Makefile.in index 9b88707d4b9..c0eefbb48b7 100644 --- a/gold/testsuite/Makefile.in +++ b/gold/testsuite/Makefile.in @@ -201,10 +201,12 @@ check_PROGRAMS = object_unittest$(EXEEXT) binary_unittest$(EXEEXT) \ @GCC_TRUE@@NATIVE_LINKER_TRUE@ justsyms binary_test @GCC_TRUE@@NATIVE_LINKER_TRUE@@READELF_TRUE@am__append_12 = \ @GCC_TRUE@@NATIVE_LINKER_TRUE@@READELF_TRUE@ ver_test_2.sh \ +@GCC_TRUE@@NATIVE_LINKER_TRUE@@READELF_TRUE@ ver_test_4.sh \ @GCC_TRUE@@NATIVE_LINKER_TRUE@@READELF_TRUE@ ver_test_5.sh \ @GCC_TRUE@@NATIVE_LINKER_TRUE@@READELF_TRUE@ ver_test_7.sh @GCC_TRUE@@NATIVE_LINKER_TRUE@@READELF_TRUE@am__append_13 = \ @GCC_TRUE@@NATIVE_LINKER_TRUE@@READELF_TRUE@ ver_test_2.syms \ +@GCC_TRUE@@NATIVE_LINKER_TRUE@@READELF_TRUE@ ver_test_4.syms \ @GCC_TRUE@@NATIVE_LINKER_TRUE@@READELF_TRUE@ ver_test_5.syms \ @GCC_TRUE@@NATIVE_LINKER_TRUE@@READELF_TRUE@ ver_test_7.syms @GCC_FALSE@script_test_1_DEPENDENCIES = libgoldtest.a ../libgold.a \ @@ -1838,6 +1840,8 @@ uninstall-am: uninstall-info-am @GCC_TRUE@@NATIVE_LINKER_TRUE@ $(CXXCOMPILE) -c -fpic -o $@ $< @GCC_TRUE@@NATIVE_LINKER_TRUE@@READELF_TRUE@ver_test_2.syms: ver_test_2 @GCC_TRUE@@NATIVE_LINKER_TRUE@@READELF_TRUE@ readelf -s $< >$@ 2>/dev/null +@GCC_TRUE@@NATIVE_LINKER_TRUE@@READELF_TRUE@ver_test_4.syms: ver_test_4.so +@GCC_TRUE@@NATIVE_LINKER_TRUE@@READELF_TRUE@ readelf -s $< >$@ 2>/dev/null @GCC_TRUE@@NATIVE_LINKER_TRUE@@READELF_TRUE@ver_test_5.so: ver_test_5.o $(srcdir)/ver_test_5.script ver_test_4.so gcctestdir/ld @GCC_TRUE@@NATIVE_LINKER_TRUE@@READELF_TRUE@ $(CXXLINK) -Bgcctestdir/ -shared -Wl,--version-script,$(srcdir)/ver_test_5.script ver_test_5.o ver_test_4.so diff --git a/gold/testsuite/ver_test_4.sh b/gold/testsuite/ver_test_4.sh new file mode 100755 index 00000000000..3466a5d4469 --- /dev/null +++ b/gold/testsuite/ver_test_4.sh @@ -0,0 +1,44 @@ +#!/bin/sh + +# ver_test_4.sh -- test that version symbol is visible. + +# Copyright 2008 Free Software Foundation, Inc. +# Written by Ian Lance Taylor . + +# 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. + +check() +{ + if ! grep -q "$2" "$1" + then + echo "Did not find expected symbol in $1:" + echo " $2" + echo "" + echo "Actual output below:" + cat "$1" + exit 1 + fi +} + +check ver_test_4.syms "t1_2@@VER2" +check ver_test_4.syms "t2_2@VER1" +check ver_test_4.syms "t2_2@@VER2" +check ver_test_4.syms "GLOBAL.*ABS.*VER1" +check ver_test_4.syms "GLOBAL.*ABS.*VER2" + +exit 0 -- 2.30.2