From: "U.Nakamura" Date: 2006-09-27T15:27:27+09:00 Subject: Re: okay, threading & sandbox r70 -- the latest patch Hello, Some people are complaining that they cannot compile ruby on Windows because this state continues for days. So I propose that the code should be moved simply. Index: eval.c =================================================================== RCS file: /home/cvs/ruby/eval.c,v retrieving revision 1.947 diff -u -1 -p -r1.947 eval.c --- eval.c 23 Sep 2006 21:29:47 -0000 1.947 +++ eval.c 27 Sep 2006 06:26:53 -0000 @@ -9680,59 +9680,2 @@ Init_Binding(void) -/* Windows SEH refers data on the stack. */ -#undef SAVE_WIN32_EXCEPTION_LIST -#if defined _WIN32 || defined __CYGWIN__ -#if defined __CYGWIN__ -typedef unsigned long DWORD; -#endif - -static inline DWORD -win32_get_exception_list(void) -{ - DWORD p; -# if defined _MSC_VER -# ifdef _M_IX86 -# define SAVE_WIN32_EXCEPTION_LIST -# if _MSC_VER >= 1310 - /* warning: unsafe assignment to fs:0 ... this is ok */ -# pragma warning(disable: 4733) -# endif - __asm mov eax, fs:[0]; - __asm mov p, eax; -# endif -# elif defined __GNUC__ -# ifdef __i386__ -# define SAVE_WIN32_EXCEPTION_LIST - __asm__("movl %%fs:0,%0" : "=r"(p)); -# endif -# elif defined __BORLANDC__ -# define SAVE_WIN32_EXCEPTION_LIST - __emit__(0x64, 0xA1, 0, 0, 0, 0); /* mov eax, fs:[0] */ - p = _EAX; -# endif - return p; -} - -static inline void -win32_set_exception_list(DWORD p) -{ -# if defined _MSC_VER -# ifdef _M_IX86 - __asm mov eax, p; - __asm mov fs:[0], eax; -# endif -# elif defined __GNUC__ -# ifdef __i386__ - __asm__("movl %0,%%fs:0" :: "r"(p)); -# endif -# elif defined __BORLANDC__ - _EAX = p; - __emit__(0x64, 0xA3, 0, 0, 0, 0); /* mov fs:[0], eax */ -# endif -} - -#if !defined SAVE_WIN32_EXCEPTION_LIST && !defined _WIN32_WCE -# error unsupported platform -#endif -#endif - int rb_thread_pending = 0; Index: node.h =================================================================== RCS file: /home/cvs/ruby/node.h,v retrieving revision 1.78 diff -u -1 -p -r1.78 node.h --- node.h 23 Sep 2006 21:29:47 -0000 1.78 +++ node.h 27 Sep 2006 06:26:53 -0000 @@ -420,2 +420,59 @@ typedef struct thread * rb_thread_t; +/* Windows SEH refers data on the stack. */ +#undef SAVE_WIN32_EXCEPTION_LIST +#if defined _WIN32 || defined __CYGWIN__ +#if defined __CYGWIN__ +typedef unsigned long DWORD; +#endif + +static inline DWORD +win32_get_exception_list(void) +{ + DWORD p; +# if defined _MSC_VER +# ifdef _M_IX86 +# define SAVE_WIN32_EXCEPTION_LIST +# if _MSC_VER >= 1310 + /* warning: unsafe assignment to fs:0 ... this is ok */ +# pragma warning(disable: 4733) +# endif + __asm mov eax, fs:[0]; + __asm mov p, eax; +# endif +# elif defined __GNUC__ +# ifdef __i386__ +# define SAVE_WIN32_EXCEPTION_LIST + __asm__("movl %%fs:0,%0" : "=r"(p)); +# endif +# elif defined __BORLANDC__ +# define SAVE_WIN32_EXCEPTION_LIST + __emit__(0x64, 0xA1, 0, 0, 0, 0); /* mov eax, fs:[0] */ + p = _EAX; +# endif + return p; +} + +static inline void +win32_set_exception_list(DWORD p) +{ +# if defined _MSC_VER +# ifdef _M_IX86 + __asm mov eax, p; + __asm mov fs:[0], eax; +# endif +# elif defined __GNUC__ +# ifdef __i386__ + __asm__("movl %0,%%fs:0" :: "r"(p)); +# endif +# elif defined __BORLANDC__ + _EAX = p; + __emit__(0x64, 0xA3, 0, 0, 0, 0); /* mov fs:[0], eax */ +# endif +} + +#if !defined SAVE_WIN32_EXCEPTION_LIST && !defined _WIN32_WCE +# error unsupported platform +#endif +#endif + struct thread { Regards, In message "Re: okay, threading & sandbox r70 -- the latest patch" on Sep.26,2006 12:56:29, wrote: | > > +struct thread { | > > + struct thread *next, *prev; | > > + rb_jmpbuf_t context; | > > +#ifdef SAVE_WIN32_EXCEPTION_LIST | > > + DWORD win32_exception_list; | > > +#endif | > > | > > This macro, SAVE_WIN32_EXCEPTION_LIST isn't defined here in node.h. | > | > Should this change in node.h? Or should I move to ruby.h or, perhaps, a new | > rubythread.h? | | Moving the separated include after the macro is defined? | | Maybe the last one if you want to move. FYI, yarv has moved | rb_thread_t to eval_intern.h, and struct thread to eval_thread.c. -- U.Nakamura