diff options
author | Alan Modra <amodra@gmail.com> | 2007-04-18 03:55:10 +0000 |
---|---|---|
committer | Alan Modra <amodra@gmail.com> | 2007-04-18 03:55:10 +0000 |
commit | 152d792f471303cf361c7c5dd5bba2d5dcc3e727 (patch) | |
tree | 7f57895fca6d263f1e28d73eca4ffe89d3bd0519 /ld/ldlang.c | |
parent | 4904bbd9d14123e56b89b97fb563012257ca9607 (diff) | |
download | gdb-152d792f471303cf361c7c5dd5bba2d5dcc3e727.zip gdb-152d792f471303cf361c7c5dd5bba2d5dcc3e727.tar.gz gdb-152d792f471303cf361c7c5dd5bba2d5dcc3e727.tar.bz2 |
ld/
* 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.
ld/testsuite/
* ld-spu/ovl.lnk: Use OVERLAY keyword.
Diffstat (limited to 'ld/ldlang.c')
-rw-r--r-- | ld/ldlang.c | 19 |
1 files changed, 9 insertions, 10 deletions
diff --git a/ld/ldlang.c b/ld/ldlang.c index cf1a697..297df20 100644 --- a/ld/ldlang.c +++ b/ld/ldlang.c @@ -2040,6 +2040,7 @@ lang_add_section (lang_statement_list_type *ptr, switch (output->sectype) { case normal_section: + case overlay_section: break; case noalloc_section: flags &= ~SEC_ALLOC; @@ -4438,14 +4439,9 @@ lang_size_sections_1 } 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 @@ -6392,7 +6388,7 @@ lang_enter_overlay_section (const char *name) 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 @@ -6506,7 +6502,10 @@ lang_leave_overlay (etree_type *lma_expr, 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; |