From 77ae44b0d39284201a63877b175d5ac622fe9b60 Mon Sep 17 00:00:00 2001 From: Alan Modra Date: Mon, 11 May 2009 09:40:52 +0000 Subject: [PATCH] * 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. --- bfd/ChangeLog | 7 +++++++ bfd/elf32-spu.c | 14 ++++++++++++-- 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 5e2b41146c..2e0759a2d7 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,10 @@ +2009-05-11 Ulrich Weigand + + * 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. + 2009-05-11 Masaki Muranaka * elf32-bfin.c (bfin_bfd_reloc_type_lookup): Remove unnecessary 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 -- 2.34.1