Home | History | Annotate | Download | only in bfd

Lines Matching refs:htab

440   struct spu_link_hash_table *htab;
442 htab = bfd_zmalloc (sizeof (*htab));
443 if (htab == NULL)
446 if (!_bfd_elf_link_hash_table_init (&htab->elf, abfd,
451 free (htab);
455 htab->elf.init_got_refcount.refcount = 0;
456 htab->elf.init_got_refcount.glist = NULL;
457 htab->elf.init_got_offset.offset = 0;
458 htab->elf.init_got_offset.glist = NULL;
459 return &htab->elf.root;
467 struct spu_link_hash_table *htab = spu_hash_table (info);
468 htab->params = params;
469 htab->line_size_log2 = bfd_log2 (htab->params->line_size);
470 htab->num_lines_log2 = bfd_log2 (htab->params->num_lines);
475 max_branch_log2 = bfd_log2 (htab->params->max_branch);
476 htab->fromelem_size_log2 = max_branch_log2 > 4 ? max_branch_log2 - 4 : 0;
555 struct spu_link_hash_table *htab
598 if (htab->params->emit_fixups)
603 if (htab->elf.dynobj == NULL)
604 htab->elf.dynobj = ibfd;
605 ibfd = htab->elf.dynobj;
611 htab->sfixup = s;
638 struct spu_link_hash_table *htab = spu_hash_table (info);
673 if (htab->params->ovly_flavour == ovly_soft_icache)
689 << (htab->num_lines_log2 + htab->line_size_log2)));
710 num_buf = ((s->vma - vma_start) >> htab->line_size_log2) + 1;
714 if ((s->vma - vma_start) & (htab->params->line_size - 1))
722 else if (s->size > htab->params->line_size)
733 = (set_id << htab->num_lines_log2) + num_buf;
800 htab->num_overlays = ovl_index;
801 htab->num_buf = num_buf;
802 htab->ovl_sec = alloc_sec;
812 name = entry_names[i][htab->params->ovly_flavour];
813 h = elf_link_hash_lookup (&htab->elf, name, TRUE, FALSE, FALSE);
824 htab->ovly_entry[i] = h;
931 struct spu_link_hash_table *htab = spu_hash_table (info);
946 if (h == htab->ovly_entry[0] || h == htab->ovly_entry[1])
1016 if ((!branch && htab->params->ovly_flavour == ovly_soft_icache)
1024 && !htab->params->non_overlay_stubs)
1047 && htab->params->ovly_flavour != ovly_soft_icache)
1054 count_stub (struct spu_link_hash_table *htab,
1088 if (htab->params->ovly_flavour == ovly_soft_icache)
1090 htab->stub_count[ovl] += 1;
1114 htab->stub_count[g->ovl] -= 1;
1138 htab->stub_count[ovl] += 1;
1194 struct spu_link_hash_table *htab = spu_hash_table (info);
1214 if (htab->params->ovly_flavour == ovly_soft_icache)
1243 sec = htab->stub_sec[ovl];
1247 to = (htab->ovly_entry[0]->root.u.def.value
1248 + htab->ovly_entry[0]->root.u.def.section->output_offset
1249 + htab->ovly_entry[0]->root.u.def.section->output_section->vma);
1253 htab->stub_err = 1;
1258 if (htab->params->ovly_flavour == ovly_normal
1259 && !htab->params->compact_stub)
1274 else if (htab->params->ovly_flavour == ovly_normal
1275 && htab->params->compact_stub)
1286 else if (htab->params->ovly_flavour == ovly_soft_icache
1287 && htab->params->compact_stub)
1296 else if (!htab->params->lrlive_analysis)
1369 to = (htab->ovly_entry[1]->root.u.def.value
1370 + htab->ovly_entry[1]->root.u.def.section->output_offset
1371 + htab->ovly_entry[1]->root.u.def.section->output_section->vma);
1387 set_id = ((dest_ovl - 1) >> htab->num_lines_log2) + 1;
1407 sec->size += ovl_stub_size (htab->params);
1409 if (htab->params->emit_stub_syms)
1439 h = elf_link_hash_lookup (&htab->elf, name, TRUE, TRUE, FALSE);
1447 h->size = ovl_stub_size (htab->params);
1470 struct spu_link_hash_table *htab = spu_hash_table (info);
1481 || htab->params->non_overlay_stubs))
1483 return count_stub (htab, NULL, NULL, nonovl_stub, h, NULL);
1495 struct spu_link_hash_table *htab = spu_hash_table (info);
1506 || htab->params->non_overlay_stubs))
1520 struct spu_link_hash_table *htab = spu_hash_table (info);
1597 if (htab->stub_count == NULL)
1600 amt = (htab->num_overlays + 1) * sizeof (*htab->stub_count);
1601 htab->stub_count = bfd_zmalloc (amt);
1602 if (htab->stub_count == NULL)
1608 if (!count_stub (htab, ibfd, isec, stub_type, h, irela))
1650 struct spu_link_hash_table *htab;
1660 htab = spu_hash_table (info);
1661 elf_link_hash_traverse (&htab->elf, allocate_spuear_stubs, info);
1662 if (htab->stub_err)
1666 if (htab->stub_count != NULL)
1668 amt = (htab->num_overlays + 1) * sizeof (*htab->stub_sec);
1669 htab->stub_sec = bfd_zmalloc (amt);
1670 if (htab->stub_sec == NULL)
1676 htab->stub_sec[0] = stub;
1679 ovl_stub_size_log2 (htab->params)))
1681 stub->size = htab->stub_count[0] * ovl_stub_size (htab->params);
1682 if (htab->params->ovly_flavour == ovly_soft_icache)
1684 stub->size += htab->stub_count[0] * 16;
1686 for (i = 0; i < htab->num_overlays; ++i)
1688 asection *osec = htab->ovl_sec[i];
1691 htab->stub_sec[ovl] = stub;
1694 ovl_stub_size_log2 (htab->params)))
1696 stub->size = htab->stub_count[ovl] * ovl_stub_size (htab->params);
1700 if (htab->params->ovly_flavour == ovly_soft_icache)
1709 htab->ovtab = bfd_make_section_anyway_with_flags (ibfd, ".ovtab", flags);
1710 if (htab->ovtab == NULL
1711 || !bfd_set_section_alignment (ibfd, htab->ovtab, 4))
1714 htab->ovtab->size = (16 + 16 + (16 << htab->fromelem_size_log2))
1715 << htab->num_lines_log2;
1718 htab->init = bfd_make_section_anyway_with_flags (ibfd, ".ovini", flags);
1719 if (htab->init == NULL
1720 || !bfd_set_section_alignment (ibfd, htab->init, 4))
1723 htab->init->size = 16;
1725 else if (htab->stub_count == NULL)
1729 /* htab->ovtab consists of two arrays.
1743 htab->ovtab = bfd_make_section_anyway_with_flags (ibfd, ".ovtab", flags);
1744 if (htab->ovtab == NULL
1745 || !bfd_set_section_alignment (ibfd, htab->ovtab, 4))
1748 htab->ovtab->size = htab->num_overlays * 16 + 16 + htab->num_buf * 4;
1751 htab->toe = bfd_make_section_anyway_with_flags (ibfd, ".toe", SEC_ALLOC);
1752 if (htab
1753 || !bfd_set_section_alignment (ibfd, htab->toe, 4))
1755 htab->toe->size = 16;
1762 linker's htab->init section is placed after any other .ovl.init
1768 struct spu_link_hash_table *htab = spu_hash_table (info);
1771 if (htab->stub_sec != NULL)
1773 (*htab->params->place_spu_section) (htab->stub_sec[0], NULL, ".text");
1775 for (i = 0; i < htab->num_overlays; ++i)
1777 asection *osec = htab->ovl_sec[i];
1779 (*htab->params->place_spu_section) (htab->stub_sec[ovl], osec, NULL);
1783 if (htab->params->ovly_flavour == ovly_soft_icache)
1784 (*htab->params->place_spu_section) (htab->init, NULL, ".ovl.init");
1786 if (htab->ovtab != NULL)
1789 if (htab->params->ovly_flavour == ovly_soft_icache)
1791 (*htab->params->place_spu_section) (htab->ovtab, NULL, ovout);
1794 if (htab->toe != NULL)
1795 (*htab->params->place_spu_section) (htab->toe, NULL, ".toe");
1868 define_ovtab_symbol (struct spu_link_hash_table *htab, const char *name)
1872 h = elf_link_hash_lookup (&htab->elf, name, TRUE, FALSE, FALSE);
1880 h->root.u.def.section = htab->ovtab;
1911 struct spu_link_hash_table *htab = spu_hash_table (info);
1918 if (htab->num_overlays != 0)
1922 h = htab->ovly_entry[i];
1940 if (htab->stub_sec != NULL)
1942 for (i = 0; i <= htab->num_overlays; i++)
1943 if (htab->stub_sec[i]->size != 0)
1945 htab->stub_sec[i]->contents = bfd_zalloc (htab->stub_sec[i]->owner,
1946 htab->stub_sec[i]->size);
1947 if (htab->stub_sec[i]->contents == NULL)
1949 htab->stub_sec[i]->rawsize = htab->stub_sec[i]->size;
1950 htab->stub_sec[i]->size = 0;
1955 if (!htab->stub_err)
1956 elf_link_hash_traverse (&htab->elf, build_spuear_stubs, info);
1958 if (htab->stub_err)
1965 for (i = 0; i <= htab->num_overlays; i++)
1967 if (htab->stub_sec[i]->size != htab->stub_sec[i]->rawsize)
1973 htab->stub_sec[i]->rawsize = 0;
1977 if (htab->ovtab == NULL || htab->ovtab->size == 0)
1980 htab->ovtab->contents = bfd_zalloc (htab->ovtab->owner, htab->ovtab->size);
1981 if (htab->ovtab->contents == NULL)
1984 p = htab->ovtab->contents;
1985 if (htab->params->ovly_flavour == ovly_soft_icache)
1989 h = define_ovtab_symbol (htab, "__icache_tag_array");
1993 h->size = 16 << htab->num_lines_log2;
1996 h = define_ovtab_symbol (htab, "__icache_tag_array_size");
1999 h->root.u.def.value = 16 << htab->num_lines_log2;
2002 h = define_ovtab_symbol (htab, "__icache_rewrite_to");
2006 h->size = 16 << htab->num_lines_log2;
2009 h = define_ovtab_symbol (htab, "__icache_rewrite_to_size");
2012 h->root.u.def.value = 16 << htab->num_lines_log2;
2015 h = define_ovtab_symbol (htab, "__icache_rewrite_from");
2019 h->size = 16 << (htab->fromelem_size_log2 + htab->num_lines_log2);
2022 h = define_ovtab_symbol (htab, "__icache_rewrite_from_size");
2025 h->root.u.def.value = 16 << (htab->fromelem_size_log2
2026 + htab->num_lines_log2);
2029 h = define_ovtab_symbol (htab, "__icache_log2_fromelemsize");
2032 h->root.u.def.value = htab->fromelem_size_log2;
2035 h = define_ovtab_symbol (htab, "__icache_base");
2038 h->root.u.def.value = htab->ovl_sec[0]->vma;
2040 h->size = htab->num_buf << htab->line_size_log2;
2042 h = define_ovtab_symbol (htab, "__icache_linesize");
2045 h->root.u.def.value = 1 << htab->line_size_log2;
2048 h = define_ovtab_symbol (htab, "__icache_log2_linesize");
2051 h->root.u.def.value = htab->line_size_log2;
2054 h = define_ovtab_symbol (htab, "__icache_neg_log2_linesize");
2057 h->root.u.def.value = -htab->line_size_log2;
2060 h = define_ovtab_symbol (htab, "__icache_cachesize");
2063 h->root.u.def.value = 1 << (htab->num_lines_log2 + htab->line_size_log2);
2066 h = define_ovtab_symbol (htab, "__icache_log2_cachesize");
2069 h->root.u.def.value = htab->num_lines_log2 + htab->line_size_log2;
2072 h = define_ovtab_symbol (htab, "__icache_neg_log2_cachesize");
2075 h->root.u.def.value = -(htab->num_lines_log2 + htab->line_size_log2);
2078 if (htab->init != NULL && htab->init->size != 0)
2080 htab->init->contents = bfd_zalloc (htab->init->owner,
2081 htab->init->size);
2082 if (htab->init->contents == NULL)
2085 h = define_ovtab_symbol (htab, "__icache_fileoff");
2089 h->root.u.def.section = htab->init;
2098 obfd = htab->ovtab->output_section->owner;
2108 bfd_put_32 (htab->ovtab->owner, s->vma, p + off);
2109 bfd_put_32 (htab->ovtab->owner, (s->size + 15) & -16,
2112 bfd_put_32 (htab->ovtab->owner, ovl_buf, p + off + 12);
2116 h = define_ovtab_symbol (htab, "_ovly_table");
2120 h->size = htab->num_overlays * 16;
2122 h = define_ovtab_symbol (htab, "_ovly_table_end");
2125 h->root.u.def.value = htab->num_overlays * 16 + 16;
2128 h = define_ovtab_symbol (htab, "_ovly_buf_table");
2131 h->root.u.def.value = htab->num_overlays * 16 + 16;
2132 h->size = htab->num_buf * 4;
2134 h = define_ovtab_symbol (htab, "_ovly_buf_table_end");
2137 h->root.u.def.value = htab->num_overlays * 16 + 16 + htab->num_buf * 4;
2141 h = define_ovtab_symbol (htab, "_EAR_");
2144 h->root.u.def.section = htab->toe;
2159 struct spu_link_hash_table *htab = spu_hash_table (info);
2161 bfd_vma hi = htab->params->local_store_hi;
2162 bfd_vma lo = htab->params->local_store_lo;
2164 htab->local_store = hi + 1 - lo;
3298 struct spu_link_hash_table *htab = spu_hash_table (info);
3300 if (!htab->params->auto_overlay
3301 && htab->params->stack_analysis)
3426 struct spu_link_hash_table *htab = spu_hash_table (info);
3433 && (htab->params->ovly_flavour != ovly_soft_icache
3434 || htab->params->non_ia_text
3450 if (htab->params->auto_overlay & OVERLAY_RODATA)
3502 if (htab->params->line_size != 0
3503 && size > htab->params->line_size)
3718 struct spu_link_hash_table *htab;
3750 htab = spu_hash_table (info);
3782 stub_size += ovl_stub_size (htab->params);
3800 lib_size += ovl_stub_size (htab->params);
3949 struct spu_link_hash_table *htab;
3989 htab = spu_hash_table (info);
3990 if (htab->params->auto_overlay)
3994 if (htab->params->stack_analysis)
4029 h = elf_link_hash_lookup (&htab->elf, name, TRUE, TRUE, FALSE);
4173 struct spu_link_hash_table *htab;
4207 htab = spu_hash_table (info);
4208 reserved = htab->params->auto_overlay_reserved;
4218 + htab->params->extra_stack_space);
4222 if (fixed_size + reserved <= htab->local_store
4223 && htab->params->ovly_flavour != ovly_soft_icache)
4225 htab->params->auto_overlay = 0;
4234 if (htab->params->ovly_flavour == ovly_soft_icache)
4236 h = elf_link_hash_lookup (&htab->elf, ovly_mgr_entry,
4250 fixed_size += (*htab->params->spu_elf_load_ovl_mgr) ();
4336 fixed_size += htab->non_ovly_stub * ovl_stub_size (htab->params);
4337 if (fixed_size + mos_param.max_overlay_size <= htab->local_store)
4339 if (htab->params->ovly_flavour == ovly_soft_icache)
4342 fixed_size += htab->non_ovly_stub * 16;
4346 fixed_size += 16 << htab->num_lines_log2;
4348 fixed_size += 16 << htab->num_lines_log2;
4351 fixed_size += 16 << (htab->fromelem_size_log2
4352 + htab->num_lines_log2);
4360 ovlynum = (total_overlay_size * 2 * htab->params->num_lines
4361 / (htab->local_store - fixed_size));
4367 if (fixed_size + mos_param.max_overlay_size > htab->local_store)
4374 else if (fixed_size < htab->params->auto_overlay_fixed)
4378 max_fixed = htab->local_store - mos_param.max_overlay_size;
4379 if (max_fixed > htab->params->auto_overlay_fixed)
4380 max_fixed = htab->params->auto_overlay_fixed;
4402 overlay_size = (htab->local_store - fixed_size) / htab->params->num_lines;
4403 if (htab->params->line_size != 0)
4404 overlay_size = htab->params->line_size;
4498 if (htab->params->ovly_flavour == ovly_soft_icache)
4511 if (htab->params->ovly_flavour == ovly_soft_icache
4512 && num_stubs > htab->params->max_branch)
4515 + num_stubs * ovl_stub_size (htab->params) > overlay_size)
4543 script = htab->params->spu_elf_open_overlay_script ();
4545 if (htab->params->ovly_flavour == ovly_soft_icache)
4554 htab->params->line_size) <= 0)
4564 vma = (indx & (htab->params->num_lines - 1)) << htab->line_size_log2;
4565 lma = vma + (((indx >> htab->num_lines_log2) + 1) << 18);
4584 1 << (htab->num_lines_log2 + htab->line_size_log2)) <= 0)
4601 for (region = 1; region <= htab->params->num_lines; region++)
4637 ovlynum += htab->params->num_lines;
4656 if (htab->params->auto_overlay & AUTO_RELINK)
4657 (*htab->params->spu_elf_relink) ();
4673 struct spu_link_hash_table *htab;
4682 htab = spu_hash_table (info);
4683 if (htab->params->stack_analysis)
4690 sum_stack_param.emit_stack_syms = htab->params->emit_stack_syms;
4695 if (htab->params->stack_analysis)
4706 struct spu_link_hash_table *htab = spu_hash_table (info);
4708 if (htab->params->auto_overlay)
4711 if ((htab->params->stack_analysis
4712 || (htab->params->ovly_flavour == ovly_soft_icache
4713 && htab->params->lrlive_analysis))
4758 #define FIXUP_PUT(output_bfd,htab,index,addr) \
4760 htab->sfixup->contents + FIXUP_RECORD_SIZE * (index))
4761 #define FIXUP_GET(output_bfd,htab,index) \
4763 htab->sfixup->contents + FIXUP_RECORD_SIZE * (index))
4772 struct spu_link_hash_table *htab = spu_hash_table (info);
4773 htab->sfixup;
4778 FIXUP_PUT (output_bfd, htab, 0, qaddr | bit);
4783 bfd_vma base = FIXUP_GET (output_bfd, htab, sfixup->reloc_count - 1);
4788 FIXUP_PUT (output_bfd, htab, sfixup->reloc_count, qaddr | bit);
4792 FIXUP_PUT (output_bfd, htab, sfixup->reloc_count - 1, base | bit);
4811 struct spu_link_hash_table *htab;
4819 htab = spu_hash_table (info);
4820 stubs = (htab->stub_sec != NULL
4954 if (htab->params->ovly_flavour == ovly_soft_icache
4970 if (htab->params->ovly_flavour == ovly_soft_icache
4978 unsigned int set_id = ((ovl - 1) >> htab->num_lines_log2) + 1;
4984 if (htab->params->emit_fixups && !info->relocatable
5127 struct spu_link_hash_table *htab = spu_hash_table (info);
5130 && htab->stub_sec != NULL
5140 if (htab->params->ovly_flavour == ovly_soft_icache
5145 (htab->stub_sec[0]->output_section->owner,
5146 htab->stub_sec[0]->output_section));
5189 struct spu_link_hash_table *htab = spu_hash_table (info);
5190 extra = htab->num_overlays;
5312 struct spu_link_hash_table *htab;
5323 htab = spu_hash_table (info);
5324 if (htab->num_overlays != 0)
5336 if (htab->ovtab != NULL && htab->ovtab->size != 0
5337 && htab->params->ovly_flavour != ovly_soft_icache)
5339 bfd_byte *p = htab->ovtab->contents;
5343 bfd_put_32 (htab->ovtab->owner, phdr[i].p_offset, p + off);
5347 if (htab->init != NULL && htab->init->size != 0)
5349 bfd_vma val = elf_section_data (htab->ovl_sec[0])->this_hdr.sh_offset;
5351 bfd_put_32 (htab->init->owner, val, htab->init->contents + 4);
5402 struct spu_link_hash_table *htab = spu_hash_table (info);
5403 if (htab->params->emit_fixups)
5405 asection *sfixup = htab->sfixup;