mirror of
https://github.com/darlinghq/darling-gdb.git
synced 2025-02-01 06:25:50 +00:00
* elf32-spu.c (spu_elf_auto_overlay): Take into account section
alignment when packing sections into overlays.
This commit is contained in:
parent
22102fb0d9
commit
2fc6d3b012
@ -1,3 +1,8 @@
|
||||
2009-07-07 Alan Modra <amodra@bigpond.net.au>
|
||||
|
||||
* elf32-spu.c (spu_elf_auto_overlay): Take into account section
|
||||
alignment when packing sections into overlays.
|
||||
|
||||
2009-07-03 Cary Coutant <ccoutant@google.com>
|
||||
|
||||
* dwarf2.c (decode_line_info): Ignore DW_LNE_set_discriminator.
|
||||
|
@ -4364,12 +4364,12 @@ spu_elf_auto_overlay (struct bfd_link_info *info)
|
||||
ovlynum = 0;
|
||||
while (base < count)
|
||||
{
|
||||
unsigned int size = 0;
|
||||
unsigned int size = 0, rosize = 0, roalign = 0;
|
||||
|
||||
for (i = base; i < count; i++)
|
||||
{
|
||||
asection *sec;
|
||||
unsigned int tmp;
|
||||
asection *sec, *rosec;
|
||||
unsigned int tmp, rotmp;
|
||||
unsigned int num_stubs;
|
||||
struct call_info *call, *pasty;
|
||||
struct _spu_elf_section_data *sec_data;
|
||||
@ -4379,10 +4379,16 @@ spu_elf_auto_overlay (struct bfd_link_info *info)
|
||||
/* See whether we can add this section to the current
|
||||
overlay without overflowing our overlay buffer. */
|
||||
sec = ovly_sections[2 * i];
|
||||
tmp = size + sec->size;
|
||||
if (ovly_sections[2 * i + 1])
|
||||
tmp += ovly_sections[2 * i + 1]->size;
|
||||
if (tmp > overlay_size)
|
||||
tmp = align_power (size, sec->alignment_power) + sec->size;
|
||||
rotmp = rosize;
|
||||
rosec = ovly_sections[2 * i + 1];
|
||||
if (rosec != NULL)
|
||||
{
|
||||
rotmp = align_power (rotmp, rosec->alignment_power) + rosec->size;
|
||||
if (roalign < rosec->alignment_power)
|
||||
roalign = rosec->alignment_power;
|
||||
}
|
||||
if (align_power (tmp, roalign) + rotmp > overlay_size)
|
||||
break;
|
||||
if (sec->segment_mark)
|
||||
{
|
||||
@ -4392,15 +4398,22 @@ spu_elf_auto_overlay (struct bfd_link_info *info)
|
||||
while (pasty != NULL)
|
||||
{
|
||||
struct function_info *call_fun = pasty->fun;
|
||||
tmp += call_fun->sec->size;
|
||||
tmp = (align_power (tmp, call_fun->sec->alignment_power)
|
||||
+ call_fun->sec->size);
|
||||
if (call_fun->rodata)
|
||||
tmp += call_fun->rodata->size;
|
||||
{
|
||||
rotmp = (align_power (rotmp,
|
||||
call_fun->rodata->alignment_power)
|
||||
+ call_fun->rodata->size);
|
||||
if (roalign < rosec->alignment_power)
|
||||
roalign = rosec->alignment_power;
|
||||
}
|
||||
for (pasty = call_fun->call_list; pasty; pasty = pasty->next)
|
||||
if (pasty->is_pasted)
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (tmp > overlay_size)
|
||||
if (align_power (tmp, roalign) + rotmp > overlay_size)
|
||||
break;
|
||||
|
||||
/* If we add this section, we might need new overlay call
|
||||
@ -4457,10 +4470,11 @@ spu_elf_auto_overlay (struct bfd_link_info *info)
|
||||
if (htab->params->ovly_flavour == ovly_soft_icache
|
||||
&& num_stubs > htab->params->max_branch)
|
||||
break;
|
||||
if (tmp + num_stubs * ovl_stub_size (htab->params)
|
||||
> overlay_size)
|
||||
if (align_power (tmp, roalign) + rotmp
|
||||
+ num_stubs * ovl_stub_size (htab->params) > overlay_size)
|
||||
break;
|
||||
size = tmp;
|
||||
rosize = rotmp;
|
||||
}
|
||||
|
||||
if (i == base)
|
||||
|
Loading…
x
Reference in New Issue
Block a user