[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