diff options
author | Alan Modra <amodra@gmail.com> | 2007-10-15 02:00:11 +0000 |
---|---|---|
committer | Alan Modra <amodra@gmail.com> | 2007-10-15 02:00:11 +0000 |
commit | b1657152098cd6a327e6d308bae00573b8c33daf (patch) | |
tree | 47c0962ef821ea8b44ac58f91776b9deaa79c7d3 /bfd/coff-arm.c | |
parent | 919bea4130fa41aa5fa5580fe361e1c88a6fdf2e (diff) | |
download | gdb-b1657152098cd6a327e6d308bae00573b8c33daf.zip gdb-b1657152098cd6a327e6d308bae00573b8c33daf.tar.gz gdb-b1657152098cd6a327e6d308bae00573b8c33daf.tar.bz2 |
* coff-arm.c (arm_emit_base_file_entry): Check fwrite return value.
Return status. Adjust callers.
* coff-mcore.c (mcore_emit_base_file_entry): Likewise.
* coff-ppc.c (write_base_file_entry): New function.
(coff_ppc_relocate_section): Use it.
* elf32-arm.c (find_thumb_glue): Check asprintf return status.
(find_arm_glue): Likewise.
* vms-misc.c (_bfd_vms_output_flush): Check fwrite return value.
Diffstat (limited to 'bfd/coff-arm.c')
-rw-r--r-- | bfd/coff-arm.c | 45 |
1 files changed, 25 insertions, 20 deletions
diff --git a/bfd/coff-arm.c b/bfd/coff-arm.c index b9f8c36..3bf61e5 100644 --- a/bfd/coff-arm.c +++ b/bfd/coff-arm.c @@ -939,21 +939,24 @@ coff_arm_link_hash_table_create (bfd * abfd) return & ret->root.root; } -static void +static bfd_boolean arm_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 - + input_section->output_offset - + input_section->output_section->vma; + bfd_vma addr = (reloc_offset + - input_section->vma + + input_section->output_offset + + input_section->output_section->vma); 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; } #ifndef ARM_WINCE @@ -1381,10 +1384,10 @@ coff_arm_relocate_section (bfd *output_bfd, bfd_put_32 (output_bfd, h_val | a2t3_func_addr_insn, s->contents + my_offset + 8); - if (info->base_file) - arm_emit_base_file_entry (info, output_bfd, s, - my_offset + 8); - + if (info->base_file + && !arm_emit_base_file_entry (info, output_bfd, + s, my_offset + 8)) + return FALSE; } BFD_ASSERT (my_offset <= globals->arm_glue_size); @@ -1486,9 +1489,11 @@ coff_arm_relocate_section (bfd *output_bfd, bfd_put_32 (output_bfd, h_val, s->contents + my_offset + 16); - if (info->base_file) - arm_emit_base_file_entry (info, output_bfd, s, - my_offset + 16); + if (info->base_file + && !arm_emit_base_file_entry (info, + output_bfd, s, + my_offset + 16)) + return FALSE; } else { @@ -1572,13 +1577,13 @@ coff_arm_relocate_section (bfd *output_bfd, } } - 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)) - arm_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) + && !arm_emit_base_file_entry (info, output_bfd, input_section, + rel->r_vaddr)) + return FALSE; if (done) rstat = bfd_reloc_ok; |