public inbox for binutils@sourceware.org
 help / color / mirror / Atom feed
From: Alan Modra <amodra@gmail.com>
To: "H.J. Lu" <hjl.tools@gmail.com>
Cc: binutils@sourceware.org
Subject: Re: [PATCH v4 6/7] ld: Add tests for -z nosectionheader and --strip-section-headers
Date: Thu, 6 Jul 2023 10:57:17 +0930	[thread overview]
Message-ID: <ZKYYdZAcGxTwVpJw@squeak.grove.modra.org> (raw)
In-Reply-To: <CAMe9rOp2N9PfkCi32F32Rxf+wO=UdiFqLLjKP4-pUbvDphj6kw@mail.gmail.com>

On Thu, Jun 29, 2023 at 01:56:30PM -0700, H.J. Lu wrote:
> 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?

I would replace DEFAULT with DEFAULT.*, but this test has a quite a
few other problems.

We should be using run_host_cmd everywhere we invoke a compiler in the
ld testsuite, if we want to use ld/ld-new just built.  run_host_cmd
properly inserts $gcc_B_opt in cases where a user wants to test
binutils with a newly built compiler, ie. when $CC specifies -B itself.

Also, it is not good practice to exclude tests when non-native except
of course those tests that run a target binary.  Compiling and linking
often shows up problems, before you get complaints from people running
natively.

The following gives me clean results on the test, except for
mips-linux-gnu  +FAIL: Build pr25617-1a-now-no-sec-hdr.so (none)
mips-linux-gnu  +FAIL: Build pr25617-1a-now-no-sec-hdr.so (objcopy)
mips-linux-gnu  +FAIL: Build pr25617-1a-now-no-sec-hdr.so (strip)
and those are due to the .so being built with --hash-style=gnu which
results in DT_MIPS_XHASH on mips.  I'm unsure what the correct fix is
for mips, it might just be a simple readelf change.

	* testsuite/ld-elf/no-section-header.exp (binutils_run_test):
	Use run_host_cmd to invoke $CC_FOR_TARGET.  Run all tests
	non-native too, except for attempting to run the binaries.
	Run tests for ELF in general, not just linux.
	* testsuite/ld-elf/pr25617-1-no-sec-hdr.rd: Allow localentry
	symbol decoration, and support either sorting of symbols.
	* testsuite/ld-elf/pr25617-1a-no-sec-hdr.rd: Likewise.
	* testsuite/ld-elf/pr25617-1a-sec-hdr.rd: Likewise.
	* testsuite/ld-elf/pr25617-1a-no-sec-hdr.nd: Accept D function syms.
	* testsuite/ld-elf/start-shared-noheader-sysv.rd: Accept
	mips-sgi-irix symbol output.
	* testsuite/ld-elf/start-shared-noheader.nd: Likewise.

diff --git a/ld/testsuite/ld-elf/no-section-header.exp b/ld/testsuite/ld-elf/no-section-header.exp
index c010e572a32..bd4697ddd4c 100644
--- a/ld/testsuite/ld-elf/no-section-header.exp
+++ b/ld/testsuite/ld-elf/no-section-header.exp
@@ -21,9 +21,7 @@
 # Written by H.J. Lu (hongjiu.lu@intel.com)
 #
 
-# Make sure that binutils can correctly handle ld output in ELF.
-
-if { ![istarget *-*-linux*] } {
+if { ![is_elf_format] } {
     return
 }
 
@@ -129,14 +127,13 @@ binutils_test strip "--hash-style=gnu -shared" start \
 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] } {
+
+if { ![check_compiler_available] || ![check_shared_lib_support] } {
     return
 }
 
 proc binutils_run_test { prog } {
-    global CC
-    global gcc_B_opt
+    global CC_FOR_TARGET
     global READELF
     global NM
     global objcopy
@@ -286,20 +283,22 @@ proc binutils_run_test { prog } {
 	    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
+	if { [isnative] } {
+	    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)"
@@ -338,24 +337,25 @@ proc binutils_run_test { prog } {
 	    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
+	if { [isnative] } {
+	    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
+	set got [run_host_cmd $CC_FOR_TARGET "-o tmpdir/pr25617-1 tmpdir/pr25617-1b.o tmpdir/pr25617-1a-now-no-sec-hdr.so"]
 	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)"
diff --git a/ld/testsuite/ld-elf/pr25617-1-no-sec-hdr.rd b/ld/testsuite/ld-elf/pr25617-1-no-sec-hdr.rd
index be49dea32db..05957dc3e69 100644
--- a/ld/testsuite/ld-elf/pr25617-1-no-sec-hdr.rd
+++ b/ld/testsuite/ld-elf/pr25617-1-no-sec-hdr.rd
@@ -14,7 +14,7 @@ Program Headers:
  +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(@.*|)
+.* FUNC +GLOBAL +DEFAULT.* UND +(__libc_start_main(@.*|)|_?test)
 #...
- +[0-9]+: +[a-f0-9]+ +0+ +FUNC +GLOBAL +DEFAULT +UND +_?test
+.* FUNC +GLOBAL +DEFAULT.* UND +(__libc_start_main(@.*|)|_?test)
 #pass
diff --git a/ld/testsuite/ld-elf/pr25617-1a-no-sec-hdr.nd b/ld/testsuite/ld-elf/pr25617-1a-no-sec-hdr.nd
index 2813ffc6652..2dc92a2ff50 100644
--- a/ld/testsuite/ld-elf/pr25617-1a-no-sec-hdr.nd
+++ b/ld/testsuite/ld-elf/pr25617-1a-no-sec-hdr.nd
@@ -1,3 +1,3 @@
 #...
  + U _?puts(@.*|)
-[0-9a-z]+ T _?test
+[0-9a-z]+ [TD] _?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
index f7a4eec7362..519ce15453e 100644
--- a/ld/testsuite/ld-elf/pr25617-1a-no-sec-hdr.rd
+++ b/ld/testsuite/ld-elf/pr25617-1a-no-sec-hdr.rd
@@ -14,7 +14,7 @@ Program Headers:
  +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(@.*|)
+.* FUNC +GLOBAL +DEFAULT.* (UND +_?puts(@.*|)|[0-9]+ +_?test)
 #...
- +[0-9]+: +[a-f0-9]+ +[0-9]+ +FUNC +GLOBAL +DEFAULT +[0-9]+ +_?test
+.* FUNC +GLOBAL +DEFAULT.* (UND +_?puts(@.*|)|[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
index 9ccf0565af6..0de2915811a 100644
--- a/ld/testsuite/ld-elf/pr25617-1a-sec-hdr.rd
+++ b/ld/testsuite/ld-elf/pr25617-1a-sec-hdr.rd
@@ -13,7 +13,7 @@ Program Headers:
  +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(@.*|)
+.* FUNC +GLOBAL +DEFAULT.* (UND +_?puts(@.*|)|[0-9]+ +_?test)
 #...
- +[0-9]+: +[a-f0-9]+ +[0-9]+ +FUNC +GLOBAL +DEFAULT +[0-9]+ +_?test
+.* FUNC +GLOBAL +DEFAULT.* (UND +_?puts(@.*|)|[0-9]+ +_?test)
 #pass
diff --git a/ld/testsuite/ld-elf/start-shared-noheader-sysv.rd b/ld/testsuite/ld-elf/start-shared-noheader-sysv.rd
index d8f02497e58..d5bbb8bb6d0 100644
--- a/ld/testsuite/ld-elf/start-shared-noheader-sysv.rd
+++ b/ld/testsuite/ld-elf/start-shared-noheader-sysv.rd
@@ -14,13 +14,13 @@ Program Headers:
  +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
+.* GLOBAL +DEFAULT.* __start
 #...
- +[0-9]+: +[a-f0-9]+ +0 +NOTYPE +GLOBAL +DEFAULT +[0-9]+ +_start
+.* GLOBAL +DEFAULT.* _start
 #...
- +[0-9]+: +[a-f0-9]+ +0 +NOTYPE +GLOBAL +DEFAULT +[0-9]+ +main
+.* GLOBAL +DEFAULT.* main
 #...
- +[0-9]+: +[a-f0-9]+ +0 +NOTYPE +GLOBAL +DEFAULT +[0-9]+ +start
+.* GLOBAL +DEFAULT.* start
 #...
- +[0-9]+: +[a-f0-9]+ +0 +NOTYPE +GLOBAL +DEFAULT +[0-9]+ +_main
+.* GLOBAL +DEFAULT.* _main
 #pass
diff --git a/ld/testsuite/ld-elf/start-shared-noheader.nd b/ld/testsuite/ld-elf/start-shared-noheader.nd
index 6ec6cdf8af9..d1e7dd11fd4 100644
--- a/ld/testsuite/ld-elf/start-shared-noheader.nd
+++ b/ld/testsuite/ld-elf/start-shared-noheader.nd
@@ -1,11 +1,11 @@
 #...
-[0-9a-z]+ A __start
+[0-9a-z]+ [AD] __start
 #...
-[0-9a-z]+ A _main
+[0-9a-z]+ [AD] _main
 #...
-[0-9a-z]+ A _start
+[0-9a-z]+ [AD] _start
 #...
-[0-9a-z]+ A main
+[0-9a-z]+ [AD] main
 #...
-[0-9a-z]+ A start
+[0-9a-z]+ [AD] start
 #pass


-- 
Alan Modra
Australia Development Lab, IBM

  reply	other threads:[~2023-07-06  1:27 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
2023-07-06  1:27     ` Alan Modra [this message]
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=ZKYYdZAcGxTwVpJw@squeak.grove.modra.org \
    --to=amodra@gmail.com \
    --cc=binutils@sourceware.org \
    --cc=hjl.tools@gmail.com \
    /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).