[prev in list] [next in list] [prev in thread] [next in thread] 

List:       ruby-core
Subject:    Re: okay, threading & sandbox r70 -- the latest patch
From:       "U.Nakamura" <usa () garbagecollect ! jp>
Date:       2006-09-27 6:27:27
Message-ID: 20060927152403.1EB3.USA () garbagecollect ! jp
[Download RAW message or body]

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, <nobu@ruby-lang.org> 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 <usa@garbagecollect.jp>



[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic