summaryrefslogtreecommitdiff
path: root/bfd/elf32-spu.c
diff options
context:
space:
mode:
authorAlan Modra <amodra@bigpond.net.au>2009-05-11 09:40:52 +0000
committerAlan Modra <amodra@bigpond.net.au>2009-05-11 09:40:52 +0000
commit0cdef27f1a62e7a0e16fc75526566f5931f18904 (patch)
tree54d2bee92c11c423586819e01295eaef93bf3f58 /bfd/elf32-spu.c
parentc24731b30f468913308a52042c80492a6430bef9 (diff)
downloadbinutils-redhat-0cdef27f1a62e7a0e16fc75526566f5931f18904.tar.gz
* elf32-spu.c (spu_elf_find_overlays): Don't use .ovl.init lma as
start of overlays. (spu_elf_build_stubs): Don't define __icache_tagbase. Define __icache_tag_array and __icache_tag_array_size.
Diffstat (limited to 'bfd/elf32-spu.c')
-rw-r--r--bfd/elf32-spu.c14
1 files changed, 12 insertions, 2 deletions
diff --git a/bfd/elf32-spu.c b/bfd/elf32-spu.c
index b6952a1902..fab3139f2e 100644
--- a/bfd/elf32-spu.c
+++ b/bfd/elf32-spu.c
@@ -657,7 +657,10 @@ spu_elf_find_overlays (struct bfd_link_info *info)
{
asection *s0 = alloc_sec[i - 1];
vma_start = s0->vma;
- lma_start = s0->lma;
+ if (strncmp (s0->name, ".ovl.init", 9) != 0)
+ lma_start = s0->lma;
+ else
+ lma_start = s->lma;
ovl_end = (s0->vma
+ ((bfd_vma) 1
<< (htab->num_lines_log2 + htab->line_size_log2)));
@@ -1938,12 +1941,19 @@ spu_elf_build_stubs (struct bfd_link_info *info)
{
bfd_vma off, icache_base, linklist;
- h = define_ovtab_symbol (htab, "__icache_tagbase");
+ h = define_ovtab_symbol (htab, "__icache_tag_array");
if (h == NULL)
return FALSE;
h->root.u.def.value = 0;
h->size = 16 << htab->num_lines_log2;
off = h->size;
+
+ h = define_ovtab_symbol (htab, "__icache_tag_array_size");
+ if (h == NULL)
+ return FALSE;
+ h->root.u.def.value = 16 << htab->num_lines_log2;
+ h->root.u.def.section = bfd_abs_section_ptr;
+
icache_base = htab->ovl_sec[0]->vma;
linklist = (htab->ovtab->output_section->vma
+ htab->ovtab->output_offset