aboutsummaryrefslogtreecommitdiff
path: root/binutils
diff options
context:
space:
mode:
authorH.J. Lu <hjl.tools@gmail.com>2025-07-30 20:34:46 -0700
committerH.J. Lu <hjl.tools@gmail.com>2025-07-31 06:16:04 -0700
commit3ac83564eb3c858eb1add02b6e86b5628e4abd78 (patch)
tree1e9106b2f0e0a16bff57a96ecd07e58a54aae55f /binutils
parentc7c272f06d2d456d1d99762325fd0dd7db31d540 (diff)
downloadbinutils-3ac83564eb3c858eb1add02b6e86b5628e4abd78.zip
binutils-3ac83564eb3c858eb1add02b6e86b5628e4abd78.tar.gz
binutils-3ac83564eb3c858eb1add02b6e86b5628e4abd78.tar.bz2
strip: Treat "default" output_target as unspecified
Treat output target as unspecified if it is set to "default". binutils/ PR binutils/33230 * objcopy.c (copy_file): Treat "default" output_target as unspecified. binutils/testsuite/ PR binutils/33230 * binutils-all/x86-64/x86-64.exp (run_pr33230_test): New. Run binutils/33230 tests with readelf if supported. Signed-off-by: H.J. Lu <hjl.tools@gmail.com>
Diffstat (limited to 'binutils')
-rw-r--r--binutils/objcopy.c6
-rw-r--r--binutils/testsuite/binutils-all/x86-64/x86-64.exp76
2 files changed, 60 insertions, 22 deletions
diff --git a/binutils/objcopy.c b/binutils/objcopy.c
index e90117a..5774711 100644
--- a/binutils/objcopy.c
+++ b/binutils/objcopy.c
@@ -3953,7 +3953,8 @@ copy_file (const char *input_filename, const char *output_filename, int ofd,
/* bfd_get_target does not return the correct value until
bfd_check_format succeeds. */
- if (output_target == NULL)
+ if (output_target == NULL
+ || strcmp (output_target, "default") == 0)
{
output_target = bfd_get_target (ibfd);
force_output_target = false;
@@ -4008,7 +4009,8 @@ copy_file (const char *input_filename, const char *output_filename, int ofd,
/* bfd_get_target does not return the correct value until
bfd_check_format succeeds. */
- if (output_target == NULL)
+ if (output_target == NULL
+ || strcmp (output_target, "default") == 0)
output_target = bfd_get_target (ibfd);
if (ofd >= 0)
diff --git a/binutils/testsuite/binutils-all/x86-64/x86-64.exp b/binutils/testsuite/binutils-all/x86-64/x86-64.exp
index a3fe6b1..6d1b308 100644
--- a/binutils/testsuite/binutils-all/x86-64/x86-64.exp
+++ b/binutils/testsuite/binutils-all/x86-64/x86-64.exp
@@ -255,6 +255,56 @@ run_pr33198_test "-fat" "-R .gnu.lto_* -R .gnu.debuglto_* -R .llvm.lto -N __gnu_
run_pr33198_test "" "-R .llvm.lto"
run_pr33198_test "-fat" "-R .llvm.lto"
+proc run_pr33230_test { testname obj strip_flags run_readelf } {
+ global srcdir
+ global subdir
+ global READELF
+ global STRIP
+
+ append strip_flags " --strip-debug"
+ append testname " ($strip_flags)"
+
+ set cmd "$STRIP $strip_flags $obj -o ${obj}.strip"
+ send_log "$cmd\n"
+ verbose "$cmd" 1
+ catch "exec $cmd" got
+ if { $run_readelf == "yes" } {
+ if ![string match "" $got] then {
+ send_log "$got\n"
+ verbose "$got" 1
+ fail "$testname (${obj})"
+ return
+ }
+ set cmd "$READELF -h $obj"
+ send_log "$cmd\n"
+ verbose "$cmd" 1
+ catch "exec $cmd" got
+ if { ![regexp "Machine: +AArch64" $got] } then {
+ send_log "$got\n"
+ verbose "$got" 1
+ fail "$testname (${obj})"
+ return
+ }
+ set cmd "$READELF -h ${obj}.strip"
+ send_log "$cmd\n"
+ verbose "$cmd" 1
+ catch "exec $cmd" got
+ if { ![regexp "Machine: +AArch64" $got] } then {
+ send_log "$got\n"
+ verbose "$got" 1
+ fail "$testname (${obj}.strip)"
+ return
+ }
+ } elseif { ![regexp "Unable to recognise the format" $got] } then {
+ send_log "$got\n"
+ verbose "$got" 1
+ fail "$testname"
+ return
+ }
+
+ pass "$testname"
+}
+
set t $srcdir/$subdir/pr33230.obj.bz2
# We need to strip the ".bz2", but can leave the dirname.
set test $subdir/[file tail $t]
@@ -264,26 +314,12 @@ set obj tmpdir/pr33230.o
if {[catch "system \"bzip2 -dc $t > $obj\""] != 0} {
untested "bzip2 -dc ($testname)"
} else {
- set cmd "$STRIP $obj -o ${obj}.strip"
- send_log "$cmd\n"
- verbose "$cmd" 1
- catch "exec $cmd" got
- if [regexp "Unable to recognise the format" $got] then {
- pass "$testname"
- } else {
- send_log "$got\n"
- verbose "$got" 1
- fail "$testname"
- }
- set cmd "$STRIP --input-target=default $obj -o ${obj}.strip"
- send_log "$cmd\n"
- verbose "$cmd" 1
- catch "exec $cmd" got
- if [regexp "Unable to recognise the format" $got] then {
- pass "$testname"
+ catch "exec $STRIP --help" got
+ if { [regexp "elf64-littleaarch64" $got] } {
+ set run_readelf "yes"
} else {
- send_log "$got\n"
- verbose "$got" 1
- fail "$testname (--input-target=default)"
+ set run_readelf "no"
}
+ run_pr33230_test "$testname" $obj "" $run_readelf
+ run_pr33230_test "$testname" $obj "--input-target=default" $run_readelf
}