From 39948a609d7a459fbf1872bcc3a656929f5b6798 Mon Sep 17 00:00:00 2001 From: Nick Clifton Date: Tue, 22 Jul 2008 11:19:01 +0000 Subject: * elf.c (_bfd_elf_map_sections_to_segments): Allow sections in adjoining pages to be included in the same segment. --- bfd/elf.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) (limited to 'bfd/elf.c') diff --git a/bfd/elf.c b/bfd/elf.c index 24ab2c0..a7cc4a5 100644 --- a/bfd/elf.c +++ b/bfd/elf.c @@ -3720,8 +3720,15 @@ _bfd_elf_map_sections_to_segments (bfd *abfd, struct bfd_link_info *info) segment. */ new_segment = TRUE; } - else if (BFD_ALIGN (last_hdr->lma + last_size, maxpagesize) - < BFD_ALIGN (hdr->lma, maxpagesize)) + /* In the next test we have to be careful when last_hdr->lma is close + to the end of the address space. If the aligned address wraps + around to the start of the address space, then there are no more + pages left in memory and it is OK to assume that the current + section can be included in the current segment. */ + else if ((BFD_ALIGN (last_hdr->lma + last_size, maxpagesize) + maxpagesize + > last_hdr->lma) + && (BFD_ALIGN (last_hdr->lma + last_size, maxpagesize) + maxpagesize + < hdr->lma)) { /* If putting this section in this segment would force us to skip a page in the segment, then we need a new segment. */ -- cgit v1.1