Wine 64 bit

strooka strooka_ace at yahoo.de
Tue Jan 6 07:53:21 CST 2015


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.



More information about the wine-devel mailing list