* elf32-spu.c (spu_elf_auto_overlay): Use the maximum possible
authorAlan Modra <amodra@gmail.com>
Mon, 4 Aug 2008 13:01:42 +0000 (13:01 +0000)
committerAlan Modra <amodra@gmail.com>
Mon, 4 Aug 2008 13:01:42 +0000 (13:01 +0000)
if --fixed-space request is too large.

bfd/ChangeLog
bfd/elf32-spu.c

index a08f5d8f5bbe2c62b40ed1a5cc715adab2c7d305..4729ed266fcf9728dd3eb72a98f76e11511d6bd8 100644 (file)
@@ -1,3 +1,8 @@
+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.
index 3a5728b4204a94ab0f5c2a18342b565eab40c367..17ff079c0cccdfcf3da6aae52b062d9d636453c9 100644 (file)
@@ -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