[PATCH 6/7] ld: Add tests for -z nosectionheader and --remove-section-header

H.J. Lu hjl.tools@gmail.com
Sun Mar 8 23:42:41 GMT 2020


Add tests to verify that the linker option, -z nosectionheader and
objcopy and strip option, --remove-section-header, work correctly
as well as linker can properly reconstruct dynamic symbol table from
PT_DYNAMIC segment.

	PR ld/25617
	* testsuite/ld-elf/no-section-header.exp: New file.
	* testsuite/ld-elf/pr22393-2a-no-sec-hdr.nd: Likewise.
	* testsuite/ld-elf/pr22393-2a-no-sec-hdr.rd: Likewise.
	* testsuite/ld-elf/pr22393-2a-sec-hdr.rd: Likewise.
	* testsuite/ld-elf/pr22393-2b-no-sec-hdr.nd: Likewise.
	* testsuite/ld-elf/pr22393-2b-no-sec-hdr.rd: Likewise.
	* testsuite/ld-elf/pr22393-2b-static-no-sec-hdr.rd: 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/no-section-header.exp     | 336 ++++++++++++++++++
 ld/testsuite/ld-elf/pr22393-2a-no-sec-hdr.nd  |   3 +
 ld/testsuite/ld-elf/pr22393-2a-no-sec-hdr.rd  |  20 ++
 ld/testsuite/ld-elf/pr22393-2a-sec-hdr.rd     |  19 +
 ld/testsuite/ld-elf/pr22393-2b-no-sec-hdr.nd  |   3 +
 ld/testsuite/ld-elf/pr22393-2b-no-sec-hdr.rd  |  20 ++
 .../ld-elf/pr22393-2b-static-no-sec-hdr.rd    |  12 +
 ld/testsuite/ld-elf/start-noheader.rd         |  11 +
 .../ld-elf/start-shared-noheader-gnu.rd       |  22 ++
 .../ld-elf/start-shared-noheader-sysv.rd      |  22 ++
 ld/testsuite/ld-elf/start-shared-noheader.nd  |   5 +
 11 files changed, 473 insertions(+)
 create mode 100644 ld/testsuite/ld-elf/no-section-header.exp
 create mode 100644 ld/testsuite/ld-elf/pr22393-2a-no-sec-hdr.nd
 create mode 100644 ld/testsuite/ld-elf/pr22393-2a-no-sec-hdr.rd
 create mode 100644 ld/testsuite/ld-elf/pr22393-2a-sec-hdr.rd
 create mode 100644 ld/testsuite/ld-elf/pr22393-2b-no-sec-hdr.nd
 create mode 100644 ld/testsuite/ld-elf/pr22393-2b-no-sec-hdr.rd
 create mode 100644 ld/testsuite/ld-elf/pr22393-2b-static-no-sec-hdr.rd
 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/no-section-header.exp b/ld/testsuite/ld-elf/no-section-header.exp
new file mode 100644
index 0000000000..97d36c8866
--- /dev/null
+++ b/ld/testsuite/ld-elf/no-section-header.exp
@@ -0,0 +1,336 @@
+# Expect script for --remove-section-header tests
+# Copyright (C) 2020 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 --remove-section-header $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 --remove-section-header tmpdir/$test\n"
+    set got [remote_exec host "$prog --remove-section-header 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 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
+
+    if { "$prog" == "" } {
+	set prog_name none
+	set ld_options "-Wl,-z,nosectionheader"
+	set sec_hdr "no-sec-hdr"
+    } else {
+	set prog_name $prog
+	set ld_options ""
+	set sec_hdr "sec-hdr"
+	switch -- $prog {
+	    objcopy
+	        { set prog $objcopy }
+	    strip
+	        { set prog $strip }
+	    default
+		{
+		    fail "Build pr22393-2a-no-sec-hdr.so ($prog_name)"
+		    break
+		}
+	}
+    }
+
+    run_cc_link_tests [list \
+	[list \
+	    "Build pr22393-2a-no-sec-hdr.so ($prog_name)" \
+	    "-shared -Wl,-z,separate-code,--hash-style=sysv \
+	     $ld_options" \
+	    "-fPIC" \
+	    {pr22393-2a.c} \
+	    [list \
+		[list "readelf" "-lWSDs" "pr22393-2a-$sec_hdr.rd"] \
+		[list "nm" "-Ds" "pr22393-2a-no-sec-hdr.nd"] \
+	    ]\
+	    "pr22393-2a-no-sec-hdr.so" \
+	] \
+	[list \
+	    "Build pr22393-2a-now-no-sec-hdr.so ($prog_name)" \
+	    "-shared -Wl,-z,separate-code,-z,now,--hash-style=gnu \
+	     $ld_options" \
+	    "-fPIC" \
+	    {pr22393-2a.c} \
+	    [list \
+		[list "readelf" "-lWSDs" "pr22393-2a-$sec_hdr.rd"] \
+		[list "nm" "-Ds" "pr22393-2a-no-sec-hdr.nd"] \
+	    ]\
+	    "pr22393-2a-now-no-sec-hdr.so" \
+	] \
+    ]
+
+    if { "$prog_name" != "none" } {
+	send_log "$prog --remove-section-header tmpdir/pr22393-2a-no-sec-hdr.so\n"
+	set got [remote_exec host "$prog --remove-section-header tmpdir/pr22393-2a-no-sec-hdr.so"]
+	if { [lindex $got 0] != 0 || ![string match "" [lindex $got 1]] } then {
+	    send_log "$got\n"
+	    fail "Build pr22393-2a-no-sec-hdr.so ($prog_name)"
+	    return
+	}
+
+	send_log "$READELF -lWSDs tmpdir/pr22393-2a-no-sec-hdr.so > tmpdir/dump.out\n"
+	set got [remote_exec host "$READELF -lWSDs tmpdir/pr22393-2a-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 "Build pr22393-2a-no-sec-hdr.so ($prog_name)"
+	    return
+	}
+
+	if { [regexp_diff "tmpdir/dump.out" "$srcdir/$subdir/pr22393-2a-no-sec-hdr.rd"] } then {
+	    unresolved "Build pr22393-2a-no-sec-hdr.so ($prog_name)"
+	    return
+	}
+
+	send_log "$NM -Ds tmpdir/pr22393-2a-no-sec-hdr.so > tmpdir/dump.out\n"
+	set got [remote_exec host "$NM -Ds tmpdir/pr22393-2a-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 "Build pr22393-2a-no-sec-hdr.so ($prog_name)"
+	    return
+	}
+
+	if { [regexp_diff "tmpdir/dump.out" "$srcdir/$subdir/pr22393-2a-no-sec-hdr.nd"] } then {
+	    unresolved "Build pr22393-2a-no-sec-hdr.so ($prog_name)"
+	    return
+	}
+
+	send_log "$prog --remove-section-header tmpdir/pr22393-2a-now-no-sec-hdr.so\n"
+	set got [remote_exec host "$prog --remove-section-header tmpdir/pr22393-2a-now-no-sec-hdr.so"]
+	if { [lindex $got 0] != 0 || ![string match "" [lindex $got 1]] } then {
+	    send_log "$got\n"
+	    fail "Build pr22393-2a-now-no-sec-hdr.so ($prog_name)"
+	    return
+	}
+
+	send_log "$READELF -lWSDs tmpdir/pr22393-2a-now-no-sec-hdr.so > tmpdir/dump.out\n"
+	set got [remote_exec host "$READELF -lWSDs tmpdir/pr22393-2a-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 "Build pr22393-2a-now-no-sec-hdr.so ($prog_name)"
+	    return
+	}
+
+	if { [regexp_diff "tmpdir/dump.out" "$srcdir/$subdir/pr22393-2a-no-sec-hdr.rd"] } then {
+	    unresolved "Build pr22393-2a-now-no-sec-hdr.so ($prog_name)"
+	    return
+	}
+
+	send_log "$NM -Ds tmpdir/pr22393-2a-now-no-sec-hdr.so > tmpdir/dump.out\n"
+	set got [remote_exec host "$NM -Ds tmpdir/pr22393-2a-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 "Build pr22393-2a-no-sec-hdr.so ($prog_name)"
+	    return
+	}
+
+	if { [regexp_diff "tmpdir/dump.out" "$srcdir/$subdir/pr22393-2a-no-sec-hdr.nd"] } then {
+	    unresolved "Build pr22393-2a-no-sec-hdr.so ($prog_name)"
+	    return
+	}
+     }
+
+    run_cc_link_tests [list \
+	[list \
+	    "Build pr22393-2 (-z nosectionheader, $prog_name)" \
+	    "$NOPIE_LDFLAGS -Wl,-z,separate-code,--no-as-needed \
+	     -Wl,--hash-style=sysv -Wl,-z,nosectionheader \
+	     tmpdir/pr22393-2a-no-sec-hdr.so" \
+	    "$NOPIE_CFLAGS" \
+	    {pr22393-2b.c} \
+	    {{readelf -lWSDs pr22393-2b-no-sec-hdr.rd} \
+	     {nm -Ds pr22393-2b-no-sec-hdr.nd}} \
+	    "pr22393-2-no-sec-hdr" \
+	] \
+	[list \
+	    "Build pr22393-2 (PIE, -z nosectionheader, $prog_name)" \
+	    "-pie -Wl,-z,separate-code,--no-as-needed,--hash-style=gnu \
+	     -Wl,-z,nosectionheader tmpdir/pr22393-2a-now-no-sec-hdr.so" \
+	    "-fPIE" \
+	    {pr22393-2b.c} \
+	    {{readelf -lWSDs pr22393-2b-no-sec-hdr.rd} \
+	     {nm -Ds pr22393-2b-no-sec-hdr.nd}} \
+	    "pr22393-2-pie-no-sec-hdr" \
+	] \
+	[list \
+	    "Build pr22393-2 (static, -z nosectionheader, $prog_name)" \
+	    "-static -Wl,-z,separate-code -Wl,-z,nosectionheader" \
+	    "" \
+	    {pr22393-2a.c pr22393-2b.c} \
+	    {{readelf -lSWDs pr22393-2b-static-no-sec-hdr.rd}} \
+	    "pr22393-2-static-no-sec-hdr" \
+	] \
+    ]
+
+    run_ld_link_exec_tests [list \
+	[list \
+	    "Run pr22393-2 (-z nosectionheader, $prog_name)" \
+	    "$NOPIE_LDFLAGS -Wl,-z,separate-code,--no-as-needed \
+	     -Wl,--hash-style=sysv -Wl,-z,nosectionheader \
+	     tmpdir/pr22393-2a-no-sec-hdr.so" \
+	    "" \
+	    {pr22393-2b.c} \
+	    "pr22393-2-no-sec-hdr" \
+	    "pass.out" \
+	    "$NOPIE_CFLAGS" \
+	] \
+	[list \
+	    "Run pr22393-2 (PIE, -z nosectionheader, $prog_name)" \
+	    "-pie -Wl,-z,separate-code,--no-as-needed,--hash-style=gnu \
+	     -Wl,-z,nosectionheader tmpdir/pr22393-2a-now-no-sec-hdr.so" \
+	    "" \
+	    {pr22393-2b.c} \
+	    "pr22393-2-pie-no-sec-hdr" \
+	    "pass.out" \
+	    "-fPIE" \
+	] \
+	[list \
+	    "Run pr22393-2 (static, -z nosectionheader, $prog_name)" \
+	    "-static -Wl,-z,separate-code -Wl,-z,nosectionheader" \
+	    "" \
+	    {pr22393-2a.c pr22393-2b.c} \
+	    "pr22393-2-static-no-sec-hdr" \
+	    "pass.out" \
+	] \
+    ]
+}
+
+if { [istarget *-*-linux*]
+     || [istarget *-*-nacl*]
+     || [istarget *-*-gnu*] } {
+    binutils_run_test ""
+    binutils_run_test objcopy
+    binutils_run_test strip
+}
diff --git a/ld/testsuite/ld-elf/pr22393-2a-no-sec-hdr.nd b/ld/testsuite/ld-elf/pr22393-2a-no-sec-hdr.nd
new file mode 100644
index 0000000000..86fcc624af
--- /dev/null
+++ b/ld/testsuite/ld-elf/pr22393-2a-no-sec-hdr.nd
@@ -0,0 +1,3 @@
+#...
+ + U _?puts
+[0-9a-z]+ T _?test
diff --git a/ld/testsuite/ld-elf/pr22393-2a-no-sec-hdr.rd b/ld/testsuite/ld-elf/pr22393-2a-no-sec-hdr.rd
new file mode 100644
index 0000000000..65fffba478
--- /dev/null
+++ b/ld/testsuite/ld-elf/pr22393-2a-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
+#...
+ +[0-9]+: +[a-f0-9]+ +[0-9]+ +FUNC +GLOBAL +DEFAULT +[0-9]+ +_?test
+#pass
diff --git a/ld/testsuite/ld-elf/pr22393-2a-sec-hdr.rd b/ld/testsuite/ld-elf/pr22393-2a-sec-hdr.rd
new file mode 100644
index 0000000000..b244c8b1a5
--- /dev/null
+++ b/ld/testsuite/ld-elf/pr22393-2a-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/pr22393-2b-no-sec-hdr.nd b/ld/testsuite/ld-elf/pr22393-2b-no-sec-hdr.nd
new file mode 100644
index 0000000000..0518488872
--- /dev/null
+++ b/ld/testsuite/ld-elf/pr22393-2b-no-sec-hdr.nd
@@ -0,0 +1,3 @@
+#...
+ + U __libc_start_main
+ + U _?test
diff --git a/ld/testsuite/ld-elf/pr22393-2b-no-sec-hdr.rd b/ld/testsuite/ld-elf/pr22393-2b-no-sec-hdr.rd
new file mode 100644
index 0000000000..5287139af7
--- /dev/null
+++ b/ld/testsuite/ld-elf/pr22393-2b-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/pr22393-2b-static-no-sec-hdr.rd b/ld/testsuite/ld-elf/pr22393-2b-static-no-sec-hdr.rd
new file mode 100644
index 0000000000..92b1dc9ead
--- /dev/null
+++ b/ld/testsuite/ld-elf/pr22393-2b-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/start-noheader.rd b/ld/testsuite/ld-elf/start-noheader.rd
new file mode 100644
index 0000000000..2479e34087
--- /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 0000000000..3397a576ba
--- /dev/null
+++ b/ld/testsuite/ld-elf/start-shared-noheader-gnu.rd
@@ -0,0 +1,22 @@
+#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 0000000000..23a87f98bc
--- /dev/null
+++ b/ld/testsuite/ld-elf/start-shared-noheader-sysv.rd
@@ -0,0 +1,22 @@
+#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 0000000000..2d3ba70e53
--- /dev/null
+++ b/ld/testsuite/ld-elf/start-shared-noheader.nd
@@ -0,0 +1,5 @@
+[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
-- 
2.24.1




More information about the Binutils mailing list