+2016-12-12 Igor Kudrin <ikudrin@accesssoftek.com>
+ Cary Coutant <ccoutant@gmail.com>
+
+ PR gold/14676
+ * script-sections.cc (Output_section_definition::output_section_name):
+ For linker-generated sections, compare with output section name.
+ * testsuite/Makefile.am (script_test_13): New test.
+ * testsuite/Makefile.in: Regenerate.
+ * testsuite/script_test_13.c: New source file.
+ * testsuite/script_test_13.sh: New script.
+ * testsuite/script_test_13.t: New linker script.
+
2016-12-12 Cary Coutant <ccoutant@gmail.com>
* script-sections.cc (Orphan_section_placement::update_last_alloc):
Script_sections::Section_type* psection_type,
bool* keep)
{
+ // If the input section is linker-created, just look for a match
+ // on the output section name.
+ if (file_name == NULL && this->name_ != "/DISCARD/")
+ {
+ if (this->name_ != section_name)
+ return NULL;
+ *slot = &this->output_section_;
+ *psection_type = this->section_type();
+ return this->name_.c_str();
+ }
+
// Ask each element whether it matches NAME.
for (Output_section_elements::const_iterator p = this->elements_.begin();
p != this->elements_.end();
script_test_12b.o: script_test_12b.c
$(COMPILE) -O0 -c -o $@ $<
+# Test for ordering internally created sections with a linker script.
+check_SCRIPTS += script_test_13.sh
+check_DATA += script_test_13.stdout
+MOSTLYCLEANFILES += script_test_13
+script_test_13.o: script_test_13.c
+ $(COMPILE) -O0 -c -fPIC -o $@ $<
+script_test_13: $(srcdir)/script_test_13.t script_test_13.o gcctestdir/ld
+ gcctestdir/ld -shared -o $@ script_test_13.o -T $(srcdir)/script_test_13.t
+script_test_13.stdout: script_test_13
+ $(TEST_READELF) -SW script_test_13 > $@
+
# Test for SORT_BY_INIT_PRIORITY.
check_SCRIPTS += script_test_14.sh
check_DATA += script_test_14.stdout
@GCC_TRUE@@NATIVE_LINKER_TRUE@ script_test_4 script_test_5 \
@GCC_TRUE@@NATIVE_LINKER_TRUE@ script_test_6 script_test_7 \
@GCC_TRUE@@NATIVE_LINKER_TRUE@ script_test_8 script_test_9 \
-@GCC_TRUE@@NATIVE_LINKER_TRUE@ script_test_14 script_test_15a \
-@GCC_TRUE@@NATIVE_LINKER_TRUE@ script_test_15b script_test_15c \
-@GCC_TRUE@@NATIVE_LINKER_TRUE@ dynamic_list dynamic_list.stdout \
-@GCC_TRUE@@NATIVE_LINKER_TRUE@ libthin1.a libthin3.a \
-@GCC_TRUE@@NATIVE_LINKER_TRUE@ libthinall.a \
+@GCC_TRUE@@NATIVE_LINKER_TRUE@ script_test_13 script_test_14 \
+@GCC_TRUE@@NATIVE_LINKER_TRUE@ script_test_15a script_test_15b \
+@GCC_TRUE@@NATIVE_LINKER_TRUE@ script_test_15c dynamic_list \
+@GCC_TRUE@@NATIVE_LINKER_TRUE@ dynamic_list.stdout libthin1.a \
+@GCC_TRUE@@NATIVE_LINKER_TRUE@ libthin3.a libthinall.a \
@GCC_TRUE@@NATIVE_LINKER_TRUE@ alt/thin_archive_test_2.o \
@GCC_TRUE@@NATIVE_LINKER_TRUE@ alt/thin_archive_test_4.o \
@GCC_TRUE@@NATIVE_LINKER_TRUE@ alt/libthin2.a alt/libthin4.a
# Similar to --detect-odr-violations: check for undefined symbols in .so's
+# Test for ordering internally created sections with a linker script.
+
# Test for SORT_BY_INIT_PRIORITY.
# Test BSS section placement at end of segment.
@GCC_TRUE@@NATIVE_LINKER_TRUE@ script_test_7.sh \
@GCC_TRUE@@NATIVE_LINKER_TRUE@ script_test_8.sh \
@GCC_TRUE@@NATIVE_LINKER_TRUE@ script_test_9.sh \
+@GCC_TRUE@@NATIVE_LINKER_TRUE@ script_test_13.sh \
@GCC_TRUE@@NATIVE_LINKER_TRUE@ script_test_14.sh \
@GCC_TRUE@@NATIVE_LINKER_TRUE@ script_test_15a.sh \
@GCC_TRUE@@NATIVE_LINKER_TRUE@ script_test_15b.sh \
@GCC_TRUE@@NATIVE_LINKER_TRUE@ script_test_7.stdout \
@GCC_TRUE@@NATIVE_LINKER_TRUE@ script_test_8.stdout \
@GCC_TRUE@@NATIVE_LINKER_TRUE@ script_test_9.stdout \
+@GCC_TRUE@@NATIVE_LINKER_TRUE@ script_test_13.stdout \
@GCC_TRUE@@NATIVE_LINKER_TRUE@ script_test_14.stdout \
@GCC_TRUE@@NATIVE_LINKER_TRUE@ script_test_15a.stdout \
@GCC_TRUE@@NATIVE_LINKER_TRUE@ script_test_15b.stdout \
@p='script_test_8.sh'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post)
script_test_9.sh.log: script_test_9.sh
@p='script_test_9.sh'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post)
+script_test_13.sh.log: script_test_13.sh
+ @p='script_test_13.sh'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post)
script_test_14.sh.log: script_test_14.sh
@p='script_test_14.sh'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post)
script_test_15a.sh.log: script_test_15a.sh
@GCC_TRUE@@NATIVE_LINKER_TRUE@ $(COMPILE) -O0 -c -o $@ $<
@GCC_TRUE@@NATIVE_LINKER_TRUE@script_test_12b.o: script_test_12b.c
@GCC_TRUE@@NATIVE_LINKER_TRUE@ $(COMPILE) -O0 -c -o $@ $<
+@GCC_TRUE@@NATIVE_LINKER_TRUE@script_test_13.o: script_test_13.c
+@GCC_TRUE@@NATIVE_LINKER_TRUE@ $(COMPILE) -O0 -c -fPIC -o $@ $<
+@GCC_TRUE@@NATIVE_LINKER_TRUE@script_test_13: $(srcdir)/script_test_13.t script_test_13.o gcctestdir/ld
+@GCC_TRUE@@NATIVE_LINKER_TRUE@ gcctestdir/ld -shared -o $@ script_test_13.o -T $(srcdir)/script_test_13.t
+@GCC_TRUE@@NATIVE_LINKER_TRUE@script_test_13.stdout: script_test_13
+@GCC_TRUE@@NATIVE_LINKER_TRUE@ $(TEST_READELF) -SW script_test_13 > $@
@GCC_TRUE@@NATIVE_LINKER_TRUE@script_test_14.o: script_test_14.s
@GCC_TRUE@@NATIVE_LINKER_TRUE@ $(TEST_AS) -o $@ $<
@GCC_TRUE@@NATIVE_LINKER_TRUE@script_test_14: $(srcdir)/script_test_14.t script_test_14.o gcctestdir/ld
--- /dev/null
+extern int a;
+int* pa = &a;
--- /dev/null
+#!/bin/sh
+
+# script_test_13.sh -- test that internally created sections obey
+# the order from the linker script.
+
+# Copyright (C) 2016 Free Software Foundation, Inc.
+# Written by Igor Kudrin <ikudrin@accesssoftek.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.
+
+check()
+{
+ file=$1
+ pattern=$2
+ match_pattern=`grep -e "$pattern" $file`
+ if test -z "$match_pattern"; then
+ echo "Expected pattern was not found:"
+ echo " $pattern"
+ echo ""
+ echo "Actual output below:"
+ cat "$file"
+ exit 1
+ fi
+}
+
+check "script_test_13.stdout" "\\.rela\\.dyn[[:space:]]\\+RELA[[:space:]]\\+0\\+10000\\b"
--- /dev/null
+SECTIONS
+{
+ .text 0 : { *(.text) }
+
+ .rela.dyn 0x10000 : { *(.rela.init) }
+ .rel.dyn 0x10000 : { *(.rela.init) }
+}