Hello,

I noticed that GNU strip produced invalid binaries on SPARC 64, the reason is 
that bfd/elf64-sparc.c was not updated in 
https://sourceware.org/bugzilla/show_bug.cgi?id=19938 issue.

The attached patch just follows Nick Clifton's changes for other architectures.

Note that .SUNW_symtabsort, .SUNW_symtabnsort, and .SUNW_symtlssort sections 
refer to .symtab section, therefore, if .symtab is removed, theses sections 
should be skipped in copy as well. However, I am not sure how to properly 
implement it, maybe use handle_remove_section_option if the number of symbols 
is zero?

$ gstrip ./hello
gstrip: ./stxsKVxc: failed to find link section for section 27
gstrip: ./stxsKVxc: failed to find link section for section 27
gstrip: ./stxsKVxc: failed to find link section for section 28
gstrip: ./stxsKVxc: failed to find link section for section 28
$ gstrip -R .SUNW_symtabsort -R .SUNW_symtabnsort hello
<empty>

Regards,
Libor
From 123ae61a418614cf00f3cfb46d0a01df42309dea Mon Sep 17 00:00:00 2001
From: Libor Bukata <libor.buk...@oracle.com>
Date: Mon, 1 Mar 2021 12:08:31 +0100
Subject: [PATCH] GNU strip fails to set sh_link and sh_info on Solaris SPARC64

The patch adds a missing elf64_sparc_copy_solaris_special_section_fields
function that enables to fill sh_link and sh_info fields in .SUNW_* sections.
Note that elf64_sparc_copy_solaris_special_section_fields is empty since
the default handling is currently sufficient for GNU strip command.

This is a followup patch of the following upstream commits:

commit 5522f910cb539905d6adfdceab208ddfa5e84557
Author: Nick Clifton <ni...@redhat.com>
Date:   Fri Apr 29 09:24:42 2016 +0100

    Enhance support for copying and stripping Solaris and ARM binaries.

commit 84865015459b4e9e8ac67f9b91617fbd856d5119
Author: Nick Clifton <ni...@redhat.com>
Date:   Thu Apr 14 12:04:09 2016 +0100

    Fix copying Solaris binaries with objcopy.

gdb/ChangeLog:

2021-03-01  Libor Bukata <libor.buk...@oracle.com>

        * bfd/elf64-sparc.c: Fix GNU strip on Solaris SPARC64.
---
 bfd/elf64-sparc.c | 20 ++++++++++++++++++++
 1 file changed, 20 insertions(+)

diff --git a/bfd/elf64-sparc.c b/bfd/elf64-sparc.c
index e162f0d53d1..1d4521dfcae 100644
--- a/bfd/elf64-sparc.c
+++ b/bfd/elf64-sparc.c
@@ -1004,4 +1004,24 @@ const struct elf_size_info elf64_sparc_size_info =
 #undef elf_backend_static_tls_alignment
 #define elf_backend_static_tls_alignment	16
 
+#undef  elf_backend_strtab_flags
+#define elf_backend_strtab_flags       SHF_STRINGS
+
+static bfd_boolean
+elf64_sparc_copy_solaris_special_section_fields (const bfd *ibfd ATTRIBUTE_UNUSED,
+                                  bfd *obfd ATTRIBUTE_UNUSED,
+                                  const Elf_Internal_Shdr *isection ATTRIBUTE_UNUSED,
+                                  Elf_Internal_Shdr *osection ATTRIBUTE_UNUSED)
+{
+  /* PR 19938: FIXME: Need to add code for setting the sh_info
+     and sh_link fields of Solaris specific section types.  */
+  return FALSE;
+}
+
+#undef  elf_backend_copy_special_section_fields
+#define elf_backend_copy_special_section_fields elf64_sparc_copy_solaris_special_section_fields
+
 #include "elf64-target.h"
+
+#undef  elf_backend_strtab_flags
+#undef  elf_backend_copy_special_section_fields
-- 
2.26.2

Reply via email to