+2007-04-18 Alan Modra <amodra@bigpond.net.au>
+
+ * ldlang.h (enum section_type): Add overlay_section.
+ * ldlang.c (lang_add_section): Handle flags for overlay_section
+ as per normal_section.
+ (lang_size_sections_1): When setting lma, detect overlays by
+ os->sectype rather than by looking for overlapping vmas.
+ (lang_enter_overlay_section): Use overlay_section type.
+ (lang_leave_overlay): Set first overlay section to normal.
+
2007-04-14 Steve Ellcey <sje@cup.hp.com>
* Makefile.am: Add ACLOCAL_AMFLAGS.
switch (output->sectype)
{
case normal_section:
+ case overlay_section:
break;
case noalloc_section:
flags &= ~SEC_ALLOC;
}
else
{
- /* If the current vma overlaps the previous section,
- then set the current lma to that at the end of
- the previous section. The previous section was
- probably an overlay. */
- if ((dot >= last->vma
- && dot < last->vma + last->size)
- || (last->vma >= dot
- && last->vma < dot + os->bfd_section->size))
+ /* If this is an overlay, set the current lma to that
+ at the end of the previous section. */
+ if (os->sectype == overlay_section)
lma = last->lma + last->size;
/* Otherwise, keep the same lma to vma relationship
struct overlay_list *n;
etree_type *size;
- lang_enter_output_section_statement (name, overlay_vma, normal_section,
+ lang_enter_output_section_statement (name, overlay_vma, overlay_section,
0, overlay_subalign, 0, 0);
/* If this is the first section, then base the VMA of future
The base address is not needed (and should be null) if
an LMA region was specified. */
if (l->next == 0)
- l->os->load_base = lma_expr;
+ {
+ l->os->load_base = lma_expr;
+ l->os->sectype = normal_section;
+ }
if (phdrs != NULL && l->os->phdrs == NULL)
l->os->phdrs = phdrs;