From fe9edd22759e68387d4617742f1373fbf5a66c62 Mon Sep 17 00:00:00 2001 From: Ian Lance Taylor Date: Mon, 9 Aug 1999 06:14:09 +0000 Subject: From Wally Iimura : * ldlang.c (lang_size_sections): When checking whether an address is within a region, don't get confused by wrapping around at the end of the address space. --- ld/ChangeLog | 7 +++++++ ld/ldlang.c | 18 +++++++++++++----- 2 files changed, 20 insertions(+), 5 deletions(-) diff --git a/ld/ChangeLog b/ld/ChangeLog index 5d80834..8f68eff 100644 --- a/ld/ChangeLog +++ b/ld/ChangeLog @@ -1,3 +1,10 @@ +1999-08-09 Ian Lance Taylor + + From Wally Iimura : + * ldlang.c (lang_size_sections): When checking whether an address + is within a region, don't get confused by wrapping around at the + end of the address space. + 1999-08-08 Ian Lance Taylor * ldlang.c (wild_doit): Update for renaming of SEC_SHORT to diff --git a/ld/ldlang.c b/ld/ldlang.c index c447f6d..acdd31f 100644 --- a/ld/ldlang.c +++ b/ld/ldlang.c @@ -2740,14 +2740,22 @@ lang_size_sections (s, output_section_statement, prev, fill, dot, relax) overall size in memory. */ if (os->region != (lang_memory_region_type *) NULL && (bfd_get_section_flags (output_bfd, os->bfd_section) - & (SEC_ALLOC | SEC_LOAD))) + & (SEC_ALLOC | SEC_LOAD))) { os->region->current = dot; - /* Make sure this isn't silly. */ - if (os->region->current < os->region->origin - || (os->region->current - os->region->origin - > os->region->length)) + /* Make sure the new address is within the region. We + explicitly permit the current address to be at the + exact end of the region when the VMA is non-zero, + in case the region is at the end of addressable + memory and the calculation wraps around. */ + if ((os->region->current < os->region->origin + || (os->region->current - os->region->origin + > os->region->length)) + && ((os->region->current + != os->region->origin + os->region->length) + || os->bfd_section->vma == 0)) + { if (os->addr_tree != (etree_type *) NULL) { -- cgit v1.1