* configure.tgt: Set targ_emul to arm_wince_pe for ARM Windows CE targets.
[deliverable/binutils-gdb.git] / bfd / reloc16.c
index cb9636f8f1064684d818d04b7c10655ca9a5fe8d..3adbbc75cd1af03930a20d1c6a8294a72a0fc33b 100644 (file)
@@ -1,6 +1,6 @@
 /* 8 and 16 bit COFF relocation functions, for BFD.
-   Copyright 1990, 91, 92, 93, 94, 95, 96, 97, 98, 2000
-   Free Software Foundation, Inc.
+   Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1998, 2000, 2001,
+   2002, 2003, 2004 Free Software Foundation, Inc.
    Written by Cygnus Support.
 
 This file is part of BFD, the Binary File Descriptor library.
@@ -17,7 +17,7 @@ GNU General Public License for more details.
 
 You should have received a copy of the GNU General Public License
 along with this program; if not, write to the Free Software
-Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
+Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.  */
 
 /* Most of this hacked by Steve Chamberlain <sac@cygnus.com>.  */
 
@@ -29,7 +29,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
    BFD generic relocs.  They should store the relocs in some location
    where coff_link_input_bfd can find them (and coff_link_input_bfd
    should be changed to use this location rather than rereading the
-   file) (unless info->keep_memory is false, in which case they should
+   file) (unless info->keep_memory is FALSE, in which case they should
    free up the relocs after dealing with them).  */
 
 #include "bfd.h"
@@ -64,7 +64,7 @@ bfd_coff_reloc16_get_value (reloc, link_info, input_section)
         the generic symbols.  */
       h = bfd_wrapped_link_hash_lookup (input_section->owner, link_info,
                                        bfd_asymbol_name (symbol),
-                                       false, false, true);
+                                       FALSE, FALSE, TRUE);
       if (h != (struct bfd_link_hash_entry *) NULL
          && (h->type == bfd_link_hash_defined
              || h->type == bfd_link_hash_defweak))
@@ -79,7 +79,7 @@ bfd_coff_reloc16_get_value (reloc, link_info, input_section)
          if (!((*link_info->callbacks->undefined_symbol)
                (link_info, bfd_asymbol_name (symbol),
                 input_section->owner, input_section, reloc->address,
-                true)))
+                TRUE)))
            abort ();
          value = 0;
        }
@@ -136,32 +136,31 @@ bfd_perform_slip (abfd, slip, input_section, value)
     }
 }
 
-boolean
-bfd_coff_reloc16_relax_section (abfd, i, link_info, again)
+bfd_boolean
+bfd_coff_reloc16_relax_section (abfd, input_section, link_info, again)
      bfd *abfd;
-     asection *i;
+     asection *input_section;
      struct bfd_link_info *link_info;
-     boolean *again;
+     bfd_boolean *again;
 {
   /* Get enough memory to hold the stuff.  */
-  bfd *input_bfd = i->owner;
-  asection *input_section = i;
-  int *shrinks;
-  int shrink = 0;
+  bfd *input_bfd = input_section->owner;
+  unsigned *shrinks;
+  unsigned shrink = 0;
   long reloc_size = bfd_get_reloc_upper_bound (input_bfd, input_section);
   arelent **reloc_vector = NULL;
   long reloc_count;
 
   /* We only do global relaxation once.  It is not safe to do it multiple
      times (see discussion of the "shrinks" array below).  */
-  *again = false;
+  *again = FALSE;
 
   if (reloc_size < 0)
-    return false;
+    return FALSE;
 
-  reloc_vector = (arelent **) bfd_malloc (reloc_size);
+  reloc_vector = (arelent **) bfd_malloc ((bfd_size_type) reloc_size);
   if (!reloc_vector && reloc_size > 0)
-    return false;
+    return FALSE;
 
   /* Get the relocs and think about them.  */
   reloc_count =
@@ -170,7 +169,7 @@ bfd_coff_reloc16_relax_section (abfd, i, link_info, again)
   if (reloc_count < 0)
     {
       free (reloc_vector);
-      return false;
+      return FALSE;
     }
 
   /* The reloc16.c and related relaxing code is very simple, the price
@@ -191,60 +190,64 @@ bfd_coff_reloc16_relax_section (abfd, i, link_info, again)
   if (reloc_count > 0)
     {
       int another_pass = 0;
+      bfd_size_type amt;
 
       /* Allocate and initialize the shrinks array for this section.
-         The last element is used as an accumlator of shrinks.  */
-      shrinks = (int *) bfd_malloc ((reloc_count + 1) * sizeof (int));
-      memset (shrinks, 0, (reloc_count + 1) * sizeof (int));
+        The last element is used as an accumulator of shrinks.  */
+      amt = reloc_count + 1;
+      amt *= sizeof (unsigned);
+      shrinks = (unsigned *) bfd_zmalloc (amt);
 
       /* Loop until nothing changes in this section.  */
-      do {
-       arelent **parent;
-       unsigned int i;
-       long j;
-
-       another_pass = 0;
-
-       for (i = 0, parent = reloc_vector; *parent; parent++, i++)
-         {
-           /* Let the target/machine dependent code examine each reloc
-              in this section and attempt to shrink it.  */
-           shrink = bfd_coff_reloc16_estimate (abfd, input_section, *parent,
-                                               shrinks[i], link_info);
-
-           /* If it shrunk, note it in the shrinks array and set up for
-              another pass.  */
-           if (shrink != shrinks[i])
-             {
-               another_pass = 1;
-               for (j = i + 1; j <= reloc_count; j++)
-                 shrinks[j] += shrink - shrinks[i];
-             }
-         }
-      }
+      do
+       {
+         arelent **parent;
+         unsigned int i;
+         long j;
+
+         another_pass = 0;
+
+         for (i = 0, parent = reloc_vector; *parent; parent++, i++)
+           {
+             /* Let the target/machine dependent code examine each reloc
+                in this section and attempt to shrink it.  */
+             shrink = bfd_coff_reloc16_estimate (abfd, input_section, *parent,
+                                                 shrinks[i], link_info);
+
+             /* If it shrunk, note it in the shrinks array and set up for
+                another pass.  */
+             if (shrink != shrinks[i])
+               {
+                 another_pass = 1;
+                 for (j = i + 1; j <= reloc_count; j++)
+                   shrinks[j] += shrink - shrinks[i];
+               }
+           }
+       }
       while (another_pass);
 
       shrink = shrinks[reloc_count];
       free ((char *) shrinks);
     }
 
-  input_section->_cooked_size -= shrink;
+  input_section->rawsize = input_section->size;
+  input_section->size -= shrink;
   free ((char *) reloc_vector);
-  return true;
+  return TRUE;
 }
 
 bfd_byte *
-bfd_coff_reloc16_get_relocated_section_contents(in_abfd,
-                                               link_info,
-                                               link_order,
-                                               data,
-                                               relocateable,
-                                               symbols)
+bfd_coff_reloc16_get_relocated_section_contents (in_abfd,
+                                                link_info,
+                                                link_order,
+                                                data,
+                                                relocatable,
+                                                symbols)
      bfd *in_abfd;
      struct bfd_link_info *link_info;
      struct bfd_link_order *link_order;
      bfd_byte *data;
-     boolean relocateable;
+     bfd_boolean relocatable;
      asymbol **symbols;
 {
   /* Get enough memory to hold the stuff.  */
@@ -253,26 +256,24 @@ bfd_coff_reloc16_get_relocated_section_contents(in_abfd,
   long reloc_size = bfd_get_reloc_upper_bound (input_bfd, input_section);
   arelent **reloc_vector;
   long reloc_count;
+  bfd_size_type sz;
 
   if (reloc_size < 0)
     return NULL;
 
-  /* If producing relocateable output, don't bother to relax.  */
-  if (relocateable)
+  /* If producing relocatable output, don't bother to relax.  */
+  if (relocatable)
     return bfd_generic_get_relocated_section_contents (in_abfd, link_info,
                                                       link_order,
-                                                      data, relocateable,
+                                                      data, relocatable,
                                                       symbols);
 
   /* Read in the section.  */
-  if (!bfd_get_section_contents(input_bfd,
-                               input_section,
-                               data,
-                               0,
-                               input_section->_raw_size))
+  sz = input_section->rawsize ? input_section->rawsize : input_section->size;
+  if (!bfd_get_section_contents (input_bfd, input_section, data, 0, sz))
     return NULL;
 
-  reloc_vector = (arelent **) bfd_malloc ((size_t) reloc_size);
+  reloc_vector = (arelent **) bfd_malloc ((bfd_size_type) reloc_size);
   if (!reloc_vector && reloc_size != 0)
     return NULL;
 
This page took 0.026863 seconds and 4 git commands to generate.