PR29613, use of uninitialized value in objcopy
authorAlan Modra <amodra@gmail.com>
Mon, 26 Sep 2022 08:55:24 +0000 (18:25 +0930)
committerAlan Modra <amodra@gmail.com>
Mon, 26 Sep 2022 09:02:46 +0000 (18:32 +0930)
PR 29613
* elf.c (_bfd_elf_write_secondary_reloc_section): Trim sh_size
back to relocs written.  Use better types for vars.

bfd/elf.c

index 9a0bc1d27407bf5d6ca55d198424543b20806ae3..396b56db024b52573a6010aa0810093c55c388c7 100644 (file)
--- a/bfd/elf.c
+++ b/bfd/elf.c
@@ -13482,9 +13482,9 @@ _bfd_elf_write_secondary_reloc_section (bfd *abfd, asection *sec)
        {
          asymbol *    last_sym;
          int          last_sym_idx;
-         unsigned int reloc_count;
-         unsigned int idx;
-         unsigned int entsize;
+         size_t       reloc_count;
+         size_t       idx;
+         bfd_size_type entsize;
          arelent *    src_irel;
          bfd_byte *   dst_rela;
 
@@ -13525,7 +13525,8 @@ _bfd_elf_write_secondary_reloc_section (bfd *abfd, asection *sec)
            }
 
          reloc_count = hdr->sh_size / entsize;
-         if (reloc_count <= 0)
+         hdr->sh_size = entsize * reloc_count;
+         if (reloc_count == 0)
            {
              _bfd_error_handler
                /* xgettext:c-format */
@@ -13572,7 +13573,7 @@ _bfd_elf_write_secondary_reloc_section (bfd *abfd, asection *sec)
                {
                  _bfd_error_handler
                    /* xgettext:c-format */
-                   (_("%pB(%pA): error: reloc table entry %u is empty"),
+                   (_("%pB(%pA): error: reloc table entry %zu is empty"),
                     abfd, relsec, idx);
                  bfd_set_error (bfd_error_bad_value);
                  result = false;
@@ -13597,7 +13598,7 @@ _bfd_elf_write_secondary_reloc_section (bfd *abfd, asection *sec)
                        {
                          _bfd_error_handler
                            /* xgettext:c-format */
-                           (_("%pB(%pA): error: secondary reloc %u"
+                           (_("%pB(%pA): error: secondary reloc %zu"
                               " references a missing symbol"),
                             abfd, relsec, idx);
                          bfd_set_error (bfd_error_bad_value);
@@ -13615,7 +13616,7 @@ _bfd_elf_write_secondary_reloc_section (bfd *abfd, asection *sec)
                    {
                      _bfd_error_handler
                        /* xgettext:c-format */
-                       (_("%pB(%pA): error: secondary reloc %u"
+                       (_("%pB(%pA): error: secondary reloc %zu"
                           " references a deleted symbol"),
                         abfd, relsec, idx);
                      bfd_set_error (bfd_error_bad_value);
@@ -13629,7 +13630,7 @@ _bfd_elf_write_secondary_reloc_section (bfd *abfd, asection *sec)
                {
                  _bfd_error_handler
                    /* xgettext:c-format */
-                   (_("%pB(%pA): error: secondary reloc %u"
+                   (_("%pB(%pA): error: secondary reloc %zu"
                       " is of an unknown type"),
                     abfd, relsec, idx);
                  bfd_set_error (bfd_error_bad_value);