mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-25 21:41:47 +08:00
Made sure that every call to bfd_read, bfd_write, and bfd_seek
checks the return value and handled bfd_error correctly. These changes are not itemised. Also: * i386os9k.c (os9k_swap_exec_header_in): Change return type to boolean. (os9k_object_p): Check os9k_swap_exec_header_in return value.
This commit is contained in:
@ -30,7 +30,7 @@ static bfd_target *os9k_callback PARAMS ((bfd *));
|
|||||||
|
|
||||||
/* Swaps the information in an executable header taken from a raw byte
|
/* Swaps the information in an executable header taken from a raw byte
|
||||||
stream memory image, into the internal exec_header structure. */
|
stream memory image, into the internal exec_header structure. */
|
||||||
void
|
boolean
|
||||||
os9k_swap_exec_header_in (abfd, raw_bytes, execp)
|
os9k_swap_exec_header_in (abfd, raw_bytes, execp)
|
||||||
bfd *abfd;
|
bfd *abfd;
|
||||||
mh_com *raw_bytes;
|
mh_com *raw_bytes;
|
||||||
@ -50,9 +50,12 @@ os9k_swap_exec_header_in (abfd, raw_bytes, execp)
|
|||||||
dload = bfd_h_get_32 (abfd, bytes->m_idata);
|
dload = bfd_h_get_32 (abfd, bytes->m_idata);
|
||||||
execp->a_data = dload + 8;
|
execp->a_data = dload + 8;
|
||||||
|
|
||||||
bfd_seek (abfd, (file_ptr) dload, SEEK_SET);
|
if (bfd_seek (abfd, (file_ptr) dload, SEEK_SET) != 0
|
||||||
bfd_read (&dmemstart, sizeof (dmemstart), 1, abfd);
|
|| (bfd_read (&dmemstart, sizeof (dmemstart), 1, abfd)
|
||||||
bfd_read (&dmemsize, sizeof (dmemsize), 1, abfd);
|
!= sizeof (dmemstart))
|
||||||
|
|| (bfd_read (&dmemsize, sizeof (dmemsize), 1, abfd)
|
||||||
|
!= sizeof (dmemsize)))
|
||||||
|
return false;
|
||||||
|
|
||||||
execp->a_tload = 0;
|
execp->a_tload = 0;
|
||||||
execp->a_dload = bfd_h_get_32 (abfd, (unsigned char *) &dmemstart);
|
execp->a_dload = bfd_h_get_32 (abfd, (unsigned char *) &dmemstart);
|
||||||
@ -62,6 +65,8 @@ os9k_swap_exec_header_in (abfd, raw_bytes, execp)
|
|||||||
|
|
||||||
execp->a_trsize = 0;
|
execp->a_trsize = 0;
|
||||||
execp->a_drsize = 0;
|
execp->a_drsize = 0;
|
||||||
|
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
@ -109,7 +114,8 @@ os9k_object_p (abfd)
|
|||||||
if (bfd_read ((PTR) & exec_bytes, MHCOM_BYTES_SIZE, 1, abfd)
|
if (bfd_read ((PTR) & exec_bytes, MHCOM_BYTES_SIZE, 1, abfd)
|
||||||
!= MHCOM_BYTES_SIZE)
|
!= MHCOM_BYTES_SIZE)
|
||||||
{
|
{
|
||||||
bfd_set_error (bfd_error_wrong_format);
|
if (bfd_get_error () != bfd_error_system_call)
|
||||||
|
bfd_set_error (bfd_error_wrong_format);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -120,7 +126,12 @@ os9k_object_p (abfd)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
os9k_swap_exec_header_in (abfd, &exec_bytes, &anexec);
|
if (! os9k_swap_exec_header_in (abfd, &exec_bytes, &anexec))
|
||||||
|
{
|
||||||
|
if (bfd_get_error () != bfd_error_system_call)
|
||||||
|
bfd_set_error (bfd_error_wrong_format);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
return aout_32_some_aout_object_p (abfd, &anexec, os9k_callback);
|
return aout_32_some_aout_object_p (abfd, &anexec, os9k_callback);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -235,22 +246,30 @@ os9k_write_object_contents (abfd)
|
|||||||
|
|
||||||
bout_swap_exec_header_out (abfd, exec_hdr (abfd), &swapped_hdr);
|
bout_swap_exec_header_out (abfd, exec_hdr (abfd), &swapped_hdr);
|
||||||
|
|
||||||
bfd_seek (abfd, (file_ptr) 0, SEEK_SET);
|
if (bfd_seek (abfd, (file_ptr) 0, SEEK_SET) != 0
|
||||||
bfd_write ((PTR) & swapped_hdr, 1, EXEC_BYTES_SIZE, abfd);
|
|| (bfd_write ((PTR) & swapped_hdr, 1, EXEC_BYTES_SIZE, abfd)
|
||||||
|
!= EXEC_BYTES_SIZE))
|
||||||
|
return false;
|
||||||
|
|
||||||
/* Now write out reloc info, followed by syms and strings */
|
/* Now write out reloc info, followed by syms and strings */
|
||||||
if (bfd_get_symcount (abfd) != 0)
|
if (bfd_get_symcount (abfd) != 0)
|
||||||
{
|
{
|
||||||
bfd_seek (abfd, (file_ptr) (N_SYMOFF (*exec_hdr (abfd))), SEEK_SET);
|
if (bfd_seek (abfd, (file_ptr) (N_SYMOFF (*exec_hdr (abfd))), SEEK_SET)
|
||||||
|
!= 0)
|
||||||
|
return false;
|
||||||
|
|
||||||
if (!aout_32_write_syms (abfd))
|
if (!aout_32_write_syms (abfd))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
bfd_seek (abfd, (file_ptr) (N_TROFF (*exec_hdr (abfd))), SEEK_SET);
|
if (bfd_seek (abfd, (file_ptr) (N_TROFF (*exec_hdr (abfd))), SEEK_SET)
|
||||||
|
!= 0)
|
||||||
|
return false;
|
||||||
|
|
||||||
if (!b_out_squirt_out_relocs (abfd, obj_textsec (abfd)))
|
if (!b_out_squirt_out_relocs (abfd, obj_textsec (abfd)))
|
||||||
return false;
|
return false;
|
||||||
bfd_seek (abfd, (file_ptr) (N_DROFF (*exec_hdr (abfd))), SEEK_SET);
|
if (bfd_seek (abfd, (file_ptr) (N_DROFF (*exec_hdr (abfd))), SEEK_SET)
|
||||||
|
!= 0)
|
||||||
|
return false;
|
||||||
|
|
||||||
if (!b_out_squirt_out_relocs (abfd, obj_datasec (abfd)))
|
if (!b_out_squirt_out_relocs (abfd, obj_datasec (abfd)))
|
||||||
return false;
|
return false;
|
||||||
@ -282,7 +301,8 @@ os9k_set_section_contents (abfd, section, location, offset, count)
|
|||||||
|
|
||||||
}
|
}
|
||||||
/* regardless, once we know what we're doing, we might as well get going */
|
/* regardless, once we know what we're doing, we might as well get going */
|
||||||
bfd_seek (abfd, section->filepos + offset, SEEK_SET);
|
if (bfd_seek (abfd, section->filepos + offset, SEEK_SET) != 0)
|
||||||
|
return false;
|
||||||
|
|
||||||
if (count != 0)
|
if (count != 0)
|
||||||
{
|
{
|
||||||
|
Reference in New Issue
Block a user