Commit 0c2c7562 authored by Yaakov Selkowitz's avatar Yaakov Selkowitz Committed by Jon Turney

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: default avatarYaakov Selkowitz <>
Reviewed-by: Jon Turney's avatarJon TURNEY <>
Reviewed-by: default avatarColin Harrison <>
parent 171d82fa
......@@ -266,7 +266,12 @@ extern Widget _XtWindowedAncestor( /* internal; implementation-dependent */
Widget /* object */
extern void _XtInherit(
#if (defined(_WIN32) || defined(__CYGWIN__)) && !defined(LIBXT_COMPILATION)
void _XtInherit(
......@@ -245,11 +245,20 @@ void _XtInherit(void)
* cygwin-xfree:
#ifdef __x86_64__
asm (".section .trampoline, \"dwx\" \n\
.globl _XtInherit \n\
_XtInherit: \n\
jmp *_y(%rip) \n\
_y: .quad __XtInherit \n\
.text \n");
asm (".data\n\
.globl __XtInherit \n\
__XtInherit: jmp *_y \n\
_y: .long ___XtInherit \n\
.text \n");
#define _XtInherit __XtInherit
AM_CPPFLAGS = -I$(top_srcdir)/include/ -I$(top_srcdir)/include/X11 \
-I$(top_builddir)/include -I$(top_builddir)/include/X11
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment