From d103a984a7657828c654330e89ce670490ae5825 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Rafael=20=C3=81vila=20de=20Esp=C3=ADndola?= Date: Wed, 19 May 2010 17:49:19 +0000 Subject: [PATCH] 2010-05-19 Rafael Espindola * script-sections.cc (Output_section_definition::allocate_to_segment): Update the phdrs_list even when the output section is NULL. * testsuite/Makefile.am: Add test. * testsuite/Makefile.in: Regenerate. * testsuite/script_test_9.cc: New. * testsuite/script_test_9.sh: New. * testsuite/script_test_9.t: New. --- gold/ChangeLog | 10 ++++++++++ gold/script-sections.cc | 7 +++++-- gold/testsuite/Makefile.am | 11 +++++++++++ gold/testsuite/Makefile.in | 10 +++++++++- gold/testsuite/script_test_9.cc | 29 ++++++++++++++++++++++++++++ gold/testsuite/script_test_9.sh | 42 +++++++++++++++++++++++++++++++++++++++++ gold/testsuite/script_test_9.t | 18 ++++++++++++++++++ 7 files changed, 124 insertions(+), 3 deletions(-) create mode 100644 gold/testsuite/script_test_9.cc create mode 100755 gold/testsuite/script_test_9.sh create mode 100644 gold/testsuite/script_test_9.t diff --git a/gold/ChangeLog b/gold/ChangeLog index 1ff2a48..ed61c25 100644 --- a/gold/ChangeLog +++ b/gold/ChangeLog @@ -1,3 +1,13 @@ +2010-05-19 Rafael Espindola + + * script-sections.cc (Output_section_definition::allocate_to_segment): + Update the phdrs_list even when the output section is NULL. + * testsuite/Makefile.am: Add test. + * testsuite/Makefile.in: Regenerate. + * testsuite/script_test_9.cc: New. + * testsuite/script_test_9.sh: New. + * testsuite/script_test_9.t: New. + 2010-05-19 Doug Kwan * arm.cc (Arm_input_section::original_size): New method. diff --git a/gold/script-sections.cc b/gold/script-sections.cc index e778279..952444e 100644 --- a/gold/script-sections.cc +++ b/gold/script-sections.cc @@ -2169,13 +2169,16 @@ Output_section* Output_section_definition::allocate_to_segment(String_list** phdrs_list, bool* orphan) { + // Update phdrs_list even if we don't have an output section. It + // might be used by the following sections. + if (this->phdrs_ != NULL) + *phdrs_list = this->phdrs_; + if (this->output_section_ == NULL) return NULL; if ((this->output_section_->flags() & elfcpp::SHF_ALLOC) == 0) return NULL; *orphan = false; - if (this->phdrs_ != NULL) - *phdrs_list = this->phdrs_; return this->output_section_; } diff --git a/gold/testsuite/Makefile.am b/gold/testsuite/Makefile.am index 435eeab..4cd69ac 100644 --- a/gold/testsuite/Makefile.am +++ b/gold/testsuite/Makefile.am @@ -1167,6 +1167,17 @@ script_test_8: basic_test.o gcctestdir/ld $(srcdir)/script_test_7.t script_test_8.stdout: script_test_8 $(TEST_READELF) -SlW script_test_8 > script_test_8.stdout + +check_SCRIPTS += script_test_9.sh +check_DATA += script_test_9.stdout +script_test_9.o: script_test_9.cc + $(CXXCOMPILE) -O0 -c -o $@ $< +script_test_9: gcctestdir/ld $(srcdir)/script_test_9.t script_test_9.o + $(CXXLINK) -Bgcctestdir/ script_test_9.o -T $(srcdir)/script_test_9.t +script_test_9.stdout: script_test_9 + $(TEST_READELF) -lW script_test_9 > script_test_9.stdout + + # Test --dynamic-list, --dynamic-list-data, --dynamic-list-cpp-new, # and --dynamic-list-cpp-typeinfo diff --git a/gold/testsuite/Makefile.in b/gold/testsuite/Makefile.in index 968d010..d5aec90 100644 --- a/gold/testsuite/Makefile.in +++ b/gold/testsuite/Makefile.in @@ -75,7 +75,8 @@ check_PROGRAMS = object_unittest$(EXEEXT) binary_unittest$(EXEEXT) \ @GCC_TRUE@@NATIVE_LINKER_TRUE@ script_test_5.sh \ @GCC_TRUE@@NATIVE_LINKER_TRUE@ script_test_6.sh \ @GCC_TRUE@@NATIVE_LINKER_TRUE@ script_test_7.sh \ -@GCC_TRUE@@NATIVE_LINKER_TRUE@ script_test_8.sh dynamic_list.sh +@GCC_TRUE@@NATIVE_LINKER_TRUE@ script_test_8.sh \ +@GCC_TRUE@@NATIVE_LINKER_TRUE@ script_test_9.sh dynamic_list.sh # Create the data files that debug_msg.sh analyzes. @@ -110,6 +111,7 @@ check_PROGRAMS = object_unittest$(EXEEXT) binary_unittest$(EXEEXT) \ @GCC_TRUE@@NATIVE_LINKER_TRUE@ script_test_6.stdout \ @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@ dynamic_list.stdout @GCC_TRUE@@NATIVE_LINKER_TRUE@am__append_3 = incremental_test \ @GCC_TRUE@@NATIVE_LINKER_TRUE@ gc_comdat_test gc_tls_test \ @@ -2967,6 +2969,12 @@ uninstall-am: @GCC_TRUE@@NATIVE_LINKER_TRUE@ -Wl,-Ttext=0x20001000 -Wl,-Tdata=0x20200000 -Wl,-Tbss=0x20400000 @GCC_TRUE@@NATIVE_LINKER_TRUE@script_test_8.stdout: script_test_8 @GCC_TRUE@@NATIVE_LINKER_TRUE@ $(TEST_READELF) -SlW script_test_8 > script_test_8.stdout +@GCC_TRUE@@NATIVE_LINKER_TRUE@script_test_9.o: script_test_9.cc +@GCC_TRUE@@NATIVE_LINKER_TRUE@ $(CXXCOMPILE) -O0 -c -o $@ $< +@GCC_TRUE@@NATIVE_LINKER_TRUE@script_test_9: gcctestdir/ld $(srcdir)/script_test_9.t script_test_9.o +@GCC_TRUE@@NATIVE_LINKER_TRUE@ $(CXXLINK) -Bgcctestdir/ script_test_9.o -T $(srcdir)/script_test_9.t +@GCC_TRUE@@NATIVE_LINKER_TRUE@script_test_9.stdout: script_test_9 +@GCC_TRUE@@NATIVE_LINKER_TRUE@ $(TEST_READELF) -lW script_test_9 > script_test_9.stdout @GCC_TRUE@@NATIVE_LINKER_TRUE@dynamic_list: basic_test.o gcctestdir/ld $(srcdir)/dynamic_list.t @GCC_TRUE@@NATIVE_LINKER_TRUE@ $(CXXLINK) -Bgcctestdir/ basic_test.o \ @GCC_TRUE@@NATIVE_LINKER_TRUE@ -Wl,--dynamic-list $(srcdir)/dynamic_list.t \ diff --git a/gold/testsuite/script_test_9.cc b/gold/testsuite/script_test_9.cc new file mode 100644 index 0000000..84f12f6 --- /dev/null +++ b/gold/testsuite/script_test_9.cc @@ -0,0 +1,29 @@ +// script_test_9.cc -- a test case for gold + +// Copyright 2010 Free Software Foundation, Inc. +// Written by Rafael Avila de Espindola . + +// 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 program checks that the default renaming of ".text.xxx" +// sections does not take place in the presence of a linker script +// with a SECTIONS clause. + +int main() { + return 0; +} diff --git a/gold/testsuite/script_test_9.sh b/gold/testsuite/script_test_9.sh new file mode 100755 index 0000000..9f9aba6 --- /dev/null +++ b/gold/testsuite/script_test_9.sh @@ -0,0 +1,42 @@ +#!/bin/sh + +# script_test_9.sh -- Check that the script_test_9.t script has placed +# .init and .text in the same segment. + +# Copyright 2010 Free Software Foundation, Inc. +# Written by Rafael Avila de Espindola . + +# 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 section in $1:" + echo " $2" + echo "" + echo "Actual output below:" + cat "$1" + exit 1 + fi +} + +check script_test_9.stdout "LOAD .*R E " +check script_test_9.stdout "LOAD .*RW " +check script_test_9.stdout "00 .*\.text .init" +check script_test_9.stdout "01 .*\.data " diff --git a/gold/testsuite/script_test_9.t b/gold/testsuite/script_test_9.t new file mode 100644 index 0000000..58cc350 --- /dev/null +++ b/gold/testsuite/script_test_9.t @@ -0,0 +1,18 @@ +PHDRS +{ + text PT_LOAD FLAGS(5); + data PT_LOAD FLAGS(6); +} + +SECTIONS +{ + .init : + { + } :text + .text : + { + } + .data : + { + } :data +} -- 2.7.4