From: Alan Modra <amodra@sourceware.org>
To: binutils-cvs@sourceware.org
Subject: [binutils-gdb] Memory corruption with USE_MMAP
Date: Thu, 4 Apr 2024 04:30:09 +0000 (GMT) [thread overview]
Message-ID: <20240404043009.5C0253858C32@sourceware.org> (raw)
https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=b43b352837ea11af64ea83754b06f0e8d335706e
commit b43b352837ea11af64ea83754b06f0e8d335706e
Author: Alan Modra <amodra@gmail.com>
Date: Thu Apr 4 14:39:14 2024 +1030
Memory corruption with USE_MMAP
mips64-linux-gnuabi64 +FAIL: GOT page 4 (two files)
mipsel-linux-gnu +FAIL: GOT page 4 (two files)
mipsisa32el-linux-gnu +FAIL: GOT page 4 (two files)
mips-linux-gnu +FAIL: GOT page 4 (two files)
powerpc64-freebsd +FAIL: relocatable relaxing large
powerpc64le-linux-gnu +FAIL: relocatable relaxing large
powerpc64-linux-gnu +FAIL: relocatable relaxing large
powerpc-eabisim +FAIL: relocatable relaxing large
powerpc-eabivle +FAIL: relocatable relaxing large
powerpc-freebsd +FAIL: relocatable relaxing large
powerpcle-elf +FAIL: relocatable relaxing large
powerpc-linux-gnu +FAIL: relocatable relaxing large
* elflink.c (bfd_elf_final_link): Heed bed->use_mmap when
sizing buffers, not just USE_MMAP.
Diff:
---
bfd/elflink.c | 55 ++++++++++++++++++++++++++++++++-----------------------
1 file changed, 32 insertions(+), 23 deletions(-)
diff --git a/bfd/elflink.c b/bfd/elflink.c
index dd7ae1705b6..fa1f1273d15 100644
--- a/bfd/elflink.c
+++ b/bfd/elflink.c
@@ -12490,18 +12490,23 @@ bfd_elf_final_link (bfd *abfd, struct bfd_link_info *info)
section, so that we know the sizes of the reloc sections. We
also figure out some maximum sizes. */
#ifdef USE_MMAP
- /* Mmap is used only if section size >= the minimum mmap section
- size. The initial max_contents_size value covers all sections
- smaller than the minimum mmap section size. It may be increased
- for compressed or linker created sections or sections whose
- rawsize != size. max_external_reloc_size covers all relocation
- sections smaller than the minimum mmap section size. */
- max_contents_size = _bfd_minimum_mmap_size;
- max_external_reloc_size = _bfd_minimum_mmap_size;
-#else
- max_contents_size = 0;
- max_external_reloc_size = 0;
+ if (bed->use_mmap)
+ {
+ /* Mmap is used only if section size >= the minimum mmap section
+ size. The initial max_contents_size value covers all sections
+ smaller than the minimum mmap section size. It may be increased
+ for compressed or linker created sections or sections whose
+ rawsize != size. max_external_reloc_size covers all relocation
+ sections smaller than the minimum mmap section size. */
+ max_contents_size = _bfd_minimum_mmap_size;
+ max_external_reloc_size = _bfd_minimum_mmap_size;
+ }
+ else
#endif
+ {
+ max_contents_size = 0;
+ max_external_reloc_size = 0;
+ }
max_internal_reloc_count = 0;
max_sym_count = 0;
max_sym_shndx_count = 0;
@@ -12538,9 +12543,10 @@ bfd_elf_final_link (bfd *abfd, struct bfd_link_info *info)
#ifdef USE_MMAP
/* Mmap is used only on non-compressed, non-linker created
sections whose rawsize == size. */
- if (sec->compress_status != COMPRESS_SECTION_NONE
- || (sec->flags & SEC_LINKER_CREATED) != 0
- || sec->rawsize != sec->size)
+ if (!bed->use_mmap
+ || sec->compress_status != COMPRESS_SECTION_NONE
+ || (sec->flags & SEC_LINKER_CREATED) != 0
+ || sec->rawsize != sec->size)
#endif
{
if (sec->rawsize > max_contents_size)
@@ -12592,17 +12598,20 @@ bfd_elf_final_link (bfd *abfd, struct bfd_link_info *info)
if ((sec->flags & SEC_RELOC) != 0)
{
-#ifndef USE_MMAP
- size_t ext_size = 0;
+#ifdef USE_MMAP
+ if (!bed->use_mmap)
+#endif
+ {
+ size_t ext_size = 0;
- if (esdi->rel.hdr != NULL)
- ext_size = esdi->rel.hdr->sh_size;
- if (esdi->rela.hdr != NULL)
- ext_size += esdi->rela.hdr->sh_size;
+ if (esdi->rel.hdr != NULL)
+ ext_size = esdi->rel.hdr->sh_size;
+ if (esdi->rela.hdr != NULL)
+ ext_size += esdi->rela.hdr->sh_size;
- if (ext_size > max_external_reloc_size)
- max_external_reloc_size = ext_size;
-#endif
+ if (ext_size > max_external_reloc_size)
+ max_external_reloc_size = ext_size;
+ }
if (sec->reloc_count > max_internal_reloc_count)
max_internal_reloc_count = sec->reloc_count;
}
reply other threads:[~2024-04-04 4:30 UTC|newest]
Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20240404043009.5C0253858C32@sourceware.org \
--to=amodra@sourceware.org \
--cc=binutils-cvs@sourceware.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).