[PATCH] hppa*-*-hpux*: Fix objcopy --reverse-bytes on SOM target

John David Anglin dave.anglin@bell.net
Mon Aug 24 21:00:32 GMT 2020


The enclosed change fixes three issues with objcopy --reverse-bytes test on the hppa SOM target:

1) Because the section names returned by get_standard_section_names are already quoted, the current
code double quotes dollar signs in places.  This breaks the generated command line.  The change to
utils-lib.exp removes existing quotes before quoting.  This fixes the command line for the objcopy
--reverse-bytes test.

2) Once the command line is fixed, objcopy generates a segmentation fault running the reverse bytes
test.  This is because the hppa SOM target has spaces and subspaces instead of ELF sections.  It is
necessary to specify both the containing space ($PRIVATE$) and the subspace ($DATA) when one wants
to copy a subspace (section).  The change to som.c generates an error message when a subspace is
specified without its containing space.  Couldn't figure out a way to copy the space automatically.

3) Finally, I modified objcopy.exp to add the containing space in the reversed bytes command.

This fixes binutils/26356.

Okay?

Regards,
Dave Anglin

2020-08-24  John David Anglin  <danglin@gcc.gnu.org>

	PR binutils/26356
	* som.c (som_bfd_copy_private_section_data): Issue error when a
	subspace is specified without its containing space.
	* testsuite/binutils-all/objcopy.exp (objcopy --reverse-bytes): Add
	"-j $PRIVATE$" to command on hppa*-*-hpux*.
	* testsuite/lib/utils-lib.exp (default_binutils_run): Remove existing
	dollar-sign quotes before quoting.  Do this prior to generating log
	output.

diff --git a/bfd/som.c b/bfd/som.c
index 887d9b187e..25f7c8b5cc 100644
--- a/bfd/som.c
+++ b/bfd/som.c
@@ -5451,8 +5451,18 @@ som_bfd_copy_private_section_data (bfd *ibfd,

   /* Reparent if necessary.  */
   if (som_section_data (osection)->copy_data->container)
-    som_section_data (osection)->copy_data->container =
-      som_section_data (osection)->copy_data->container->output_section;
+    {
+      if (som_section_data (osection)->copy_data->container->output_section)
+	som_section_data (osection)->copy_data->container =
+	  som_section_data (osection)->copy_data->container->output_section;
+      else
+	{
+	  /* User has specified a subspace without its containing space.  */
+	  _bfd_error_handler (_("%pB[%pA]: no output section for space %pA"),
+	    obfd, osection, som_section_data (osection)->copy_data->container);
+	  return FALSE;
+	}
+    }

   return TRUE;
 }
diff --git a/binutils/testsuite/binutils-all/objcopy.exp b/binutils/testsuite/binutils-all/objcopy.exp
index f857003e33..9877f3d310 100644
--- a/binutils/testsuite/binutils-all/objcopy.exp
+++ b/binutils/testsuite/binutils-all/objcopy.exp
@@ -170,7 +170,11 @@ if { [file exists $tempfile] } {
     set reversed ${tempfile}-reversed
     set sect_names [get_standard_section_names]
     if { $sect_names != "" } {
-	set got [binutils_run $OBJCOPY "$OBJCOPYFLAGS -j [lindex $sect_names 1] --reverse-bytes=4 $tempfile $reversed"]
+	if { [istarget hppa*-*-hpux*] } {
+	    set got [binutils_run $OBJCOPY "$OBJCOPYFLAGS -j \$PRIVATE\$ -j [lindex $sect_names 1] --reverse-bytes=4 $tempfile $reversed"]
+	} else {
+	    set got [binutils_run $OBJCOPY "$OBJCOPYFLAGS -j [lindex $sect_names 1] --reverse-bytes=4 $tempfile $reversed"]
+	}
     } else {
 	set got [binutils_run $OBJCOPY "$OBJCOPYFLAGS -j .data --reverse-bytes=4 $tempfile $reversed"]
     }
@@ -191,10 +195,6 @@ if { [file exists $tempfile] } {
 	set found_rev [regexp -lineanchor $want $revdata -> revdata]

 	if {$found_orig == 0 || $found_rev == 0} then {
-	    # som doesn't have a .data section
-	    setup_xfail "hppa*-*-hpux*"
-	    clear_xfail "hppa*64*-*-hpux*"
-
 	    fail "objcopy --reverse-bytes"
 	} else {
 	    scan $origdata "%2x%2x%2x%2x" b1 b2 b3 b4
diff --git a/binutils/testsuite/lib/utils-lib.exp b/binutils/testsuite/lib/utils-lib.exp
index 1bb5e616e4..5a5a89d414 100644
--- a/binutils/testsuite/lib/utils-lib.exp
+++ b/binutils/testsuite/lib/utils-lib.exp
@@ -80,13 +80,16 @@ proc default_binutils_run { prog progargs } {
         regsub -- "-j \\.bss"  $progargs "-j [lindex $sect_names 2]" progargs
     }

+    # Gotta quote dollar-signs because they get mangled by the
+    # shell otherwise.  Since get_standard_section_names returns
+    # quoted section names, we first remove the original quote
+    # and then requote.
+    regsub -all "\\\\\\$" "$progargs" "$" progargs
+    regsub -all "\\\$" "$progargs" "\\$" progargs
+
     send_log "$prog $progargs\n"
     verbose "$prog $progargs"

-    # Gotta quote dollar-signs because they get mangled by the
-    # shell otherwise.
-    regsub -all "\\$" "$progargs" "\\$" progargs
-
     set state [remote_exec host $prog $progargs]
     set binutils_run_status [lindex $state 0]
     set exec_output [prune_warnings [lindex $state 1]]


More information about the Binutils mailing list