This is the mail archive of the cygwin-apps mailing list for the Cygwin project.

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

a.out.h for 64-bit Cygwin?

It may be too soon to expect this to work, but I'm trying to build emacs for 64-bit Cygwin. Part of the build process involves direct manipulation of a .exe file, based on the structures defined in /usr/include/a.out.h. I'm wondering whether this file needs to be updated before it will work with 64-bit .exe files.

I'm appending below some excerpts from the code that produce lots of assertion failures when I try to build emacs. Suggestions for fixing this would be appreciated.

I can give more details, but I thought I'd start by just making sure I have a reasonable a.out.h to work with. Also, I suspect that some of the magic numbers in the code below need to be changed.


#include <a.out.h>

typedef struct
  FILHDR file_header;
  PEAOUTHDR file_optional_header;
  SCNHDR section_header[32];
} exe_header_t;

static exe_header_t *
read_exe_header (int fd, exe_header_t * exe_header_buffer)
  int i;
  int ret;

  assert (fd >= 0);
  assert (exe_header_buffer != 0);

  ret = lseek (fd, 0L, SEEK_SET);
  assert (ret != -1);

  ret =
    read (fd, &exe_header_buffer->file_header,
	  sizeof (exe_header_buffer->file_header));
  assert (ret == sizeof (exe_header_buffer->file_header));

  assert (exe_header_buffer->file_header.e_magic == 0x5a4d);
  assert (exe_header_buffer->file_header.nt_signature == 0x4550);
  assert (exe_header_buffer->file_header.f_magic == 0x014c);
  assert (exe_header_buffer->file_header.f_nscns > 0);
  assert (exe_header_buffer->file_header.f_nscns <=
  	  sizeof (exe_header_buffer->section_header) /
  	  sizeof (exe_header_buffer->section_header[0]));
  assert (exe_header_buffer->file_header.f_opthdr > 0);

  ret =
    read (fd, &exe_header_buffer->file_optional_header,
	  sizeof (exe_header_buffer->file_optional_header));
  assert (ret == sizeof (exe_header_buffer->file_optional_header));

assert (exe_header_buffer->file_optional_header.magic == 0x010b);

  for (i = 0; i < exe_header_buffer->file_header.f_nscns; ++i)
      ret =
	read (fd, &exe_header_buffer->section_header[i],
	      sizeof (exe_header_buffer->section_header[i]));
      assert (ret == sizeof (exe_header_buffer->section_header[i]));

  return (exe_header_buffer);

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]