This is the mail archive of the binutils-cvs@sourceware.org mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[binutils-gdb] When using linker scripts, place linker-generated sections by the output section name.


https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=bfbf34de2f27672282d4fa4c0916cc41890dcc6c

commit bfbf34de2f27672282d4fa4c0916cc41890dcc6c
Author: Cary Coutant <ccoutant@gmail.com>
Date:   Mon Dec 12 18:51:29 2016 -0800

    When using linker scripts, place linker-generated sections by the output section name.
    
    2016-12-12  Igor Kudrin  <ikudrin@accesssoftek.com>
    	    Cary Coutant  <ccoutant@gmail.com>
    
    gold/
    	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.

Diff:
---
 gold/ChangeLog                   | 12 ++++++++++++
 gold/script-sections.cc          | 11 +++++++++++
 gold/testsuite/Makefile.am       | 11 +++++++++++
 gold/testsuite/Makefile.in       | 22 ++++++++++++++++-----
 gold/testsuite/script_test_13.c  |  2 ++
 gold/testsuite/script_test_13.sh | 41 ++++++++++++++++++++++++++++++++++++++++
 gold/testsuite/script_test_13.t  |  7 +++++++
 7 files changed, 101 insertions(+), 5 deletions(-)

diff --git a/gold/ChangeLog b/gold/ChangeLog
index aeec389..e0ce513 100644
--- a/gold/ChangeLog
+++ b/gold/ChangeLog
@@ -1,3 +1,15 @@
+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):
diff --git a/gold/script-sections.cc b/gold/script-sections.cc
index d970e57..90ec8d4 100644
--- a/gold/script-sections.cc
+++ b/gold/script-sections.cc
@@ -2291,6 +2291,17 @@ Output_section_definition::output_section_name(
     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();
diff --git a/gold/testsuite/Makefile.am b/gold/testsuite/Makefile.am
index 25db2b8..4d0aaa1 100644
--- a/gold/testsuite/Makefile.am
+++ b/gold/testsuite/Makefile.am
@@ -2008,6 +2008,17 @@ script_test_12a.o: script_test_12a.c
 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
diff --git a/gold/testsuite/Makefile.in b/gold/testsuite/Makefile.in
index 1a535ed..a70322c 100644
--- a/gold/testsuite/Makefile.in
+++ b/gold/testsuite/Makefile.in
@@ -365,11 +365,11 @@ check_PROGRAMS = $(am__EXEEXT_1) $(am__EXEEXT_2) $(am__EXEEXT_3) \
 @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
@@ -391,6 +391,8 @@ check_PROGRAMS = $(am__EXEEXT_1) $(am__EXEEXT_2) $(am__EXEEXT_3) \
 
 # 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.
@@ -417,6 +419,7 @@ check_PROGRAMS = $(am__EXEEXT_1) $(am__EXEEXT_2) $(am__EXEEXT_3) \
 @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 \
@@ -469,6 +472,7 @@ check_PROGRAMS = $(am__EXEEXT_1) $(am__EXEEXT_2) $(am__EXEEXT_3) \
 @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 \
@@ -5115,6 +5119,8 @@ script_test_8.sh.log: script_test_8.sh
 	@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
@@ -6664,6 +6670,12 @@ uninstall-am:
 @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
diff --git a/gold/testsuite/script_test_13.c b/gold/testsuite/script_test_13.c
new file mode 100644
index 0000000..83e0948
--- /dev/null
+++ b/gold/testsuite/script_test_13.c
@@ -0,0 +1,2 @@
+extern int a;
+int* pa = &a;
diff --git a/gold/testsuite/script_test_13.sh b/gold/testsuite/script_test_13.sh
new file mode 100755
index 0000000..fff2772
--- /dev/null
+++ b/gold/testsuite/script_test_13.sh
@@ -0,0 +1,41 @@
+#!/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"
diff --git a/gold/testsuite/script_test_13.t b/gold/testsuite/script_test_13.t
new file mode 100644
index 0000000..d51e1db
--- /dev/null
+++ b/gold/testsuite/script_test_13.t
@@ -0,0 +1,7 @@
+SECTIONS
+{
+	.text 0 : { *(.text) }
+
+	.rela.dyn 0x10000 : { *(.rela.init) }
+	.rel.dyn 0x10000 : { *(.rela.init) }
+}


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]