aboutsummaryrefslogtreecommitdiff
path: root/gold
diff options
context:
space:
mode:
authorRafael Ávila de Espíndola <respindola@mozilla.com>2010-05-19 17:49:19 +0000
committerRafael Ávila de Espíndola <respindola@mozilla.com>2010-05-19 17:49:19 +0000
commitd103a984a7657828c654330e89ce670490ae5825 (patch)
treed79be20f535293f8fef502700f30aacdf96a0e81 /gold
parent28d3cf859d41459121c74042aa5dbad3450cafcb (diff)
downloadgdb-d103a984a7657828c654330e89ce670490ae5825.zip
gdb-d103a984a7657828c654330e89ce670490ae5825.tar.gz
gdb-d103a984a7657828c654330e89ce670490ae5825.tar.bz2
2010-05-19 Rafael Espindola <espindola@google.com>
* 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.
Diffstat (limited to 'gold')
-rw-r--r--gold/ChangeLog10
-rw-r--r--gold/script-sections.cc7
-rw-r--r--gold/testsuite/Makefile.am11
-rw-r--r--gold/testsuite/Makefile.in10
-rw-r--r--gold/testsuite/script_test_9.cc29
-rwxr-xr-xgold/testsuite/script_test_9.sh42
-rw-r--r--gold/testsuite/script_test_9.t18
7 files changed, 124 insertions, 3 deletions
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 <espindola@google.com>
+
+ * 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 <dougkwan@google.com>
* 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 <espindola@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 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 <espindola@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.
+
+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
+}