| Index: bfd/mmo.c
|
| diff --git a/bfd/mmo.c b/bfd/mmo.c
|
| index dc45f31b705e34c1f41449249f98b56d712fea0d..cd7b0fc6afa14a388b56eb2ec6cc821d74d43009 100644
|
| --- 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, 2011
|
| - 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)
|
|
|