aboutsummaryrefslogtreecommitdiff
path: root/gold/testsuite
diff options
context:
space:
mode:
Diffstat (limited to 'gold/testsuite')
-rw-r--r--gold/testsuite/Makefile.am27
-rw-r--r--gold/testsuite/Makefile.in38
-rw-r--r--gold/testsuite/script_test_15.c10
-rwxr-xr-xgold/testsuite/script_test_15a.sh41
-rw-r--r--gold/testsuite/script_test_15a.t40
-rwxr-xr-xgold/testsuite/script_test_15b.sh42
-rw-r--r--gold/testsuite/script_test_15b.t49
-rwxr-xr-xgold/testsuite/script_test_15c.sh42
-rw-r--r--gold/testsuite/script_test_15c.t41
-rw-r--r--gold/testsuite/script_test_2.cc18
10 files changed, 335 insertions, 13 deletions
diff --git a/gold/testsuite/Makefile.am b/gold/testsuite/Makefile.am
index 17f45d6..6a0b19d 100644
--- a/gold/testsuite/Makefile.am
+++ b/gold/testsuite/Makefile.am
@@ -2009,6 +2009,33 @@ script_test_14: $(srcdir)/script_test_14.t script_test_14.o gcctestdir/ld
script_test_14.stdout: script_test_14
$(TEST_OBJDUMP) -s script_test_14 > $@
+# Test BSS section placement at end of segment.
+check_SCRIPTS += script_test_15a.sh
+check_DATA += script_test_15a.stdout
+MOSTLYCLEANFILES += script_test_15a
+script_test_15a: $(srcdir)/script_test_15a.t script_test_15.o gcctestdir/ld
+ gcctestdir/ld -o $@ script_test_15.o -T $(srcdir)/script_test_15a.t
+script_test_15a.stdout: script_test_15a
+ $(TEST_READELF) -lSW script_test_15a > $@
+
+# Test BSS section placement in middle of segment.
+check_SCRIPTS += script_test_15b.sh
+check_DATA += script_test_15b.stdout
+MOSTLYCLEANFILES += script_test_15b
+script_test_15b: $(srcdir)/script_test_15b.t script_test_15.o gcctestdir/ld
+ gcctestdir/ld -o $@ script_test_15.o -T $(srcdir)/script_test_15b.t
+script_test_15b.stdout: script_test_15b
+ $(TEST_READELF) -lSW script_test_15b > $@
+
+# Test orphan BSS section placement.
+check_SCRIPTS += script_test_15c.sh
+check_DATA += script_test_15c.stdout
+MOSTLYCLEANFILES += script_test_15c
+script_test_15c: $(srcdir)/script_test_15c.t script_test_15.o gcctestdir/ld
+ gcctestdir/ld -o $@ script_test_15.o -T $(srcdir)/script_test_15c.t
+script_test_15c.stdout: script_test_15c
+ $(TEST_READELF) -lSW script_test_15c > $@
+
# 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 5fef3cf..a1d8b39 100644
--- a/gold/testsuite/Makefile.in
+++ b/gold/testsuite/Makefile.in
@@ -365,9 +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 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@ 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@ 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 +393,12 @@ check_PROGRAMS = $(am__EXEEXT_1) $(am__EXEEXT_2) $(am__EXEEXT_3) \
# Test for SORT_BY_INIT_PRIORITY.
+# Test BSS section placement at end of segment.
+
+# Test BSS section placement in middle of segment.
+
+# Test orphan BSS section placement.
+
# Test --dynamic-list, --dynamic-list-data, --dynamic-list-cpp-new,
# and --dynamic-list-cpp-typeinfo
@GCC_TRUE@@NATIVE_LINKER_TRUE@am__append_42 = \
@@ -410,6 +418,9 @@ check_PROGRAMS = $(am__EXEEXT_1) $(am__EXEEXT_2) $(am__EXEEXT_3) \
@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_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_15c.sh \
@GCC_TRUE@@NATIVE_LINKER_TRUE@ dynamic_list.sh
# Create the data files that debug_msg.sh analyzes.
@@ -459,6 +470,9 @@ check_PROGRAMS = $(am__EXEEXT_1) $(am__EXEEXT_2) $(am__EXEEXT_3) \
@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_14.stdout \
+@GCC_TRUE@@NATIVE_LINKER_TRUE@ script_test_15a.stdout \
+@GCC_TRUE@@NATIVE_LINKER_TRUE@ script_test_15b.stdout \
+@GCC_TRUE@@NATIVE_LINKER_TRUE@ script_test_15c.stdout \
@GCC_TRUE@@NATIVE_LINKER_TRUE@ dynamic_list.stdout
@GCC_FALSE@initpri1_DEPENDENCIES =
@NATIVE_LINKER_FALSE@initpri1_DEPENDENCIES =
@@ -5101,6 +5115,12 @@ 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_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
+ @p='script_test_15a.sh'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post)
+script_test_15b.sh.log: script_test_15b.sh
+ @p='script_test_15b.sh'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post)
+script_test_15c.sh.log: script_test_15c.sh
+ @p='script_test_15c.sh'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post)
dynamic_list.sh.log: dynamic_list.sh
@p='dynamic_list.sh'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post)
plugin_test_1.sh.log: plugin_test_1.sh
@@ -6642,6 +6662,18 @@ uninstall-am:
@GCC_TRUE@@NATIVE_LINKER_TRUE@ gcctestdir/ld -o $@ script_test_14.o -T $(srcdir)/script_test_14.t
@GCC_TRUE@@NATIVE_LINKER_TRUE@script_test_14.stdout: script_test_14
@GCC_TRUE@@NATIVE_LINKER_TRUE@ $(TEST_OBJDUMP) -s script_test_14 > $@
+@GCC_TRUE@@NATIVE_LINKER_TRUE@script_test_15a: $(srcdir)/script_test_15a.t script_test_15.o gcctestdir/ld
+@GCC_TRUE@@NATIVE_LINKER_TRUE@ gcctestdir/ld -o $@ script_test_15.o -T $(srcdir)/script_test_15a.t
+@GCC_TRUE@@NATIVE_LINKER_TRUE@script_test_15a.stdout: script_test_15a
+@GCC_TRUE@@NATIVE_LINKER_TRUE@ $(TEST_READELF) -lSW script_test_15a > $@
+@GCC_TRUE@@NATIVE_LINKER_TRUE@script_test_15b: $(srcdir)/script_test_15b.t script_test_15.o gcctestdir/ld
+@GCC_TRUE@@NATIVE_LINKER_TRUE@ gcctestdir/ld -o $@ script_test_15.o -T $(srcdir)/script_test_15b.t
+@GCC_TRUE@@NATIVE_LINKER_TRUE@script_test_15b.stdout: script_test_15b
+@GCC_TRUE@@NATIVE_LINKER_TRUE@ $(TEST_READELF) -lSW script_test_15b > $@
+@GCC_TRUE@@NATIVE_LINKER_TRUE@script_test_15c: $(srcdir)/script_test_15c.t script_test_15.o gcctestdir/ld
+@GCC_TRUE@@NATIVE_LINKER_TRUE@ gcctestdir/ld -o $@ script_test_15.o -T $(srcdir)/script_test_15c.t
+@GCC_TRUE@@NATIVE_LINKER_TRUE@script_test_15c.stdout: script_test_15c
+@GCC_TRUE@@NATIVE_LINKER_TRUE@ $(TEST_READELF) -lSW script_test_15c > $@
@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_15.c b/gold/testsuite/script_test_15.c
new file mode 100644
index 0000000..48cfde8
--- /dev/null
+++ b/gold/testsuite/script_test_15.c
@@ -0,0 +1,10 @@
+int data[] = { 1, 2, 3, 4, 5, 6, 7, 8 };
+
+int extra[] __attribute__ ((section(".data.extra"))) = { 1, 2, 3, 4 };
+
+int zeroes[1024] = {0};
+
+int main(void)
+{
+ return 0;
+}
diff --git a/gold/testsuite/script_test_15a.sh b/gold/testsuite/script_test_15a.sh
new file mode 100755
index 0000000..791350c
--- /dev/null
+++ b/gold/testsuite/script_test_15a.sh
@@ -0,0 +1,41 @@
+#!/bin/sh
+
+# script_test_15a.sh -- test for .bss placement.
+
+# Copyright (C) 2016 Free Software Foundation, Inc.
+# Written by Cary Coutant <ccoutant@gmail.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 that the .bss section is not allocated in the file image.
+
+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_15a.stdout "LOAD.*0x0000.. 0x0010.. RW"
+check script_test_15a.stdout "01.*\\.data .*\\.data.extra .*\\.bss"
diff --git a/gold/testsuite/script_test_15a.t b/gold/testsuite/script_test_15a.t
new file mode 100644
index 0000000..5f14c8e
--- /dev/null
+++ b/gold/testsuite/script_test_15a.t
@@ -0,0 +1,40 @@
+/* script_test_15a.t -- linker script test 15a for gold
+
+ Copyright (C) 2016 Free Software Foundation, Inc.
+ Written by Cary Coutant <ccoutant@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. */
+
+/* We won't try to run this program, just ensure that it links
+ as expected. */
+
+SECTIONS
+{
+ /* With luck this will be enough to get the program working. */
+ .interp : { *(.interp) }
+ .text : { *(.text .text.*) }
+ .rodata : { *(.rodata .rodata.*) }
+ /* Required by the ARM target. */
+ .ARM.extab : { *(.ARM.extab*) }
+ .ARM.exidx : { *(.ARM.exidx*) }
+ . = ALIGN(0x10000);
+ .dynamic : { *(.dynamic) }
+ .data : { *(.data) }
+ .got : { *(.got .toc) }
+ .bss : { *(.bss) }
+}
diff --git a/gold/testsuite/script_test_15b.sh b/gold/testsuite/script_test_15b.sh
new file mode 100755
index 0000000..3179758
--- /dev/null
+++ b/gold/testsuite/script_test_15b.sh
@@ -0,0 +1,42 @@
+#!/bin/sh
+
+# script_test_15b.sh -- test for .bss placement.
+
+# Copyright (C) 2016 Free Software Foundation, Inc.
+# Written by Cary Coutant <ccoutant@gmail.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 that a .bss section placed in the middle of a segment
+# is allocated in the file image.
+
+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_15b.stdout "LOAD.*0x0010.. 0x0010.. RW"
+check script_test_15b.stdout "01.*\\.bss .*\\.data .*\\.data.extra"
diff --git a/gold/testsuite/script_test_15b.t b/gold/testsuite/script_test_15b.t
new file mode 100644
index 0000000..2a17a7f
--- /dev/null
+++ b/gold/testsuite/script_test_15b.t
@@ -0,0 +1,49 @@
+/* script_test_15b.t -- linker script test 15b for gold
+
+ Copyright (C) 2016 Free Software Foundation, Inc.
+ Written by Cary Coutant <ccoutant@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. */
+
+/* Test that a .bss section explicitly placed in the middle of a
+ segment has allocated file space. */
+
+/* We won't try to run this program, just ensure that it links
+ as expected. */
+
+PHDRS
+{
+ text PT_LOAD FLAGS(5);
+ data PT_LOAD FLAGS(6);
+}
+
+SECTIONS
+{
+ /* With luck this will be enough to get the program working. */
+ .interp : { *(.interp) } :text
+ .text : { *(.text .text.*) }
+ .rodata : { *(.rodata .rodata.*) }
+ /* Required by the ARM target. */
+ .ARM.extab : { *(.ARM.extab*) }
+ .ARM.exidx : { *(.ARM.exidx*) }
+ . = ALIGN(0x10000);
+ .dynamic : { *(.dynamic) }
+ .bss : { *(.bss) } :data
+ .data : { *(.data) }
+ .got : { *(.got .toc) }
+}
diff --git a/gold/testsuite/script_test_15c.sh b/gold/testsuite/script_test_15c.sh
new file mode 100755
index 0000000..27631fc
--- /dev/null
+++ b/gold/testsuite/script_test_15c.sh
@@ -0,0 +1,42 @@
+#!/bin/sh
+
+# script_test_15c.sh -- test for .bss placement.
+
+# Copyright (C) 2016 Free Software Foundation, Inc.
+# Written by Cary Coutant <ccoutant@gmail.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 that an orphan .bss section is placed at the end of a segment
+# and is not allocated in the file image.
+
+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_15c.stdout "LOAD.*0x0000.. 0x0010.. RW"
+check script_test_15c.stdout "01.*\\.data .*\\.data.extra .*\\.bss"
diff --git a/gold/testsuite/script_test_15c.t b/gold/testsuite/script_test_15c.t
new file mode 100644
index 0000000..667d727
--- /dev/null
+++ b/gold/testsuite/script_test_15c.t
@@ -0,0 +1,41 @@
+/* script_test_15c.t -- linker script test 15c for gold
+
+ Copyright (C) 2016 Free Software Foundation, Inc.
+ Written by Cary Coutant <ccoutant@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. */
+
+/* Test that an orphan .bss section is placed at the end of the segment. */
+
+/* We won't try to run this program, just ensure that it links
+ as expected. */
+
+SECTIONS
+{
+ /* With luck this will be enough to get the program working. */
+ .interp : { *(.interp) }
+ .text : { *(.text .text.*) }
+ .rodata : { *(.rodata .rodata.*) }
+ /* Required by the ARM target. */
+ .ARM.extab : { *(.ARM.extab*) }
+ .ARM.exidx : { *(.ARM.exidx*) }
+ . = ALIGN(0x10000);
+ .dynamic : { *(.dynamic) }
+ .data : { *(.data) }
+ .got : { *(.got .toc) }
+}
diff --git a/gold/testsuite/script_test_2.cc b/gold/testsuite/script_test_2.cc
index d1b7aa9..eb45b32 100644
--- a/gold/testsuite/script_test_2.cc
+++ b/gold/testsuite/script_test_2.cc
@@ -42,21 +42,19 @@ int
main(int, char**)
{
assert(reinterpret_cast<uintptr_t>(start_test_area) == 0x20000001);
- assert(reinterpret_cast<uintptr_t>(start_test_area_1) == 0x20000010);
+ assert(reinterpret_cast<uintptr_t>(start_test_area_1) == 0x20000020);
- // We should see the string from script_test_2b.o next. The
- // subalign should move it up to 0x20000020.
- for (int i = 0; i < 16; ++i)
- assert(start_test_area_1[i] == 0);
- assert(strcmp(start_test_area_1 + 16, "test bb") == 0);
+ assert(strcmp(start_test_area_1, "test bb") == 0);
// Next the string from script_test_2a.o, after the subalign.
- for (int i = 16 + 7; i < 48; ++i)
+ for (int i = 7; i < 32; ++i)
assert(start_test_area_1[i] == 0);
- assert(strcmp(start_test_area_1 + 48, "test aa") == 0);
+ assert(strcmp(start_test_area_1 + 32, "test aa") == 0);
- // Move four bytes forward to start_data.
- assert(reinterpret_cast<uintptr_t>(start_test_area_1 + 48 + 8 + 4)
+ // Skip to start_data at relative offset 60.
+ for (int i = 32 + 7; i < 60; ++i)
+ assert(start_test_area_1[i] == 0);
+ assert(reinterpret_cast<uintptr_t>(start_test_area_1 + 60)
== reinterpret_cast<uintptr_t>(start_data));
assert(memcmp(start_data, "\1\2\0\4\0\0\0\010\0\0\0\0\0\0\0", 15) == 0
|| memcmp(start_data, "\1\0\2\0\0\0\4\0\0\0\0\0\0\0\010", 15) == 0);