* [binutils-gdb] Memory corruption with USE_MMAP
@ 2024-04-04 4:30 Alan Modra
0 siblings, 0 replies; only message in thread
From: Alan Modra @ 2024-04-04 4:30 UTC (permalink / raw)
To: binutils-cvs
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;
}
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2024-04-04 4:30 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-04-04 4:30 [binutils-gdb] Memory corruption with USE_MMAP Alan Modra
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).