From 0c2c7562426aec7bdf9b54a7d6993153e0bce489 Mon Sep 17 00:00:00 2001 From: Yaakov Selkowitz Date: Sun, 10 Aug 2014 12:44:26 -0500 Subject: Fix _XtInherit on x86_64 Windows As noted in Initialize.c, _XtInherit needs special treatment as it's both called as a function, and used as a value to compare with. We need to change this trickery for x86_64, as the symbols are no longer underscore prefixed, and the address is 64 bits. We also cannot place the trampoline in the .data section, as it may be marked no-execute, so we use a special section for it instead. v2: Uses of XtInherit must also be marked dllimport, so that they do not use a thunk, but instead indirect via the __imp_XtInherit auto-import. This avoids problems with an incorrect relocation being calculated in the case where libXt and a library using it (e.g. libXaw/libXaw3d/libXm/etc.) are loaded more than 2GiB apart from each other. This is enough to build a working libXt for Cygwin x86_64, because it uses the LP64 data model. I believe that more patches are needed for libXt to work correctly when built for the Windows LLP64 data model. Signed-off-by: Yaakov Selkowitz Reviewed-by: Jon TURNEY Reviewed-by: Colin Harrison --- include/X11/IntrinsicP.h | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) (limited to 'include') diff --git a/include/X11/IntrinsicP.h b/include/X11/IntrinsicP.h index bb6570b..f2ded6f 100644 --- a/include/X11/IntrinsicP.h +++ b/include/X11/IntrinsicP.h @@ -266,7 +266,12 @@ extern Widget _XtWindowedAncestor( /* internal; implementation-dependent */ Widget /* object */ ); -extern void _XtInherit( +#if (defined(_WIN32) || defined(__CYGWIN__)) && !defined(LIBXT_COMPILATION) +__declspec(dllimport) +#else +extern +#endif +void _XtInherit( void ); -- cgit v1.2.1