From: "H.J. Lu" <hjl.tools@gmail.com>
To: binutils@sourceware.org
Cc: Alan Modra <amodra@gmail.com>
Subject: Re: [PATCH v4 6/7] ld: Add tests for -z nosectionheader and --strip-section-headers
Date: Thu, 29 Jun 2023 13:56:30 -0700 [thread overview]
Message-ID: <CAMe9rOp2N9PfkCi32F32Rxf+wO=UdiFqLLjKP4-pUbvDphj6kw@mail.gmail.com> (raw)
In-Reply-To: <20230606175846.399377-7-hjl.tools@gmail.com>
On Tue, Jun 6, 2023 at 10:58 AM H.J. Lu <hjl.tools@gmail.com> wrote:
>
> Add tests to verify that the linker option, -z nosectionheader and
> objcopy and strip option, --strip-section-headers, work correctly as well
> as linker issues an error when dynamic symbol table from PT_DYNAMIC
> segment is used.
>
> PR ld/25617
> * testsuite/ld-elf/hash-2.d: New file.
> * testsuite/ld-elf/no-section-header.exp: Likewise.
> * testsuite/ld-elf/pr25617-1-no-sec-hdr.nd: Likewise.
> * testsuite/ld-elf/pr25617-1-no-sec-hdr.rd: Likewise.
> * testsuite/ld-elf/pr25617-1-static-no-sec-hdr.rd: Likewise.
> * testsuite/ld-elf/pr25617-1a-no-sec-hdr.nd: Likewise.
> * testsuite/ld-elf/pr25617-1a-no-sec-hdr.rd: Likewise.
> * testsuite/ld-elf/pr25617-1a-sec-hdr.rd: Likewise.
> * testsuite/ld-elf/pr25617-1a.c: Likewise.
> * testsuite/ld-elf/pr25617-1b.c: Likewise.
> * testsuite/ld-elf/start-noheader.rd: Likewise.
> * testsuite/ld-elf/start-shared-noheader-gnu.rd: Likewise.
> * testsuite/ld-elf/start-shared-noheader-sysv.rd: Likewise.
> * testsuite/ld-elf/start-shared-noheader.nd: Likewise.
> ---
> ld/testsuite/ld-elf/hash-2.d | 11 +
> ld/testsuite/ld-elf/no-section-header.exp | 371 ++++++++++++++++++
> ld/testsuite/ld-elf/pr25617-1-no-sec-hdr.nd | 3 +
> ld/testsuite/ld-elf/pr25617-1-no-sec-hdr.rd | 20 +
> .../ld-elf/pr25617-1-static-no-sec-hdr.rd | 12 +
> ld/testsuite/ld-elf/pr25617-1a-no-sec-hdr.nd | 3 +
> ld/testsuite/ld-elf/pr25617-1a-no-sec-hdr.rd | 20 +
> ld/testsuite/ld-elf/pr25617-1a-sec-hdr.rd | 19 +
> ld/testsuite/ld-elf/pr25617-1a.c | 11 +
> ld/testsuite/ld-elf/pr25617-1b.c | 15 +
> ld/testsuite/ld-elf/start-noheader.rd | 11 +
> .../ld-elf/start-shared-noheader-gnu.rd | 26 ++
> .../ld-elf/start-shared-noheader-sysv.rd | 26 ++
> ld/testsuite/ld-elf/start-shared-noheader.nd | 11 +
> 14 files changed, 559 insertions(+)
> create mode 100644 ld/testsuite/ld-elf/hash-2.d
> create mode 100644 ld/testsuite/ld-elf/no-section-header.exp
> create mode 100644 ld/testsuite/ld-elf/pr25617-1-no-sec-hdr.nd
> create mode 100644 ld/testsuite/ld-elf/pr25617-1-no-sec-hdr.rd
> create mode 100644 ld/testsuite/ld-elf/pr25617-1-static-no-sec-hdr.rd
> create mode 100644 ld/testsuite/ld-elf/pr25617-1a-no-sec-hdr.nd
> create mode 100644 ld/testsuite/ld-elf/pr25617-1a-no-sec-hdr.rd
> create mode 100644 ld/testsuite/ld-elf/pr25617-1a-sec-hdr.rd
> create mode 100644 ld/testsuite/ld-elf/pr25617-1a.c
> create mode 100644 ld/testsuite/ld-elf/pr25617-1b.c
> create mode 100644 ld/testsuite/ld-elf/start-noheader.rd
> create mode 100644 ld/testsuite/ld-elf/start-shared-noheader-gnu.rd
> create mode 100644 ld/testsuite/ld-elf/start-shared-noheader-sysv.rd
> create mode 100644 ld/testsuite/ld-elf/start-shared-noheader.nd
>
> diff --git a/ld/testsuite/ld-elf/hash-2.d b/ld/testsuite/ld-elf/hash-2.d
> new file mode 100644
> index 00000000000..91320d3d6ab
> --- /dev/null
> +++ b/ld/testsuite/ld-elf/hash-2.d
> @@ -0,0 +1,11 @@
> +#source: start.s
> +#readelf: -d -s
> +#ld: -shared --hash-style=gnu -z nosectionheader
> +#target: *-*-linux* *-*-gnu* arm*-*-uclinuxfdpiceabi
> +#xfail: ![check_shared_lib_support] mips*-*-*
> +# MIPS uses a different style of GNU hash due to psABI restrictions
> +# on dynsym table ordering.
> +
> +#...
> + +0x[0-9a-z]+ +\(GNU_HASH\) +0x[0-9a-z]+
> +#pass
> diff --git a/ld/testsuite/ld-elf/no-section-header.exp b/ld/testsuite/ld-elf/no-section-header.exp
> new file mode 100644
> index 00000000000..fe0a57554b3
> --- /dev/null
> +++ b/ld/testsuite/ld-elf/no-section-header.exp
> @@ -0,0 +1,371 @@
> +# Expect script for -z nosectionheader and --strip-section-headers tests
> +# Copyright (C) 2023 Free Software Foundation, Inc.
> +#
> +# This file is part of the GNU Binutils.
> +#
> +# 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.
> +#
> +# Written by H.J. Lu (hongjiu.lu@intel.com)
> +#
> +
> +# Make sure that binutils can correctly handle ld output in ELF.
> +
> +if { ![istarget *-*-linux*] } {
> + return
> +}
> +
> +proc binutils_test { prog_name ld_options test readelf_expected nm_expected} {
> + global as
> + global ld
> + global READELF
> + global NM
> + global objcopy
> + global strip
> + global srcdir
> + global subdir
> + global link_output
> +
> + eval set prog \$$prog_name
> +
> + set test_name "$prog_name --strip-section-headers $ld_options ($test)"
> +
> + if { ![ld_assemble $as $srcdir/$subdir/$test.s tmpdir/$test.o ] } {
> + unresolved "$test_name"
> + return
> + }
> +
> + append ld_options " -z separate-code -z stack-size=0"
> + if { ![ld_link $ld tmpdir/$test "$ld_options tmpdir/$test.o"] } {
> + if { [string match "*not supported*" $link_output]
> + || [string match "*unrecognized option*" $link_output]
> + || [string match "*-z .* ignored*" $link_output] } {
> + unsupported "$ld_options is not supported by this target"
> + } else {
> + unresolved "$test_name"
> + }
> + return
> + }
> +
> + send_log "$prog --strip-section-headers tmpdir/$test\n"
> + set got [remote_exec host "$prog --strip-section-headers tmpdir/$test"]
> + if { [lindex $got 0] != 0 || ![string match "" [lindex $got 1]] } then {
> + send_log "$got\n"
> + fail "$test_name"
> + return
> + }
> +
> + send_log "$READELF -lSDs --wide tmpdir/$test > tmpdir/$test.out\n"
> + set got [remote_exec host "$READELF -lSDs --wide tmpdir/$test" "" "/dev/null" "tmpdir/$test.out"]
> + if { [lindex $got 0] != 0 || ![string match "" [lindex $got 1]] } then {
> + send_log "$got\n"
> + unresolved "$test_name"
> + return
> + }
> +
> + if { [regexp_diff "tmpdir/$test.out" "$srcdir/$subdir/$readelf_expected"] } then {
> + fail "$test_name"
> + return
> + }
> +
> + if { [string match "*-shared *" $ld_options] } {
> + send_log "$NM -D tmpdir/$test > tmpdir/$test.out\n"
> + set got [remote_exec host "$NM -D tmpdir/$test" "" "/dev/null" "tmpdir/$test.out"]
> + if { [lindex $got 0] != 0 || ![string match "" [lindex $got 1]] } then {
> + send_log "$got\n"
> + unresolved "$test_name"
> + return
> + }
> +
> + if { [regexp_diff "tmpdir/$test.out" "$srcdir/$subdir/$nm_expected"] } then {
> + fail "$test_name"
> + return
> + }
> + }
> +
> + pass "$test_name"
> +}
> +
> +if { [istarget "mips*-*-*"] } {
> + set gnu_hash_style "sysv"
> +} else {
> + set gnu_hash_style "gnu"
> +}
> +
> +binutils_test objcopy "--hash-style=both" start start-noheader.rd \
> + start-noheader.nd
> +binutils_test objcopy "--hash-style=gnu" start start-noheader.rd \
> + start-noheader.nd
> +binutils_test objcopy "--hash-style=sysv" start start-noheader.rd \
> + start-noheader.nd
> +binutils_test objcopy "--hash-style=both -shared" start \
> + start-shared-noheader-$gnu_hash_style.rd start-shared-noheader.nd
> +binutils_test objcopy "--hash-style=gnu -shared" start \
> + start-shared-noheader-$gnu_hash_style.rd start-shared-noheader.nd
> +binutils_test objcopy "--hash-style=sysv -shared" start \
> + start-shared-noheader-sysv.rd start-shared-noheader.nd
> +binutils_test strip "--hash-style=both" start start-noheader.rd \
> + start-noheader.nd
> +binutils_test strip "--hash-style=gnu" start start-noheader.rd \
> + start-noheader.nd
> +binutils_test strip "--hash-style=sysv" start start-noheader.rd \
> + start-noheader.nd
> +binutils_test strip "--hash-style=both -shared" start \
> + start-shared-noheader-$gnu_hash_style.rd start-shared-noheader.nd
> +binutils_test strip "--hash-style=gnu -shared" start \
> + start-shared-noheader-$gnu_hash_style.rd start-shared-noheader.nd
> +binutils_test strip "--hash-style=sysv -shared" start \
> + start-shared-noheader-sysv.rd start-shared-noheader.nd
> +
> +# Skip non-native targets or -shared is not supported.
> +if { ![isnative] || ![check_shared_lib_support] } {
> + return
> +}
> +
> +proc binutils_run_test { prog } {
> + global CC
> + global gcc_B_opt
> + global READELF
> + global NM
> + global objcopy
> + global strip
> + global srcdir
> + global subdir
> + # Add $NOPIE_CFLAGS and $NOPIE_LDFLAGS if non-PIE is required.
> + global NOPIE_CFLAGS NOPIE_LDFLAGS
> +
> + set sec_hdr "sec-hdr"
> + if { "$prog" == "" } {
> + set prog_name none
> + } else {
> + set prog_name $prog
> + set ld_options ""
> + switch -- $prog {
> + objcopy
> + { set prog $objcopy }
> + strip
> + { set prog $strip }
> + default
> + {
> + fail "Build pr25617-1a-no-sec-hdr.so ($prog_name)"
> + break
> + }
> + }
> + }
> +
> + run_cc_link_tests [list \
> + [list \
> + "Build pr25617-1a-no-sec-hdr.so ($prog_name)" \
> + "-shared -Wl,-z,separate-code,--hash-style=sysv" \
> + "-fPIC" \
> + {pr25617-1a.c} \
> + [list \
> + [list "readelf" "-lWSDs" "pr25617-1a-$sec_hdr.rd"] \
> + [list "nm" "-D" "pr25617-1a-no-sec-hdr.nd"] \
> + ]\
> + "pr25617-1a-no-sec-hdr.so" \
> + ] \
> + [list \
> + "Build pr25617-1a-now-no-sec-hdr.so ($prog_name)" \
> + "-shared -Wl,-z,separate-code,-z,now,--hash-style=gnu" \
> + "-fPIC" \
> + {pr25617-1a.c} \
> + [list \
> + [list "readelf" "-lWSDs" "pr25617-1a-$sec_hdr.rd"] \
> + [list "nm" "-D" "pr25617-1a-no-sec-hdr.nd"] \
> + ]\
> + "pr25617-1a-now-no-sec-hdr.so" \
> + ] \
> + [list \
> + "Build pr25617-1 (-z nosectionheader, $prog_name)" \
> + "$NOPIE_LDFLAGS -Wl,-z,separate-code,--no-as-needed \
> + -Wl,--hash-style=sysv -Wl,-z,nosectionheader \
> + tmpdir/pr25617-1a-no-sec-hdr.so" \
> + "$NOPIE_CFLAGS" \
> + {pr25617-1b.c} \
> + {{readelf -lWSDs pr25617-1-no-sec-hdr.rd} \
> + {nm -D pr25617-1-no-sec-hdr.nd}} \
> + "pr25617-1-no-sec-hdr" \
> + ] \
> + [list \
> + "Build pr25617-1 (PIE, -z nosectionheader, $prog_name)" \
> + "-pie -Wl,-z,separate-code,--no-as-needed,--hash-style=gnu \
> + -Wl,-z,nosectionheader tmpdir/pr25617-1a-now-no-sec-hdr.so" \
> + "-fPIE" \
> + {pr25617-1b.c} \
> + {{readelf -lWSDs pr25617-1-no-sec-hdr.rd} \
> + {nm -D pr25617-1-no-sec-hdr.nd}} \
> + "pr25617-1-pie-no-sec-hdr" \
> + ] \
> + [list \
> + "Build pr25617-1 (static, -z nosectionheader, $prog_name)" \
> + "-static -Wl,-z,separate-code -Wl,-z,nosectionheader" \
> + "" \
> + {pr25617-1a.c pr25617-1b.c} \
> + {{readelf -lSWDs pr25617-1-static-no-sec-hdr.rd}} \
> + "pr25617-1-static-no-sec-hdr" \
> + ] \
> + ]
> +
> + run_ld_link_exec_tests [list \
> + [list \
> + "Run pr25617-1 (-z nosectionheader, $prog_name)" \
> + "$NOPIE_LDFLAGS -Wl,-z,separate-code,--no-as-needed \
> + -Wl,--hash-style=sysv -Wl,-z,nosectionheader \
> + tmpdir/pr25617-1a-no-sec-hdr.so" \
> + "" \
> + {pr25617-1b.c} \
> + "pr25617-1-no-sec-hdr" \
> + "pass.out" \
> + "$NOPIE_CFLAGS" \
> + ] \
> + [list \
> + "Run pr25617-1 (PIE, -z nosectionheader, $prog_name)" \
> + "-pie -Wl,-z,separate-code,--no-as-needed,--hash-style=gnu \
> + -Wl,-z,nosectionheader tmpdir/pr25617-1a-now-no-sec-hdr.so" \
> + "" \
> + {pr25617-1b.c} \
> + "pr25617-1-pie-no-sec-hdr" \
> + "pass.out" \
> + "-fPIE" \
> + ] \
> + [list \
> + "Run pr25617-1 (static, -z nosectionheader, $prog_name)" \
> + "-static -Wl,-z,separate-code -Wl,-z,nosectionheader" \
> + "" \
> + {pr25617-1a.c pr25617-1b.c} \
> + "pr25617-1-static-no-sec-hdr" \
> + "pass.out" \
> + ] \
> + ]
> +
> + if { "$prog_name" != "none" } {
> + send_log "$prog --strip-section-headers tmpdir/pr25617-1a-no-sec-hdr.so\n"
> + set got [remote_exec host "$prog --strip-section-headers tmpdir/pr25617-1a-no-sec-hdr.so"]
> + if { [lindex $got 0] != 0 || ![string match "" [lindex $got 1]] } then {
> + send_log "$got\n"
> + fail "Update pr25617-1a-no-sec-hdr.so ($prog_name)"
> + return
> + }
> +
> + send_log "$READELF -lWSDs tmpdir/pr25617-1a-no-sec-hdr.so > tmpdir/dump.out\n"
> + set got [remote_exec host "$READELF -lWSDs tmpdir/pr25617-1a-no-sec-hdr.so" "" "/dev/null" "tmpdir/dump.out"]
> + if { [lindex $got 0] != 0 || ![string match "" [lindex $got 1]] } then {
> + send_log "$got\n"
> + unresolved "Update pr25617-1a-no-sec-hdr.so ($prog_name)"
> + return
> + }
> +
> + if { [regexp_diff "tmpdir/dump.out" "$srcdir/$subdir/pr25617-1a-no-sec-hdr.rd"] } then {
> + unresolved "Update pr25617-1a-no-sec-hdr.so ($prog_name)"
> + return
> + }
> +
> + send_log "$NM -D tmpdir/pr25617-1a-no-sec-hdr.so > tmpdir/dump.out\n"
> + set got [remote_exec host "$NM -D tmpdir/pr25617-1a-no-sec-hdr.so" "" "/dev/null" "tmpdir/dump.out"]
> + if { [lindex $got 0] != 0 || ![string match "" [lindex $got 1]] } then {
> + send_log "$got\n"
> + unresolved "Update pr25617-1a-no-sec-hdr.so ($prog_name)"
> + return
> + }
> +
> + if { [regexp_diff "tmpdir/dump.out" "$srcdir/$subdir/pr25617-1a-no-sec-hdr.nd"] } then {
> + unresolved "Update pr25617-1a-no-sec-hdr.so ($prog_name)"
> + return
> + }
> +
> + send_log "tmpdir/pr25617-1-no-sec-hdr > tmpdir/pr25617-1.out\n"
> + catch "exec tmpdir/pr25617-1-no-sec-hdr > tmpdir/pr25617-1.out" got
> + if ![string match "" $got] then {
> + send_log "$got\n"
> + unresolved "Update pr25617-1a-no-sec-hdr.so ($prog_name)"
> + return
> + }
> +
> + send_log "diff tmpdir/pr25617-1.out $srcdir/$subdir/pass.out\n"
> + catch "exec diff tmpdir/pr25617-1.out $srcdir/$subdir/pass.out" got
> + if ![string match "" $got] then {
> + send_log "$got\n"
> + fail "Update pr25617-1a-no-sec-hdr.so ($prog_name)"
> + return
> + }
> +
> + pass "Update pr25617-1a-no-sec-hdr.so ($prog_name)"
> +
> + send_log "$prog --strip-section-headers tmpdir/pr25617-1a-now-no-sec-hdr.so\n"
> + set got [remote_exec host "$prog --strip-section-headers tmpdir/pr25617-1a-now-no-sec-hdr.so"]
> + if { [lindex $got 0] != 0 || ![string match "" [lindex $got 1]] } then {
> + send_log "$got\n"
> + fail "Update pr25617-1a-now-no-sec-hdr.so ($prog_name)"
> + return
> + }
> +
> + send_log "$READELF -lWSDs tmpdir/pr25617-1a-now-no-sec-hdr.so > tmpdir/dump.out\n"
> + set got [remote_exec host "$READELF -lWSDs tmpdir/pr25617-1a-now-no-sec-hdr.so" "" "/dev/null" "tmpdir/dump.out"]
> + if { [lindex $got 0] != 0 || ![string match "" [lindex $got 1]] } then {
> + send_log "$got\n"
> + unresolved "Update pr25617-1a-now-no-sec-hdr.so ($prog_name)"
> + return
> + }
> +
> + if { [regexp_diff "tmpdir/dump.out" "$srcdir/$subdir/pr25617-1a-no-sec-hdr.rd"] } then {
> + unresolved "Update pr25617-1a-now-no-sec-hdr.so ($prog_name)"
> + return
> + }
> +
> + send_log "$NM -D tmpdir/pr25617-1a-now-no-sec-hdr.so > tmpdir/dump.out\n"
> + set got [remote_exec host "$NM -D tmpdir/pr25617-1a-now-no-sec-hdr.so" "" "/dev/null" "tmpdir/dump.out"]
> + if { [lindex $got 0] != 0 || ![string match "" [lindex $got 1]] } then {
> + send_log "$got\n"
> + unresolved "Update pr25617-1a-now-no-sec-hdr.so ($prog_name)"
> + return
> + }
> +
> + if { [regexp_diff "tmpdir/dump.out" "$srcdir/$subdir/pr25617-1a-no-sec-hdr.nd"] } then {
> + unresolved "Update pr25617-1a-now-no-sec-hdr.so ($prog_name)"
> + return
> + }
> +
> + send_log "tmpdir/pr25617-1-pie-no-sec-hdr > tmpdir/pr25617-1-pie.out\n"
> + catch "exec tmpdir/pr25617-1-pie-no-sec-hdr > tmpdir/pr25617-1-pie.out" got
> + if ![string match "" $got] then {
> + send_log "$got\n"
> + unresolved "Update pr25617-1a-now-no-sec-hdr.so ($prog_name)"
> + return
> + }
> +
> + send_log "diff tmpdir/pr25617-1-pie.out $srcdir/$subdir/pass.out\n"
> + catch "exec diff tmpdir/pr25617-1-pie.out $srcdir/$subdir/pass.out" got
> + if ![string match "" $got] then {
> + send_log "$got\n"
> + fail "Update pr25617-1a-now-no-sec-hdr.so ($prog_name)"
> + return
> + }
> +
> + send_log "$CC $gcc_B_opt -o tmpdir/pr25617-1 tmpdir/pr25617-1b.o tmpdir/pr25617-1a-now-no-sec-hdr.so\n"
> + catch "exec $CC $gcc_B_opt -o tmpdir/pr25617-1 tmpdir/pr25617-1b.o tmpdir/pr25617-1a-now-no-sec-hdr.so" got
> + if ![string match "*pr25617-1a-now-no-sec-hdr.so*file in wrong format*" $got] then {
> + send_log "$got\n"
> + fail "Update pr25617-1a-now-no-sec-hdr.so ($prog_name)"
> + return
> + }
> +
> + pass "Update pr25617-1a-now-no-sec-hdr.so ($prog_name)"
> + }
> +}
> +
> +binutils_run_test ""
> +binutils_run_test objcopy
> +binutils_run_test strip
> diff --git a/ld/testsuite/ld-elf/pr25617-1-no-sec-hdr.nd b/ld/testsuite/ld-elf/pr25617-1-no-sec-hdr.nd
> new file mode 100644
> index 00000000000..6a96f5b55a3
> --- /dev/null
> +++ b/ld/testsuite/ld-elf/pr25617-1-no-sec-hdr.nd
> @@ -0,0 +1,3 @@
> +#...
> +[a-f0-9 ]+ [DU] _?protected
> + + U _?test
> diff --git a/ld/testsuite/ld-elf/pr25617-1-no-sec-hdr.rd b/ld/testsuite/ld-elf/pr25617-1-no-sec-hdr.rd
> new file mode 100644
> index 00000000000..be49dea32db
> --- /dev/null
> +++ b/ld/testsuite/ld-elf/pr25617-1-no-sec-hdr.rd
> @@ -0,0 +1,20 @@
> +#readelf: -lWSDs
> +
> +There are no sections in this file.
> +
> +#...
> +Program Headers:
> + Type +Offset +VirtAddr.*
> +# On MIPS, the first segment is for .reginfo.
> +#...
> + LOAD .*
> +#...
> + DYNAMIC .*
> +#...
> + +Num: +Value +Size Type +Bind +Vis +Ndx Name
> + +0: 0+ +0 +NOTYPE +LOCAL +DEFAULT +UND +
> +#...
> + +[0-9]+: +[a-f0-9]+ +0 +FUNC +GLOBAL +DEFAULT +UND +__libc_start_main(@.*|)
> +#...
> + +[0-9]+: +[a-f0-9]+ +0+ +FUNC +GLOBAL +DEFAULT +UND +_?test
> +#pass
> diff --git a/ld/testsuite/ld-elf/pr25617-1-static-no-sec-hdr.rd b/ld/testsuite/ld-elf/pr25617-1-static-no-sec-hdr.rd
> new file mode 100644
> index 00000000000..92b1dc9ead9
> --- /dev/null
> +++ b/ld/testsuite/ld-elf/pr25617-1-static-no-sec-hdr.rd
> @@ -0,0 +1,12 @@
> +#readelf: -lWSDs
> +
> +There are no sections in this file.
> +
> +#...
> +Program Headers:
> + Type +Offset +VirtAddr.*
> +# On MIPS, the first segment is for .reginfo.
> +#...
> + LOAD .*
> +#...
> +Dynamic symbol information is not available for displaying symbols\.
> diff --git a/ld/testsuite/ld-elf/pr25617-1a-no-sec-hdr.nd b/ld/testsuite/ld-elf/pr25617-1a-no-sec-hdr.nd
> new file mode 100644
> index 00000000000..2813ffc6652
> --- /dev/null
> +++ b/ld/testsuite/ld-elf/pr25617-1a-no-sec-hdr.nd
> @@ -0,0 +1,3 @@
> +#...
> + + U _?puts(@.*|)
> +[0-9a-z]+ T _?test
> diff --git a/ld/testsuite/ld-elf/pr25617-1a-no-sec-hdr.rd b/ld/testsuite/ld-elf/pr25617-1a-no-sec-hdr.rd
> new file mode 100644
> index 00000000000..f7a4eec7362
> --- /dev/null
> +++ b/ld/testsuite/ld-elf/pr25617-1a-no-sec-hdr.rd
> @@ -0,0 +1,20 @@
> +#readelf: -lWSDs
> +
> +There are no sections in this file.
> +
> +#...
> +Program Headers:
> + Type +Offset +VirtAddr.*
> +# On MIPS, the first segment is for .reginfo.
> +#...
> + LOAD .*
> +#...
> + DYNAMIC .*
> +#...
> + +Num: +Value +Size Type +Bind +Vis +Ndx Name
> + +0: 0+ +0 +NOTYPE +LOCAL +DEFAULT +UND +
> +#...
> + +[0-9]+: +[a-f0-9]+ +0 +FUNC +GLOBAL +DEFAULT +UND +_?puts(@.*|)
This test failed on PPC where readelf outputs
7: 0000000000000000 0 FUNC GLOBAL DEFAULT [<localentry>:
8] UND puts@GLIBC_2.17 (2)
instead of
7: 0000000000000000 0 FUNC GLOBAL DEFAULT UND puts@GLIBC_2.17 (2)
Alan, what is the best way to deal with it?
Thanks.
> +#...
> + +[0-9]+: +[a-f0-9]+ +[0-9]+ +FUNC +GLOBAL +DEFAULT +[0-9]+ +_?test
> +#pass
> diff --git a/ld/testsuite/ld-elf/pr25617-1a-sec-hdr.rd b/ld/testsuite/ld-elf/pr25617-1a-sec-hdr.rd
> new file mode 100644
> index 00000000000..9ccf0565af6
> --- /dev/null
> +++ b/ld/testsuite/ld-elf/pr25617-1a-sec-hdr.rd
> @@ -0,0 +1,19 @@
> +#readelf: -lWSDs
> +
> +There are [0-9]+ section headers, starting at offset 0x[a-f0-9]+:
> +#...
> +Program Headers:
> + Type +Offset +VirtAddr.*
> +# On MIPS, the first segment is for .reginfo.
> +#...
> + LOAD .*
> +#...
> + DYNAMIC .*
> +#...
> + +Num: +Value +Size Type +Bind +Vis +Ndx Name
> + +0: 0+ +0 +NOTYPE +LOCAL +DEFAULT +UND +
> +#...
> + +[0-9]+: +[a-f0-9]+ +0 +FUNC +GLOBAL +DEFAULT +UND +_?puts(@.*|)
> +#...
> + +[0-9]+: +[a-f0-9]+ +[0-9]+ +FUNC +GLOBAL +DEFAULT +[0-9]+ +_?test
> +#pass
> diff --git a/ld/testsuite/ld-elf/pr25617-1a.c b/ld/testsuite/ld-elf/pr25617-1a.c
> new file mode 100644
> index 00000000000..f707f266fe2
> --- /dev/null
> +++ b/ld/testsuite/ld-elf/pr25617-1a.c
> @@ -0,0 +1,11 @@
> +#include <stdio.h>
> +
> +int protected = 42;
> +extern int *get_protected_ptr (void);
> +
> +void
> +test()
> +{
> + if (&protected == get_protected_ptr ())
> + printf ("PASS\n");
> +}
> diff --git a/ld/testsuite/ld-elf/pr25617-1b.c b/ld/testsuite/ld-elf/pr25617-1b.c
> new file mode 100644
> index 00000000000..1fd6ef45d79
> --- /dev/null
> +++ b/ld/testsuite/ld-elf/pr25617-1b.c
> @@ -0,0 +1,15 @@
> +void test(void);
> +
> +extern int protected;
> +
> +int *
> +get_protected_ptr (void)
> +{
> + return &protected;
> +}
> +
> +int main()
> +{
> + test();
> + return 0;
> +}
> diff --git a/ld/testsuite/ld-elf/start-noheader.rd b/ld/testsuite/ld-elf/start-noheader.rd
> new file mode 100644
> index 00000000000..2479e340871
> --- /dev/null
> +++ b/ld/testsuite/ld-elf/start-noheader.rd
> @@ -0,0 +1,11 @@
> +#readelf: -SlDs --wide
> +
> +There are no sections in this file.
> +
> +#...
> +Program Headers:
> + Type +Offset +VirtAddr.*
> +# On MIPS, the first segment is for .reginfo.
> +#...
> + LOAD .*
> +#pass
> diff --git a/ld/testsuite/ld-elf/start-shared-noheader-gnu.rd b/ld/testsuite/ld-elf/start-shared-noheader-gnu.rd
> new file mode 100644
> index 00000000000..20bc30cad4c
> --- /dev/null
> +++ b/ld/testsuite/ld-elf/start-shared-noheader-gnu.rd
> @@ -0,0 +1,26 @@
> +#readelf: -SlDs --wide
> +
> +There are no sections in this file.
> +
> +#...
> +Program Headers:
> + Type +Offset +VirtAddr.*
> +# On MIPS, the first segment is for .reginfo.
> +#...
> + LOAD .*
> +#...
> + DYNAMIC .*
> +#...
> + +Num: +Value +Size Type +Bind +Vis +Ndx Name
> + +0: 0+ +0 +NOTYPE +LOCAL +DEFAULT +UND +
> +#...
> + +[0-9]+: +[a-f0-9]+ +0 +NOTYPE +GLOBAL +DEFAULT +[0-9]+ +_start
> +#...
> + +[0-9]+: +[a-f0-9]+ +0 +NOTYPE +GLOBAL +DEFAULT +[0-9]+ +main
> +#...
> + +[0-9]+: +[a-f0-9]+ +0 +NOTYPE +GLOBAL +DEFAULT +[0-9]+ +start
> +#...
> + +[0-9]+: +[a-f0-9]+ +0 +NOTYPE +GLOBAL +DEFAULT +[0-9]+ +_main
> +#...
> + +[0-9]+: +[a-f0-9]+ +0 +NOTYPE +GLOBAL +DEFAULT +[0-9]+ +__start
> +#pass
> diff --git a/ld/testsuite/ld-elf/start-shared-noheader-sysv.rd b/ld/testsuite/ld-elf/start-shared-noheader-sysv.rd
> new file mode 100644
> index 00000000000..d8f02497e58
> --- /dev/null
> +++ b/ld/testsuite/ld-elf/start-shared-noheader-sysv.rd
> @@ -0,0 +1,26 @@
> +#readelf: -SlDs --wide
> +
> +There are no sections in this file.
> +
> +#...
> +Program Headers:
> + Type +Offset +VirtAddr.*
> +# On MIPS, the first segment is for .reginfo.
> +#...
> + LOAD .*
> +#...
> + DYNAMIC .*
> +#...
> + +Num: +Value +Size Type +Bind +Vis +Ndx Name
> + +0: 0+ +0 +NOTYPE +LOCAL +DEFAULT +UND +
> +#...
> + +[0-9]+: +[a-f0-9]+ +0 +NOTYPE +GLOBAL +DEFAULT +[0-9]+ +__start
> +#...
> + +[0-9]+: +[a-f0-9]+ +0 +NOTYPE +GLOBAL +DEFAULT +[0-9]+ +_start
> +#...
> + +[0-9]+: +[a-f0-9]+ +0 +NOTYPE +GLOBAL +DEFAULT +[0-9]+ +main
> +#...
> + +[0-9]+: +[a-f0-9]+ +0 +NOTYPE +GLOBAL +DEFAULT +[0-9]+ +start
> +#...
> + +[0-9]+: +[a-f0-9]+ +0 +NOTYPE +GLOBAL +DEFAULT +[0-9]+ +_main
> +#pass
> diff --git a/ld/testsuite/ld-elf/start-shared-noheader.nd b/ld/testsuite/ld-elf/start-shared-noheader.nd
> new file mode 100644
> index 00000000000..6ec6cdf8af9
> --- /dev/null
> +++ b/ld/testsuite/ld-elf/start-shared-noheader.nd
> @@ -0,0 +1,11 @@
> +#...
> +[0-9a-z]+ A __start
> +#...
> +[0-9a-z]+ A _main
> +#...
> +[0-9a-z]+ A _start
> +#...
> +[0-9a-z]+ A main
> +#...
> +[0-9a-z]+ A start
> +#pass
> --
> 2.40.1
>
--
H.J.
next prev parent reply other threads:[~2023-06-29 20:57 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-06-06 17:58 [PATCH v4 0/7] ELF: Strip section header in ELF objects H.J. Lu
2023-06-06 17:58 ` [PATCH v4 1/7] " H.J. Lu
2023-06-06 17:58 ` [PATCH v4 2/7] ELF: Discard non-alloc sections without section header H.J. Lu
2023-06-06 17:58 ` [PATCH v4 3/7] bfd: Improve nm and objdump " H.J. Lu
2023-07-01 2:12 ` Simon Marchi
2023-07-07 15:26 ` H.J. Lu
2023-07-10 3:30 ` Simon Marchi
2023-07-13 5:02 ` Alan Modra
2023-07-13 5:34 ` Fangrui Song
2023-07-13 21:58 ` Mark Wielaard
2023-07-19 6:21 ` Alan Modra
2023-06-06 17:58 ` [PATCH v4 4/7] ld: Add simple tests for -z nosectionheader H.J. Lu
2023-06-06 17:58 ` [PATCH v4 5/7] binutils: Add a --strip-section-headers test H.J. Lu
2023-06-06 17:58 ` [PATCH v4 6/7] ld: Add tests for -z nosectionheader and --strip-section-headers H.J. Lu
2023-06-29 20:56 ` H.J. Lu [this message]
2023-07-06 1:27 ` Alan Modra
2023-06-06 17:58 ` [PATCH v4 7/7] ld: Add -z nosectionheader test to bootstrap.exp H.J. Lu
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to='CAMe9rOp2N9PfkCi32F32Rxf+wO=UdiFqLLjKP4-pUbvDphj6kw@mail.gmail.com' \
--to=hjl.tools@gmail.com \
--cc=amodra@gmail.com \
--cc=binutils@sourceware.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).