aboutsummaryrefslogtreecommitdiff
path: root/bfd/coff-arm.c
diff options
context:
space:
mode:
authorAlan Modra <amodra@gmail.com>2007-10-15 02:00:11 +0000
committerAlan Modra <amodra@gmail.com>2007-10-15 02:00:11 +0000
commitb1657152098cd6a327e6d308bae00573b8c33daf (patch)
tree47c0962ef821ea8b44ac58f91776b9deaa79c7d3 /bfd/coff-arm.c
parent919bea4130fa41aa5fa5580fe361e1c88a6fdf2e (diff)
downloadgdb-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.c45
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;