X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=bfd%2Fcoff-mcore.c;h=1d6174885819564e1c3fc67d62bacf1189dea502;hb=c5e38e547e14e9f282c9d98a7c70272cecdcac10;hp=cf6f82da7e083dcbcbec2f86beb717f5ea0a9002;hpb=157090f728a99fff42b3d3cc576b0c2a953e9916;p=deliverable%2Fbinutils-gdb.git diff --git a/bfd/coff-mcore.c b/bfd/coff-mcore.c index cf6f82da7e..1d61748858 100644 --- a/bfd/coff-mcore.c +++ b/bfd/coff-mcore.c @@ -2,25 +2,25 @@ Copyright 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2007 Free Software Foundation, Inc. -This file is part of BFD, the Binary File Descriptor library. + This file is part of BFD, the Binary File Descriptor library. -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2 of the License, or -(at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + 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, 51 Franklin Street - Fifth Floor, -Boston, MA 02110-1301, USA. */ + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, 51 Franklin Street - Fifth Floor, + Boston, MA 02110-1301, USA. */ -#include "bfd.h" #include "sysdep.h" +#include "bfd.h" #include "libbfd.h" #include "coff/mcore.h" #include "coff/internal.h" @@ -51,8 +51,6 @@ static reloc_howto_type *coff_mcore_rtype_to_howto PARAMS ((bfd *, asection *, struct internal_reloc *, struct coff_link_hash_entry *, struct internal_syment *, bfd_vma *)); -static void mcore_emit_base_file_entry - PARAMS ((struct bfd_link_info *, bfd *, asection *, bfd_vma)); static bfd_boolean in_reloc_p PARAMS ((bfd *, reloc_howto_type *)); /* The NT loader points the toc register to &toc + 32768, in order to @@ -221,12 +219,11 @@ mcore_hash_table; /* Add an entry to the base file. */ -static void -mcore_emit_base_file_entry (info, output_bfd, input_section, reloc_offset) - struct bfd_link_info * info; - bfd * output_bfd; - asection * input_section; - bfd_vma reloc_offset; +static bfd_boolean +mcore_emit_base_file_entry (struct bfd_link_info *info, + bfd *output_bfd, + asection *input_section, + bfd_vma reloc_offset) { bfd_vma addr = reloc_offset - input_section->vma @@ -236,7 +233,11 @@ mcore_emit_base_file_entry (info, output_bfd, input_section, reloc_offset) if (coff_data (output_bfd)->pe) addr -= pe_data (output_bfd)->pe_opthdr.ImageBase; - fwrite (&addr, 1, sizeof (addr), (FILE *) info->base_file); + if (fwrite (&addr, sizeof (addr), 1, (FILE *) info->base_file) == 1) + return TRUE; + + bfd_set_error (bfd_error_system_call); + return FALSE; } static bfd_reloc_status_type @@ -522,12 +523,13 @@ coff_mcore_relocate_section (output_bfd, info, input_bfd, input_section, break; } - if (info->base_file) - { - /* Emit a reloc if the backend thinks it needs it. */ - if (sym && pe_data (output_bfd)->in_reloc_p (output_bfd, howto)) - mcore_emit_base_file_entry (info, output_bfd, input_section, rel->r_vaddr); - } + /* Emit a reloc if the backend thinks it needs it. */ + if (info->base_file + && sym + && pe_data (output_bfd)->in_reloc_p (output_bfd, howto) + && !mcore_emit_base_file_entry (info, output_bfd, input_section, + rel->r_vaddr)) + return FALSE; switch (rstat) {