This is the mail archive of the
cygwin-apps
mailing list for the Cygwin project.
Re: a.out.h for 64-bit Cygwin?
On Mar 11 12:13, Ken Brown wrote:
> On 3/10/2013 4:52 PM, Corinna Vinschen wrote:
> >No, we shouldn't include windows.h. Some of the values are already
> >defined using another name in a.out.h, see I386MAGIC, DOSMAGIC, or
> >NT_SIGNATURE.
> >
> >I'm pretty open to add definitions for other values, as long as they
> >either match the already used naimg scheme, or, if they are entirely
> >new, are similar, but not exactly named like the original Windows
> >definitions. I don't think anything speaks against adding stuff like
> >
> > #define AMD64MAGIC 0x8664
> > [...]
> > #define IMG_NT_OPTIONAL_HDR32_MAGIC 0x10b
> > [...]
> > #define IMG_SUBSYS_NATIVE 1
>
> OK, my patch is attached. I'm also attaching the program I used to
> test it, based on the emacs code I sent in my first post. (And I'm
> able to build 64-bit emacs with this patch.)
>
> It turned out that the most important thing I had to do was change
> most occurrences of "unsigned long" to "uint32_t" to keep DWORDs
> from becoming 64 bits wide on AMD64.
>
> Ken
Hi Ken. Thanks for the patch, but I guess you misunderstood me
concerning the names of the defines:
> #define I386MAGIC 0x14c
> #define I386PTXMAGIC 0x154
> #define I386AIXMAGIC 0x175
> +#define IMAGE_FILE_MACHINE_I386 0x014c
> +#define IMAGE_FILE_MACHINE_AMD64 0x8664
> +#define IMAGE_NT_OPTIONAL_HDR32_MAGIC 0x10b
> +#define IMAGE_NT_OPTIONAL_HDR64_MAGIC 0x20b
> +#define IMAGE_SIZEOF_STD_OPTIONAL_HEADER 28
> +#define IMAGE_SIZEOF_NT_OPTIONAL32_HEADER 224
> +#define IMAGE_SIZEOF_NT_OPTIONAL64_HEADER 240
> +#define IMAGE_SUBSYSTEM_NATIVE 1
> +#define IMAGE_SUBSYSTEM_WINDOWS_GUI 2
> +#define IMAGE_SUBSYSTEM_WINDOWS_CUI 3
The idea was to use names different from the original Windows defines.
IMAGE_FILE_MACHINE_I386 already exists as I386MAGIC, so the AMD64
definition should follow the lead:
#define AMD64MAGIC 0x8664
And the IMAGE_foo definitions would collide with Windows if the
Windows headers are included as well, so we should better use
IMG_foo rather than IMAGE_foo.
The rest of the patch looks good to me. I'm just wondering what to
do with the mix of `unsigned {short,long}' and uint32_t. Wouldn't
it be better if we replace all unsigned short with uint16_t and all
unsigned long with uintptr_t?
Corinna
--
Corinna Vinschen Please, send mails regarding Cygwin to
Cygwin Maintainer cygwin AT cygwin DOT com
Red Hat