Renaming .debug to .zdebug and vice versa
authorAlan Modra <amodra@gmail.com>
Sun, 4 Dec 2022 01:59:19 +0000 (12:29 +1030)
committerAlan Modra <amodra@gmail.com>
Sun, 4 Dec 2022 02:21:46 +0000 (12:51 +1030)
Move a couple of elf.c functions to compress.c.

* compress.c (bfd_debug_name_to_zdebug): New inline function.
(bfd_zdebug_name_to_debug): Likewise.
* elf.c (convert_debug_to_zdebug, convert_zdebug_to_debug): Delete.
(_bfd_elf_make_section_from_shdr, elf_fake_sections),
(_bfd_elf_assign_file_positions_for_non_load): Adjust to suit.
* coffgen.c (make_a_section_from_file): Use new inlines here.

bfd/bfd-in2.h
bfd/coffgen.c
bfd/compress.c
bfd/elf.c

index 0b071dda1e581c113ed1d4a37bfdabda147edcdb..48451175364869e94aa8b5c81a733bef9db4463b 100644 (file)
@@ -7963,6 +7963,31 @@ bfd_byte *bfd_simple_get_relocated_section_contents
    (bfd *abfd, asection *sec, bfd_byte *outbuf, asymbol **symbol_table);
 
 /* Extracted from compress.c.  */
+static inline char *
+bfd_debug_name_to_zdebug (bfd *abfd, const char *name)
+{
+  size_t len = strlen (name);
+  char *new_name = bfd_alloc (abfd, len + 2);
+  if (new_name == NULL)
+    return NULL;
+  new_name[0] = '.';
+  new_name[1] = 'z';
+  memcpy (new_name + 2, name + 1, len);
+  return new_name;
+}
+
+static inline char *
+bfd_zdebug_name_to_debug (bfd *abfd, const char *name)
+{
+  size_t len = strlen (name);
+  char *new_name = bfd_alloc (abfd, len);
+  if (new_name == NULL)
+    return NULL;
+  new_name[0] = '.';
+  memcpy (new_name + 1, name + 2, len - 1);
+  return new_name;
+}
+
 bool bfd_get_full_section_contents
    (bfd *abfd, asection *section, bfd_byte **ptr);
 
index aab41c34ec79ec9d5eb7ffb461c67809b402c178..f2c71b19880bc5d85e3775258442c45690af94e7 100644 (file)
@@ -181,19 +181,12 @@ make_a_section_from_file (bfd *abfd,
                 abfd, name);
              return false;
            }
-         if (return_section->compress_status == COMPRESS_SECTION_DONE)
+         if (return_section->compress_status == COMPRESS_SECTION_DONE
+             && name[1] != 'z')
            {
-             if (name[1] != 'z')
-               {
-                 unsigned int len = strlen (name);
-
-                 new_name = bfd_alloc (abfd, len + 2);
-                 if (new_name == NULL)
-                   return false;
-                 new_name[0] = '.';
-                 new_name[1] = 'z';
-                 memcpy (new_name + 2, name + 1, len);
-               }
+             new_name = bfd_debug_name_to_zdebug (abfd, name);
+             if (new_name == NULL)
+               return false;
            }
         break;
        case decompress:
@@ -207,13 +200,9 @@ make_a_section_from_file (bfd *abfd,
            }
          if (name[1] == 'z')
            {
-             unsigned int len = strlen (name);
-
-             new_name = bfd_alloc (abfd, len);
+             new_name = bfd_zdebug_name_to_debug (abfd, name);
              if (new_name == NULL)
                return false;
-             new_name[0] = '.';
-             memcpy (new_name + 1, name + 2, len - 1);
            }
          break;
        }
index ad3feeafc6c9efd4faea1af0d1796e496f2cd1f3..95579847cf3da019084b6985eff77e77471aba26 100644 (file)
 
 #define MAX_COMPRESSION_HEADER_SIZE 24
 
+/*
+CODE_FRAGMENT
+.static inline char *
+.bfd_debug_name_to_zdebug (bfd *abfd, const char *name)
+.{
+.  size_t len = strlen (name);
+.  char *new_name = bfd_alloc (abfd, len + 2);
+.  if (new_name == NULL)
+.    return NULL;
+.  new_name[0] = '.';
+.  new_name[1] = 'z';
+.  memcpy (new_name + 2, name + 1, len);
+.  return new_name;
+.}
+.
+.static inline char *
+.bfd_zdebug_name_to_debug (bfd *abfd, const char *name)
+.{
+.  size_t len = strlen (name);
+.  char *new_name = bfd_alloc (abfd, len);
+.  if (new_name == NULL)
+.    return NULL;
+.  new_name[0] = '.';
+.  memcpy (new_name + 1, name + 2, len - 1);
+.  return new_name;
+.}
+.
+*/
+
 static bool
 decompress_contents (bool is_zstd, bfd_byte *compressed_buffer,
                     bfd_size_type compressed_size,
index 87ec1623313aafb937e8520f1d5555826033f124..9e490c968c1f726715d31b1fb40ebbad51f991f2 100644 (file)
--- a/bfd/elf.c
+++ b/bfd/elf.c
@@ -968,31 +968,6 @@ bfd_elf_group_name (bfd *abfd ATTRIBUTE_UNUSED, const asection *sec)
   return NULL;
 }
 
-static char *
-convert_debug_to_zdebug (bfd *abfd, const char *name)
-{
-  unsigned int len = strlen (name);
-  char *new_name = bfd_alloc (abfd, len + 2);
-  if (new_name == NULL)
-    return NULL;
-  new_name[0] = '.';
-  new_name[1] = 'z';
-  memcpy (new_name + 2, name + 1, len);
-  return new_name;
-}
-
-static char *
-convert_zdebug_to_debug (bfd *abfd, const char *name)
-{
-  unsigned int len = strlen (name);
-  char *new_name = bfd_alloc (abfd, len);
-  if (new_name == NULL)
-    return NULL;
-  new_name[0] = '.';
-  memcpy (new_name + 1, name + 2, len - 1);
-  return new_name;
-}
-
 /* This a copy of lto_section defined in GCC (lto-streamer.h).  */
 
 struct lto_section
@@ -1285,7 +1260,7 @@ _bfd_elf_make_section_from_shdr (bfd *abfd,
                  /* Convert section name from .zdebug_* to .debug_* so
                     that linker will consider this section as a debug
                     section.  */
-                 char *new_name = convert_zdebug_to_debug (abfd, name);
+                 char *new_name = bfd_zdebug_name_to_debug (abfd, name);
                  if (new_name == NULL)
                    return false;
                  bfd_rename_section (newsect, new_name);
@@ -3233,7 +3208,7 @@ elf_fake_sections (bfd *abfd, asection *asect, void *fsarg)
             needed.  */
          if (name[1] == 'z')
            {
-             char *new_name = convert_zdebug_to_debug (abfd, name);
+             char *new_name = bfd_zdebug_name_to_debug (abfd, name);
              if (new_name == NULL)
                {
                  arg->failed = true;
@@ -3249,7 +3224,7 @@ elf_fake_sections (bfd *abfd, asection *asect, void *fsarg)
             section smaller.  So only rename the section when
             compression has actually taken place.  If input section
             name is .zdebug_*, we should never compress it again.  */
-         char *new_name = convert_debug_to_zdebug (abfd, name);
+         char *new_name = bfd_debug_name_to_zdebug (abfd, name);
          if (new_name == NULL)
            {
              arg->failed = true;
@@ -6729,8 +6704,7 @@ _bfd_elf_assign_file_positions_for_non_load (bfd *abfd)
                    {
                      /* If section is compressed with zlib-gnu, convert
                         section name from .debug_* to .zdebug_*.  */
-                     char *new_name
-                       = convert_debug_to_zdebug (abfd, name);
+                     char *new_name = bfd_debug_name_to_zdebug (abfd, name);
                      if (new_name == NULL)
                        return false;
                      name = new_name;