daily update
[deliverable/binutils-gdb.git] / bfd / mmo.c
index 8c727880ef4a613842a9323ca5f4a9463365689b..cd7b0fc6afa14a388b56eb2ec6cc821d74d43009 100644 (file)
--- a/bfd/mmo.c
+++ b/bfd/mmo.c
@@ -1,6 +1,5 @@
 /* BFD back-end for mmo objects (MMIX-specific object-format).
-   Copyright 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2009, 2010
-   Free Software Foundation, Inc.
+   Copyright 2001-2013 Free Software Foundation, Inc.
    Written by Hans-Peter Nilsson (hp@bitrange.com).
    Infrastructure and other bits originally copied from srec.c and
    binary.c.
@@ -363,7 +362,7 @@ static void mmo_find_sec_w_addr (bfd *, asection *, void *);
 static void mmo_find_sec_w_addr_grow (bfd *, asection *, void *);
 static asection *mmo_make_section (bfd *, const char *);
 static void mmo_get_symbol_info (bfd *, asymbol *, symbol_info *);
-static void mmo_print_symbol (bfd *, void *, asymbol *, 
+static void mmo_print_symbol (bfd *, void *, asymbol *,
                              bfd_print_symbol_type);
 static void mmo_init (void);
 static bfd_boolean mmo_mkobject (bfd *);
@@ -662,8 +661,9 @@ mmo_decide_section (bfd *abfd, bfd_vma vma)
       if (sec == NULL)
        return NULL;
 
-      if (! sec->user_set_vma)
-       bfd_set_section_vma (abfd, sec, vma);
+      if (! sec->user_set_vma && ! bfd_set_section_vma (abfd, sec, vma))
+       return NULL;
+
       if (! bfd_set_section_flags (abfd, sec,
                                   bfd_get_section_flags (abfd, sec)
                                   | SEC_CODE | SEC_LOAD | SEC_ALLOC))
@@ -676,8 +676,9 @@ mmo_decide_section (bfd *abfd, bfd_vma vma)
       if (sec == NULL)
        return NULL;
 
-      if (! sec->user_set_vma)
-       bfd_set_section_vma (abfd, sec, vma);
+      if (! sec->user_set_vma && ! bfd_set_section_vma (abfd, sec, vma))
+       return NULL;
+
       if (! bfd_set_section_flags (abfd, sec,
                                   bfd_get_section_flags (abfd, sec)
                                   | SEC_LOAD | SEC_ALLOC))
@@ -692,8 +693,9 @@ mmo_decide_section (bfd *abfd, bfd_vma vma)
   /* If there's still no suitable section, make a new one.  */
   sprintf (sec_name, ".MMIX.sec.%d", abfd->tdata.mmo_data->sec_no++);
   sec = mmo_make_section (abfd, sec_name);
-  if (! sec->user_set_vma)
-    bfd_set_section_vma (abfd, sec, vma);
+
+  if (! sec->user_set_vma && ! bfd_set_section_vma (abfd, sec, vma))
+    return NULL;
 
   if (! bfd_set_section_flags (abfd, sec,
                               bfd_get_section_flags (abfd, sec)
@@ -787,21 +789,21 @@ static INLINE bfd_boolean
 mmo_write_chunk (bfd *abfd, const bfd_byte *loc, unsigned int len)
 {
   bfd_boolean retval = TRUE;
+  struct mmo_data_struct *mmop = abfd->tdata.mmo_data;
 
   /* Fill up a tetra from bytes remaining from a previous chunk.  */
-  if (abfd->tdata.mmo_data->byte_no != 0)
+  if (mmop->byte_no != 0)
     {
-      while (abfd->tdata.mmo_data->byte_no < 4 && len != 0)
+      while (mmop->byte_no < 4 && len != 0)
        {
-         abfd->tdata.mmo_data->buf[abfd->tdata.mmo_data->byte_no++] = *loc++;
+         mmop->buf[mmop->byte_no++] = *loc++;
          len--;
        }
 
-      if (abfd->tdata.mmo_data->byte_no == 4)
+      if (mmop->byte_no == 4)
        {
-         mmo_write_tetra (abfd,
-                          bfd_get_32 (abfd, abfd->tdata.mmo_data->buf));
-         abfd->tdata.mmo_data->byte_no = 0;
+         mmo_write_tetra (abfd, bfd_get_32 (abfd, mmop->buf));
+         mmop->byte_no = 0;
        }
     }
 
@@ -811,7 +813,7 @@ mmo_write_chunk (bfd *abfd, const bfd_byte *loc, unsigned int len)
        mmo_write_tetra_raw (abfd, LOP_QUOTE_NEXT);
 
       retval = (retval
-               && ! abfd->tdata.mmo_data->have_error
+               && ! mmop->have_error
                && 4 == bfd_bwrite (loc, 4, abfd));
 
       loc += 4;
@@ -820,12 +822,12 @@ mmo_write_chunk (bfd *abfd, const bfd_byte *loc, unsigned int len)
 
   if (len)
     {
-      memcpy (abfd->tdata.mmo_data->buf, loc, len);
-      abfd->tdata.mmo_data->byte_no = len;
+      memcpy (mmop->buf, loc, len);
+      mmop->byte_no = len;
     }
 
   if (! retval)
-    abfd->tdata.mmo_data->have_error = TRUE;
+    mmop->have_error = TRUE;
   return retval;
 }
 
@@ -1536,6 +1538,7 @@ mmo_scan (bfd *abfd)
   long stab_loc = -1;
   char *file_names[256];
 
+  abfd->symcount = 0;
   memset (file_names, 0, sizeof (file_names));
 
   if (bfd_seek (abfd, (file_ptr) 0, SEEK_SET) != 0)
@@ -3190,6 +3193,7 @@ mmo_write_object_contents (bfd *abfd)
 #define mmo_bfd_get_relocated_section_contents \
   bfd_generic_get_relocated_section_contents
 #define mmo_bfd_gc_sections bfd_generic_gc_sections
+#define mmo_bfd_lookup_section_flags bfd_generic_lookup_section_flags
 #define mmo_bfd_link_hash_table_create _bfd_generic_link_hash_table_create
 #define mmo_bfd_link_hash_table_free _bfd_generic_link_hash_table_free
 #define mmo_bfd_link_add_symbols _bfd_generic_link_add_symbols
@@ -3238,6 +3242,7 @@ const bfd_target bfd_mmo_vec =
   0,                           /* leading underscore */
   ' ',                         /* ar_pad_char */
   16,                          /* ar_max_namelen */
+  0,                           /* match priority.  */
   bfd_getb64, bfd_getb_signed_64, bfd_putb64,
   bfd_getb32, bfd_getb_signed_32, bfd_putb32,
   bfd_getb16, bfd_getb_signed_16, bfd_putb16,  /* data */
This page took 0.04187 seconds and 4 git commands to generate.