well, google is my friend, i uswd the gcc wrapper with wine
../wine-1.7.8/configure --enable-win64 --disable-option-checking --without-oss --without-cms --without-v4l --without-alsa --without-audioio --without-capi --with-coreaudio --without-esd --without-hal --without-jack --with-xcomposite --with-xcursor --with-xinerama --with-xinput --with-xml --with-xrandr --with-xrender --with-xshape --with-xshm --with-xslt --with-xxf86vm --with-x --without-fontconfig --without-gphoto --without-gstreamer --without-dbus --disable-win16 --verbose
and
in the _ms_vs_list headers: #ifndef __ms_va_list //HACK //# if defined(__x86_64__) && defined (__GNUC__) //# define __ms_va_list __builtin_ms_va_list //# define __ms_va_start(list,arg) __builtin_ms_va_start(list,arg) //# define __ms_va_end(list) __builtin_ms_va_end(list) //# else # define __ms_va_list va_list # define __ms_va_start(list,arg) va_start(list,arg) # define __ms_va_end(list) va_end(list) //# endif #endif
(_va.list.h): typedef __darwin_va_list va_list; or somewhere else...
and in macho-module.c: static BOOL macho_load_file(struct process* pcs, const WCHAR* filename, ... if (!ret) { static void* dyld_all_image_infos_addr;
/* Our next best guess is that dyld was loaded at its base address and we can find the dyld image infos address by looking up its symbol. */ if (!dyld_all_image_infos_addr) { //HACK struct nlist_64 nl[2]; memset(nl, 0, sizeof(nl));
task_dyld_info_data_t dyld_info; mach_msg_type_number_t count = TASK_DYLD_INFO_COUNT; task_info(mach_task_self(), TASK_DYLD_INFO, (task_info_t)&dyld_info, &count); nl[0].n_un.n_strx = (struct dyld_all_image_infos *)dyld_info.all_image_info_addr; // if (!nlist_64("/usr/lib/dyld", nl)) //<---- here comes a linker error if i enable this //------------ dyld_all_image_infos_addr = (void*)nl[0].n_value;
now, there is a problem with: signal_x86_64.c. it has not the correct signal handlers for darwin. for example: context->u.FltSave = (XMM_SAVE_AREA32*)*FPU_sig(sigcontext); error. because
typedef _STRUCT_FP_CONTROL __darwin_fp_control_t; #else /* !__DARWIN_UNIX03 */ #define _STRUCT_FP_CONTROL struct fp_control _STRUCT_FP_CONTROL { unsigned short invalid :1, denorm :1, zdiv :1, ovrfl :1, undfl :1, precis :1, :2, pc :2, ... }; typedef _STRUCT_FP_CONTROL fp_control_t;
in
_STRUCT_X86_FLOAT_STATE32 <--- this is the type of the sigcontext in darwin { int __fpu_reserved[2]; _STRUCT_FP_CONTROL __fpu_fcw; /* x87 FPU control word */ <---theese are structs _STRUCT_FP_STATUS __fpu_fsw; /* x87 FPU status word */ <----... __uint8_t __fpu_ftw; /* x87 FPU tag word */ __uint8_t __fpu_rsrv1; /* reserved */ ...
and in typedef struct _XMM_SAVE_AREA32 { WORD ControlWord; /* 000 */ <---- WORD values! WORD StatusWord; /* 002 */ <---- BYTE TagWord; /* 004 */
so, i dunno which values are actually being used until deeper look into wine code
-- View this message in context: http://wine.1045685.n5.nabble.com/Wine-64-bit-tp5788608p5823429.html Sent from the Wine - Devel mailing list archive at Nabble.com.