Add support for reading msdos MZ executables.

See email thread starting here:  https://www.sourceware.org/ml/binutils/2018-01/msg00001.html

include	* coff/msdos.h: New header.
	* coff/pe.h: Move common defines to msdos.h.
	* coff/powerpc.h: Likewise.

bfd	* i386msdos.c (msdos_mkobject); New function.
	(msdos_object_p): New function.
	(i386_msdos_vec): Use msdos_object_p as the check_format
	function.
	* peicode.h: Rename external_PEI_DOS_hdr, DOSMAGIC, and
	NT_SIGNATURE to external_DOS_hdr, IMAGE_DOS_SIGNATURE, and
	IMAGE_NT_SIGNATURE.
	* peXXigen.c: Likewise.
	* coff-ia64.c: Likewise.
This commit is contained in:
Zebediah Figura
2018-02-12 13:12:45 +00:00
committed by Nick Clifton
parent 7e784da543
commit 830db0485e
9 changed files with 170 additions and 43 deletions

View File

@@ -1386,7 +1386,7 @@ static const bfd_target *
pe_bfd_object_p (bfd * abfd)
{
bfd_byte buffer[6];
struct external_PEI_DOS_hdr dos_hdr;
struct external_DOS_hdr dos_hdr;
struct external_PEI_IMAGE_hdr image_hdr;
struct internal_filehdr internal_f;
struct internal_aouthdr internal_a;
@@ -1420,7 +1420,7 @@ pe_bfd_object_p (bfd * abfd)
/* There are really two magic numbers involved; the magic number
that says this is a NT executable (PEI) and the magic number that
determines the architecture. The former is DOSMAGIC, stored in
determines the architecture. The former is IMAGE_DOS_SIGNATURE, stored in
the e_magic field. The latter is stored in the f_magic field.
If the NT magic number isn't valid, the architecture magic number
could be mimicked by some other field (specifically, the number
@@ -1428,7 +1428,7 @@ pe_bfd_object_p (bfd * abfd)
correctly for a PEI file, check the e_magic number here, and, if
it doesn't match, clobber the f_magic number so that we don't get
a false match. */
if (H_GET_16 (abfd, dos_hdr.e_magic) != DOSMAGIC)
if (H_GET_16 (abfd, dos_hdr.e_magic) != IMAGE_DOS_SIGNATURE)
{
bfd_set_error (bfd_error_wrong_format);
return NULL;