Don't include coff/pe.h in coff-x86_64.c

This (and other) code from coffcode.h is broken for x86_64_coff_vec,
and has been ever since support was added in 2006 commit 99ad839030c1
Here, bfd_coff_aoutsz must match coff_swap_aouthdr_out otherwise we
end up writing garbage.

      /* Note that peicode.h fills in a PEAOUTHDR, not an AOUTHDR.
	 include/coff/pe.h sets AOUTSZ == sizeof (PEAOUTHDR)).  */
      char * buff;
      bfd_size_type amount = bfd_coff_aoutsz (abfd);

      buff = (char *) bfd_malloc (amount);
      if (buff == NULL)
	return false;

      coff_swap_aouthdr_out (abfd, & internal_a, buff);
      amount = bfd_bwrite (buff, amount, abfd);

We have removed support for --target=x86_64-coff, likely because it
never worked properly, but still produce coff-x86_64.o with
--enable-targets=all.  This means objcopy can recognize x86_64 COFF
files but will write garbage to the output file, a fact found by
fuzzers.  I suspect x86_64 COFF is still broken after this fix, and
mention of coff-x86_64.* should be removed from bfd/Makefile.am.

	* coff-x86_64.c: Don't include coff/pe.h.
	(COFF_WITH_pex64): Don't define here.
	* pe-x86_64.c: Include coff/pe.h and other headers.
	(PEI_HEADERS): Define.
This commit is contained in:
Alan Modra
2021-10-31 10:08:15 +10:30
parent 1c5e9d8d8c
commit 590abc168f
2 changed files with 5 additions and 5 deletions

View File

@ -20,10 +20,6 @@
Written by Kai Tietz, OneVision Software GmbH&CoKg. */ Written by Kai Tietz, OneVision Software GmbH&CoKg. */
#ifndef COFF_WITH_pex64
#define COFF_WITH_pex64
#endif
/* Note we have to make sure not to include headers twice. /* Note we have to make sure not to include headers twice.
Not all headers are wrapped in #ifdef guards, so we define Not all headers are wrapped in #ifdef guards, so we define
PEI_HEADERS to prevent double including here. */ PEI_HEADERS to prevent double including here. */
@ -33,7 +29,6 @@
#include "libbfd.h" #include "libbfd.h"
#include "coff/x86_64.h" #include "coff/x86_64.h"
#include "coff/internal.h" #include "coff/internal.h"
#include "coff/pe.h"
#include "libcoff.h" #include "libcoff.h"
#include "libiberty.h" #include "libiberty.h"
#endif #endif

View File

@ -20,9 +20,14 @@
Written by Kai Tietz, OneVision Software GmbH&CoKg. */ Written by Kai Tietz, OneVision Software GmbH&CoKg. */
#define PEI_HEADERS
#include "sysdep.h" #include "sysdep.h"
#include "bfd.h" #include "bfd.h"
#include "libbfd.h"
#include "libiberty.h"
#include "coff/x86_64.h"
#include "coff/internal.h" #include "coff/internal.h"
#include "coff/pe.h"
#include "libcoff.h" #include "libcoff.h"
#define TARGET_SYM x86_64_pe_vec #define TARGET_SYM x86_64_pe_vec