From 360d244b24e84c50f2c6054908cfafb370a1f13c Mon Sep 17 00:00:00 2001 From: "H.J. Lu" Date: Thu, 4 Apr 2024 06:52:27 -0700 Subject: 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. --- bfd/libbfd.c | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/bfd/libbfd.c b/bfd/libbfd.c index 869f0ed..5126ee2 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 -- cgit v1.1