[PATCH v2 1/2] Cygwin: cache IsWow64Process2 host arch in wincap.
Corinna Vinschen
corinna-cygwin@cygwin.com
Wed Nov 27 15:24:28 GMT 2024
On Nov 26 10:16, Jeremy Drake via Cygwin-patches wrote:
> On Tue, 26 Nov 2024, Corinna Vinschen wrote:
>
> > On Nov 25 11:21, Jeremy Drake via Cygwin-patches wrote:
> > > +extern const IMAGE_DOS_HEADER
> > > +dosheader __asm__ ("__image_base__");
> >
> > On second thought, shouldn't we just use GetModuleHandle ("cygwin1.dll")
> > instead of going asm here?
>
> I was hoping to avoid another place where MSYS2 would have to patch the
> name change to msys-2.0.dll. I almost went with GetModuleHandleEx
> (GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS|GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT)
> but the overhead of either call seemed silly when the linker already knows
> the address...
Got it.
> If the __asm__ setting the symbol name is an issue, pseudo-reloc.cc also
> accesses __image_base__ like so:
> #ifndef __MINGW_LSYMBOL
> #define __MINGW_LSYMBOL(sym) sym
> #endif
>
> extern char __MINGW_LSYMBOL(_image_base__);
>
> &__MINGW_LSYMBOL(_image_base__)
>
> I found the __asm__ method cleaner. But I could name the extern
> __MINGW_LSYMBOL(_image_base__) instead of dosheader to avoid __asm__.
No, that's not necessary. Actually, this code is only used in the
non-Cygwin (Mingw-w64) case. For Cygwin, it refers to
per_process::image_base, which is the image base of the executable, not
the image base of the Cygwin DLL.
But you don't really need the asm. Just define extern const
IMAGE_DOS_HEADER __image_base__ and use it in the expression extracting
FileHeader.Machine.
Another point: Theoretically we want wincap to contain static data,
which will get inherited by child processes.
So, would you mind to add a member cygwin_mach and change
cygwin_machine() to an inline function just returning cygwin_mach?
Thanks,
Corinna
More information about the Cygwin-patches
mailing list