aboutsummaryrefslogtreecommitdiff
path: root/bfd/elf.c
diff options
context:
space:
mode:
authorNick Clifton <nickc@redhat.com>2008-07-22 11:19:01 +0000
committerNick Clifton <nickc@redhat.com>2008-07-22 11:19:01 +0000
commit39948a609d7a459fbf1872bcc3a656929f5b6798 (patch)
tree191505dd60a50d8b984917182d19a2894867d148 /bfd/elf.c
parent570de99165f5eb094f2b2a0ba84bae3fd53032ee (diff)
downloadgdb-39948a609d7a459fbf1872bcc3a656929f5b6798.zip
gdb-39948a609d7a459fbf1872bcc3a656929f5b6798.tar.gz
gdb-39948a609d7a459fbf1872bcc3a656929f5b6798.tar.bz2
* elf.c (_bfd_elf_map_sections_to_segments): Allow sections in
adjoining pages to be included in the same segment.
Diffstat (limited to 'bfd/elf.c')
-rw-r--r--bfd/elf.c11
1 files changed, 9 insertions, 2 deletions
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. */