From: Alan Modra Date: Wed, 21 Sep 2022 10:04:08 +0000 (+0930) Subject: PR29566, objdump -p considers an empty .gnu.version_r invalid X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=f9a59eea78428159a9522bd64ec354a872f1dc31;p=binutils-gdb.git PR29566, objdump -p considers an empty .gnu.version_r invalid Allow and ignore an empty section. PR 29566 * elf.c (bfd_section_from_shdr): Don't set elf_dynverdef or elf_dynverref for empty sections. (_bfd_elf_slurp_version_tables): Remove now redundant tests. --- diff --git a/bfd/elf.c b/bfd/elf.c index 2eb2a97370a..bc433cf516c 100644 --- a/bfd/elf.c +++ b/bfd/elf.c @@ -2479,7 +2479,8 @@ bfd_section_from_shdr (bfd *abfd, unsigned int shindex) } case SHT_GNU_verdef: - elf_dynverdef (abfd) = shindex; + if (hdr->sh_info != 0) + elf_dynverdef (abfd) = shindex; elf_tdata (abfd)->dynverdef_hdr = *hdr; ret = _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex); goto success; @@ -2494,7 +2495,8 @@ bfd_section_from_shdr (bfd *abfd, unsigned int shindex) goto success; case SHT_GNU_verneed: - elf_dynverref (abfd) = shindex; + if (hdr->sh_info != 0) + elf_dynverref (abfd) = shindex; elf_tdata (abfd)->dynverref_hdr = *hdr; ret = _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex); goto success; @@ -8877,8 +8879,7 @@ _bfd_elf_slurp_version_tables (bfd *abfd, bool default_imported_symver) hdr = &elf_tdata (abfd)->dynverref_hdr; - if (hdr->sh_info == 0 - || hdr->sh_info > hdr->sh_size / sizeof (Elf_External_Verneed)) + if (hdr->sh_info > hdr->sh_size / sizeof (Elf_External_Verneed)) { error_return_bad_verref: _bfd_error_handler @@ -9011,7 +9012,7 @@ _bfd_elf_slurp_version_tables (bfd *abfd, bool default_imported_symver) hdr = &elf_tdata (abfd)->dynverdef_hdr; - if (hdr->sh_info == 0 || hdr->sh_size < sizeof (Elf_External_Verdef)) + if (hdr->sh_size < sizeof (Elf_External_Verdef)) { error_return_bad_verdef: _bfd_error_handler