diff options
-rw-r--r-- | bfd/ChangeLog | 5 | ||||
-rw-r--r-- | bfd/elf32-spu.c | 12 |
2 files changed, 13 insertions, 4 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog index a08f5d8..4729ed2 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,5 +1,10 @@ 2008-08-04 Alan Modra <amodra@bigpond.net.au> + * elf32-spu.c (spu_elf_auto_overlay): Use the maximum possible + if --fixed-space request is too large. + +2008-08-04 Alan Modra <amodra@bigpond.net.au> + * Makefile.am (SRC-POTFILES.in, BLD-POTFILES.in): Set LC_ALL=C. * Makefile.in: Regenerate. * po/SRC-POTFILES.in: Regenerate. diff --git a/bfd/elf32-spu.c b/bfd/elf32-spu.c index 3a5728b..17ff079 100644 --- a/bfd/elf32-spu.c +++ b/bfd/elf32-spu.c @@ -3608,14 +3608,18 @@ spu_elf_auto_overlay (struct bfd_link_info *info, (bfd_vma) mos_param.max_overlay_size); /* Now see if we should put some functions in the non-overlay area. */ - if (fixed_size < htab->overlay_fixed - && htab->overlay_fixed + mos_param.max_overlay_size < htab->local_store) + else if (fixed_size < htab->overlay_fixed) { - unsigned int lib_size = htab->overlay_fixed - fixed_size; + unsigned int max_fixed, lib_size; + + max_fixed = htab->local_store - mos_param.max_overlay_size; + if (max_fixed > htab->overlay_fixed) + max_fixed = htab->overlay_fixed; + lib_size = max_fixed - fixed_size; lib_size = auto_ovl_lib_functions (info, lib_size); if (lib_size == (unsigned int) -1) goto err_exit; - fixed_size = htab->overlay_fixed - lib_size; + fixed_size = max_fixed - lib_size; } /* Build an array of sections, suitably sorted to place into |