diff options
Diffstat (limited to 'gold/testsuite')
-rw-r--r-- | gold/testsuite/Makefile.am | 27 | ||||
-rw-r--r-- | gold/testsuite/Makefile.in | 38 | ||||
-rw-r--r-- | gold/testsuite/script_test_15.c | 10 | ||||
-rwxr-xr-x | gold/testsuite/script_test_15a.sh | 41 | ||||
-rw-r--r-- | gold/testsuite/script_test_15a.t | 40 | ||||
-rwxr-xr-x | gold/testsuite/script_test_15b.sh | 42 | ||||
-rw-r--r-- | gold/testsuite/script_test_15b.t | 49 | ||||
-rwxr-xr-x | gold/testsuite/script_test_15c.sh | 42 | ||||
-rw-r--r-- | gold/testsuite/script_test_15c.t | 41 | ||||
-rw-r--r-- | gold/testsuite/script_test_2.cc | 18 |
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); |