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.