. int (*bstat) (struct bfd *abfd, struct stat *sb);
. {* Mmap a part of the files. ADDR, LEN, PROT, FLAGS and OFFSET are the usual
. mmap parameter, except that LEN and OFFSET do not need to be page
-. aligned. Returns (void *)-1 on failure, mmapped address on success.
+. aligned. Returns MAP_FAILED on failure, mmapped address on success.
. Also write in MAP_ADDR the address of the page aligned buffer and in
. MAP_LEN the size mapped (a page multiple). Use unmap with MAP_ADDR and
. MAP_LEN to unmap. *}
Return mmap()ed region of the file, if possible and implemented.
LEN and OFFSET do not need to be page aligned. The page aligned
address and length are written to MAP_ADDR and MAP_LEN.
+ Returns MAP_FAILED on failure.
*/
void **map_addr ATTRIBUTE_UNUSED,
size_t *map_len ATTRIBUTE_UNUSED)
{
- return (void *)-1;
+ return MAP_FAILED;
}
const struct bfd_iovec _bfd_memory_iovec =
/* Mmap a memory region of RSIZE bytes at the current offset.
Return mmap address and size in MAP_ADDR and MAP_SIZE. Return NULL
- on invalid input and MAP_FAILED for mmap failure. */
+ on invalid input. */
void *
_bfd_mmap_temporary (bfd *abfd, size_t rsize, void **map_addr,
size_t *map_size)
{
/* Use mmap only if section size >= the minimum mmap section size. */
- if (rsize < _bfd_minimum_mmap_size)
+ if (rsize >= _bfd_minimum_mmap_size)
{
- void *mem = _bfd_malloc_and_read (abfd, rsize, rsize);
- /* NB: Set *MAP_ADDR to MEM and *MAP_SIZE to 0 to indicate that
- _bfd_malloc_and_read is called. */
- *map_addr = mem;
- *map_size = 0;
- return mem;
+ void *result = bfd_mmap_local (abfd, rsize, map_addr, map_size);
+ if (result != MAP_FAILED)
+ return result;
}
- return bfd_mmap_local (abfd, rsize, map_addr, map_size);
+ void *mem = _bfd_malloc_and_read (abfd, rsize, rsize);
+ /* NB: Set *MAP_ADDR to MEM and *MAP_SIZE to 0 to indicate that
+ _bfd_malloc_and_read is called. */
+ *map_addr = mem;
+ *map_size = 0;
+ return mem;
}
/* Munmap RSIZE bytes at PTR. */
if (use_mmmap)
{
void *mmaped = _bfd_mmap_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;
- }
+ if (mmaped == NULL)
+ return false;
+ *data_p = mmaped;
+ return true;
}
#endif
int (*bstat) (struct bfd *abfd, struct stat *sb);
/* Mmap a part of the files. ADDR, LEN, PROT, FLAGS and OFFSET are the usual
mmap parameter, except that LEN and OFFSET do not need to be page
- aligned. Returns (void *)-1 on failure, mmapped address on success.
+ aligned. Returns MAP_FAILED on failure, mmapped address on success.
Also write in MAP_ADDR the address of the page aligned buffer and in
MAP_LEN the size mapped (a page multiple). Use unmap with MAP_ADDR and
MAP_LEN to unmap. */