From: H.J. Lu Date: Thu, 4 Apr 2024 13:52:27 +0000 (-0700) Subject: bfd: Handle bmmap failure in _bfd_mmap_read_temporary X-Git-Tag: gdb-15-branchpoint~487 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=360d244b24e84c50f2c6054908cfafb370a1f13c;p=thirdparty%2Fbinutils-gdb.git bfd: Handle bmmap failure in _bfd_mmap_read_temporary iovec->bmmap may return MAP_FAILED, which happens in GDB on objects with iovec == opncls_iovec. Update _bfd_mmap_read_temporary to handle iovec->bmmap failure. * libbfd.c (_bfd_mmap_read_temporary): Handle iovec->bmmap failure. --- diff --git a/bfd/libbfd.c b/bfd/libbfd.c index 869f0ed5c66..5126ee207a8 100644 --- a/bfd/libbfd.c +++ b/bfd/libbfd.c @@ -1205,12 +1205,18 @@ _bfd_mmap_read_temporary (void **data_p, size_t *size_p, && (abfd->flags & BFD_PLUGIN) == 0); if (use_mmmap) { - data = _bfd_mmap_readonly_temporary (abfd, size, mmap_base, - size_p); - if (data == NULL || data == MAP_FAILED) - abort (); - *data_p = data; - return true; + void *mmaped = _bfd_mmap_readonly_temporary (abfd, size, + mmap_base, + size_p); + /* MAP_FAILED is returned when called from GDB on an object with + opncls_iovec. Use bfd_read in this case. */ + if (mmaped != MAP_FAILED) + { + if (mmaped == NULL) + abort (); + *data_p = mmaped; + return true; + } } #endif