aboutsummaryrefslogtreecommitdiff
path: root/gold/testsuite
diff options
context:
space:
mode:
authorCary Coutant <ccoutant@gmail.com>2020-12-14 15:46:47 -0800
committerCary Coutant <ccoutant@gmail.com>2020-12-14 15:49:27 -0800
commitff4bc37d77a0ca7286883a477adcb3aa145fc782 (patch)
treef90757858598811f287e2100b14fa0299d39cdde /gold/testsuite
parent8cd6d968de17f5dac1601d7cbdda838c9d82c822 (diff)
downloadbinutils-ff4bc37d77a0ca7286883a477adcb3aa145fc782.zip
binutils-ff4bc37d77a0ca7286883a477adcb3aa145fc782.tar.gz
binutils-ff4bc37d77a0ca7286883a477adcb3aa145fc782.tar.bz2
Keep input SHF_GNU_RETAIN sections and strip output SHF_GNU_RETAIN for GNU/FreBSD ELFOSABIs.
2020-12-14 H.J. Lu <hjl.tools@gmail.com> Cary Coutant <ccoutant@gmail.com> elfcpp/ PR gold/27039 * elfcpp.h (SHF): Add SHF_GNU_RETAIN. gold/ PR gold/27039 * layout.cc (Layout::layout): Strip SHF_GNU_RETAIN. * object.cc (Sized_relobj_file::Sized_relobj_file): Initialize osabi_. (Sized_relobj_file::do_layout): Keep SHF_GNU_RETAIN sections for GNU/FreBSD ELFOSABIs. * object.h (Osabi) New class. (Sized_relobj_file): Add osabi() and osabi_. * testsuite/Makefile.am (check_SCRIPTS): Add retain.sh. (check_DATA): Add retain_1.out retain_2.out. (MOSTLYCLEANFILES): Add retain_1 retain_2. (retain_1.out): New target. (retain_1): Likewise. (retain_1.o): Likewise. (retain_2.out): Likewise. (retain_2): Likewise. (retain_2.o): Likewise. * testsuite/Makefile.in: Regenerate. * testsuite/retain.sh: New file. * testsuite/retain_1.s: Likewise. * testsuite/retain_2.s: Likewise.
Diffstat (limited to 'gold/testsuite')
-rw-r--r--gold/testsuite/Makefile.am16
-rw-r--r--gold/testsuite/Makefile.in26
-rwxr-xr-xgold/testsuite/retain.sh60
-rw-r--r--gold/testsuite/retain_1.s104
-rw-r--r--gold/testsuite/retain_2.s22
5 files changed, 225 insertions, 3 deletions
diff --git a/gold/testsuite/Makefile.am b/gold/testsuite/Makefile.am
index 72a296f..38e5481 100644
--- a/gold/testsuite/Makefile.am
+++ b/gold/testsuite/Makefile.am
@@ -4418,4 +4418,20 @@ pr26936c.o: pr26936c.s
pr26936d.o: pr26936d.s
$(TEST_AS) --gen-debug -mx86-used-note=yes -o $@ $<
+check_SCRIPTS += retain.sh
+check_DATA += retain_1.out retain_2.out
+MOSTLYCLEANFILES += retain_1 retain_2
+retain_1.out: retain_1
+ $(TEST_NM) $< >$@
+retain_1: retain_1.o ../ld-new
+ ../ld-new -e _start --gc-sections -o $@ retain_1.o
+retain_1.o: retain_1.s
+ $(TEST_AS) -o $@ $<
+retain_2.out: retain_2
+ $(TEST_READELF) -d $< >$@
+retain_2: retain_2.o ../ld-new
+ ../ld-new -pie -e _start --gc-sections -o $@ retain_2.o
+retain_2.o: retain_2.s
+ $(TEST_AS) -o $@ $<
+
endif DEFAULT_TARGET_X86_64
diff --git a/gold/testsuite/Makefile.in b/gold/testsuite/Makefile.in
index 5575408..7b4b783 100644
--- a/gold/testsuite/Makefile.in
+++ b/gold/testsuite/Makefile.in
@@ -1130,12 +1130,13 @@ check_PROGRAMS = $(am__EXEEXT_1) $(am__EXEEXT_2) $(am__EXEEXT_3) \
@DEFAULT_TARGET_S390_TRUE@@NATIVE_OR_CROSS_LINKER_TRUE@ split_s390x_z4_ns split_s390x_n1_ns split_s390x_n2_ns split_s390x_r
@DEFAULT_TARGET_X86_64_TRUE@am__append_114 = *.dwo *.dwp pr26936a \
-@DEFAULT_TARGET_X86_64_TRUE@ pr26936b
+@DEFAULT_TARGET_X86_64_TRUE@ pr26936b retain_1 retain_2
@DEFAULT_TARGET_X86_64_TRUE@am__append_115 = dwp_test_1.sh \
-@DEFAULT_TARGET_X86_64_TRUE@ dwp_test_2.sh pr26936.sh
+@DEFAULT_TARGET_X86_64_TRUE@ dwp_test_2.sh pr26936.sh retain.sh
@DEFAULT_TARGET_X86_64_TRUE@am__append_116 = dwp_test_1.stdout \
@DEFAULT_TARGET_X86_64_TRUE@ dwp_test_2.stdout pr26936a.stdout \
-@DEFAULT_TARGET_X86_64_TRUE@ pr26936b.stdout
+@DEFAULT_TARGET_X86_64_TRUE@ pr26936b.stdout retain_1.out \
+@DEFAULT_TARGET_X86_64_TRUE@ retain_2.out
subdir = testsuite
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/../config/ax_pthread.m4 \
@@ -6451,6 +6452,13 @@ pr26936.sh.log: pr26936.sh
--log-file $$b.log --trs-file $$b.trs \
$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
"$$tst" $(AM_TESTS_FD_REDIRECT)
+retain.sh.log: retain.sh
+ @p='retain.sh'; \
+ b='retain.sh'; \
+ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+ --log-file $$b.log --trs-file $$b.trs \
+ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+ "$$tst" $(AM_TESTS_FD_REDIRECT)
object_unittest.log: object_unittest$(EXEEXT)
@p='object_unittest$(EXEEXT)'; \
b='object_unittest'; \
@@ -10394,6 +10402,18 @@ uninstall-am:
@DEFAULT_TARGET_X86_64_TRUE@ $(TEST_AS) --gen-debug -mx86-used-note=yes -o $@ $<
@DEFAULT_TARGET_X86_64_TRUE@pr26936d.o: pr26936d.s
@DEFAULT_TARGET_X86_64_TRUE@ $(TEST_AS) --gen-debug -mx86-used-note=yes -o $@ $<
+@DEFAULT_TARGET_X86_64_TRUE@retain_1.out: retain_1
+@DEFAULT_TARGET_X86_64_TRUE@ $(TEST_NM) $< >$@
+@DEFAULT_TARGET_X86_64_TRUE@retain_1: retain_1.o ../ld-new
+@DEFAULT_TARGET_X86_64_TRUE@ ../ld-new -e _start --gc-sections -o $@ retain_1.o
+@DEFAULT_TARGET_X86_64_TRUE@retain_1.o: retain_1.s
+@DEFAULT_TARGET_X86_64_TRUE@ $(TEST_AS) -o $@ $<
+@DEFAULT_TARGET_X86_64_TRUE@retain_2.out: retain_2
+@DEFAULT_TARGET_X86_64_TRUE@ $(TEST_READELF) -d $< >$@
+@DEFAULT_TARGET_X86_64_TRUE@retain_2: retain_2.o ../ld-new
+@DEFAULT_TARGET_X86_64_TRUE@ ../ld-new -pie -e _start --gc-sections -o $@ retain_2.o
+@DEFAULT_TARGET_X86_64_TRUE@retain_2.o: retain_2.s
+@DEFAULT_TARGET_X86_64_TRUE@ $(TEST_AS) -o $@ $<
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
diff --git a/gold/testsuite/retain.sh b/gold/testsuite/retain.sh
new file mode 100755
index 0000000..0f5c695
--- /dev/null
+++ b/gold/testsuite/retain.sh
@@ -0,0 +1,60 @@
+#!/bin/sh
+
+# retain.sh -- Tests for SHF_GNU_RETAIN.
+
+# Copyright (C) 2020 Free Software Foundation, Inc.
+
+# 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.
+
+set -e
+
+check()
+{
+ number_of_occurrence=`egrep "$2" ./$1 -o | wc -l`
+ if [ $number_of_occurrence != $3 ]
+ then
+ echo "$1: \"$2\" $3: Failed"
+ status=1
+ fi
+}
+
+status=0
+check retain_1.out " T fnretain1" 1
+check retain_1.out " b lsretain0.2" 1
+check retain_1.out " b lsretain1.1" 1
+check retain_1.out " d lsretain2.0" 1
+check retain_1.out " B retain0" 1
+check retain_1.out " B retain1" 1
+check retain_1.out " D retain2" 1
+check retain_1.out " b sretain0" 1
+check retain_1.out " b sretain1" 1
+check retain_1.out " d sretain2" 1
+if grep discard retain_1.out
+then
+ echo "retain_1.out: Garbage collection failed"
+ status=1
+fi
+
+check retain_2.out " \(PREINIT_ARRAY\)" 1
+check retain_2.out " \(PREINIT_ARRAYSZ\)" 1
+check retain_2.out " \(INIT_ARRAY\)" 1
+check retain_2.out " \(INIT_ARRAYSZ\)" 1
+check retain_2.out " \(FINI_ARRAY\)" 1
+check retain_2.out " \(FINI_ARRAYSZ\)" 1
+
+exit $status
diff --git a/gold/testsuite/retain_1.s b/gold/testsuite/retain_1.s
new file mode 100644
index 0000000..f7716fa
--- /dev/null
+++ b/gold/testsuite/retain_1.s
@@ -0,0 +1,104 @@
+ .global discard0
+ .section .bss.discard0,"aw"
+ .type discard0, %object
+discard0:
+ .zero 2
+
+ .global discard1
+ .section .bss.discard1,"aw"
+ .type discard1, %object
+discard1:
+ .zero 2
+
+ .global discard2
+ .section .data.discard2,"aw"
+ .type discard2, %object
+discard2:
+ .word 1
+
+ .section .bss.sdiscard0,"aw"
+ .type sdiscard0, %object
+sdiscard0:
+ .zero 2
+
+ .section .bss.sdiscard1,"aw"
+ .type sdiscard1, %object
+sdiscard1:
+ .zero 2
+
+ .section .data.sdiscard2,"aw"
+ .type sdiscard2, %object
+sdiscard2:
+ .word 1
+
+ .section .text.fndiscard0,"ax"
+ .global fndiscard0
+ .type fndiscard0, %function
+fndiscard0:
+ .word 0
+
+ .global retain0
+ .section .bss.retain0,"awR"
+ .type retain0, %object
+retain0:
+ .zero 2
+
+ .global retain1
+ .section .bss.retain1,"awR"
+ .type retain1, %object
+retain1:
+ .zero 2
+
+ .global retain2
+ .section .data.retain2,"awR"
+ .type retain2, %object
+retain2:
+ .word 1
+
+ .section .bss.sretain0,"awR"
+ .type sretain0, %object
+sretain0:
+ .zero 2
+
+ .section .bss.sretain1,"awR"
+ .type sretain1, %object
+sretain1:
+ .zero 2
+
+ .section .data.sretain2,"aRw"
+ .type sretain2, %object
+sretain2:
+ .word 1
+
+ .section .text.fnretain1,"Rax"
+ .global fnretain1
+ .type fnretain1, %function
+fnretain1:
+ .word 0
+
+ .section .text.fndiscard2,"ax"
+ .global fndiscard2
+ .type fndiscard2, %function
+fndiscard2:
+ .word 0
+
+ .section .bss.lsretain0,"awR"
+ .type lsretain0.2, %object
+lsretain0.2:
+ .zero 2
+
+ .section .bss.lsretain1,"aRw"
+ .type lsretain1.1, %object
+lsretain1.1:
+ .zero 2
+
+ .section .data.lsretain2,"aRw"
+ .type lsretain2.0, %object
+lsretain2.0:
+ .word 1
+
+ .section .text._start,"ax"
+ .global _start
+ .type _start, %function
+_start:
+ .word 0
diff --git a/gold/testsuite/retain_2.s b/gold/testsuite/retain_2.s
new file mode 100644
index 0000000..67d86d1
--- /dev/null
+++ b/gold/testsuite/retain_2.s
@@ -0,0 +1,22 @@
+ .section .preinit_array.01000,"aw",%preinit_array
+ .dc.a 0
+
+ .section .init_array.01000,"aw",%init_array
+ .dc.a 0
+
+ .section .fini_array.01000,"aw",%fini_array
+ .dc.a 0
+
+ .section .preinit_array.01000,"awR",%preinit_array
+ .dc.a 0
+
+ .section .init_array.01000,"awR",%init_array
+ .dc.a 0
+
+ .section .fini_array.01000,"awR",%fini_array
+ .dc.a 0
+
+ .text
+ .globl _start
+_start:
+ .dc.a 0