[#20320] Apollo.exeでsingleton_method_addedが効かない — Kazuhiro Yoshida <moriq@...>
もりきゅうです。
5 messages
2003/06/03
[#20335] 1.8 gsub — "H.Suzuki" <hsuzux@...>
hsuzu といいます。
7 messages
2003/06/08
[#20347] 1.8.0 preview3 schedule — matz@... (Yukihiro Matsumoto)
まつもと ゆきひろです
14 messages
2003/06/14
[#20357] Re: 1.8.0 preview3 schedule
— Koji Arai <JCA02266@...>
2003/06/16
新井です。
[#20358] Re: 1.8.0 preview3 schedule
— matz@... (Yukihiro Matsumoto)
2003/06/17
まつもと ゆきひろです
[#20360] Re: 1.8.0 preview3 schedule
— Koji Arai <JCA02266@...>
2003/06/17
新井です。
[#20362] [Oniguruma] quoting substring — kkosako@...
PerlとJavaの正規表現で実現されている
7 messages
2003/06/18
[#20389] Re: [Oniguruma] quoting substring
— Tanaka Akira <akr@...17n.org>
2003/06/19
In article <5FD2F0CF7F5D7F44B00F36870B9E78B508DE5040@SBG-EX4>,
[#20395] Re: [Oniguruma] quoting substring
— Tanaka Akira <akr@...17n.org>
2003/06/20
In article <87u1aloqtq.fsf@serein.a02.aist.go.jp>,
[#20374] case sensitivity of the names of environment variables — "U.Nakamura" <usa@...>
こんにちは、なかむら(う)です。
5 messages
2003/06/19
[#20379] locale and Marshal — Masao Mutoh <mutoh@...>
むとうです。
11 messages
2003/06/19
[#20381] Re: locale and Marshal
— matz@... (Yukihiro Matsumoto)
2003/06/19
まつもと ゆきひろです
[#20392] [BigDecimal] proposal to change specification — "Tadashi Saito" <shiba@...2.accsnet.ne.jp>
斎藤と申します。
25 messages
2003/06/20
[#20407] Re: [BigDecimal] proposal to change specification
— "Shigeo Kobayashi" <shigeo@...>
2003/06/22
小林です。
[#20412] Re: In 1.8.0 nil.to_s is not the same as "" — nobu.nakada@...
なかだです。
5 messages
2003/06/23
[#20416] ruby 1.8.0 preview3 — matz@... (Yukihiro Matsumoto)
まつもと ゆきひろです
11 messages
2003/06/23
[#20422] [BUG] SEGV on Alpha (Re: ruby 1.8.0 preview3)
— Minero Aoki <aamine@...>
2003/06/23
青木です。
[#20424] Re: [BUG] SEGV on Alpha (Re: ruby 1.8.0 preview3)
— matz@... (Yukihiro Matsumoto)
2003/06/23
まつもと ゆきひろです
[#20445] Re: *.soの autoload(PR#504) — nobu.nakada@...
なかだです。
13 messages
2003/06/24
[#20450] Re: *.soの autoload(PR#504)
— matz@... (Yukihiro Matsumoto)
2003/06/25
まつもと ゆきひろです
[#20451] Re: *.soの autoload(PR#504)
— Minero Aoki <aamine@...>
2003/06/25
青木です。
[#20454] Re: *.soのautoload(PR#504)
— nobu.nakada@...
2003/06/25
なかだです。
[#20455] Re: *.soのautoload(PR#504)
— Minero Aoki <aamine@...>
2003/06/25
青木です。
[#20457] Re: *.soのautoload(PR#504)
— matz@... (Yukihiro Matsumoto)
2003/06/25
[#20447] [BigDecimal] renaming proposal — "Tadashi Saito" <shiba@...2.accsnet.ne.jp>
斎藤です。
47 messages
2003/06/24
[#20598] Re: [BigDecimal] renaming proposal
— "Shigeo Kobayashi" <shigeo@...>
2003/07/10
小林です、またまたまとめて。
[#20600] Re: [BigDecimal] renaming proposal
— matz@... (Yukihiro Matsumoto)
2003/07/10
まつもと ゆきひろです
[#20621] Re: [BigDecimal] renaming proposal
— "Shigeo Kobayashi" <shigeo@...>
2003/07/11
小林@MAILチェック中です。
[#20628] Re: [BigDecimal] renaming proposal
— "Shigeo Kobayashi" <shigeo@...>
2003/07/11
小林です。
[#20648] Re: [BigDecimal] 標準添付案 [Re: Re: [BigDecimal] renaming proposal]
— "Shigeo Kobayashi" <shigeo@...>
2003/07/13
小林です。
[#20649] Re: [BigDecimal] 標準添付案
— "Shigeo Kobayashi" <shigeo@...>
2003/07/13
小林です。
[#20692] Re: [BigDecimal] 標準添付案 [Re: Re: [BigDecimal] renaming proposal]
— "Shigeo Kobayashi" <shigeo@...>
2003/07/16
小林です。
[#20462] 原因不明のSEGV — "yamamoto madoka" <dan@...2.so-net.ne.jp>
山本ともうします。
15 messages
2003/06/26
[#20473] Re: 原因不明のSEGV
— "yamamoto madoka" <dan@...2.so-net.ne.jp>
2003/06/27
山本です。
[#20474] Re: 原因不明のSEGV
— nobu.nakada@...
2003/06/27
なかだです。
[ruby-dev:20477] Re: 原因不明のSEGV
From:
nobu.nakada@...
Date:
2003-06-27 10:35:48 UTC
List:
ruby-dev #20477
なかだです。
At Fri, 27 Jun 2003 16:23:29 +0900,
Yukihiro Matsumoto wrote:
> また〆切と戦っています。
じゃあ+1した理由を今思い出してもらうのは無理?
> |> あら、このパッチでこちらの再現はなくなったのですが、、
> |
> |やはり+1は余分のようですね。
>
> なんか全容が理解できていないですが、[ruby-dev:20465]のパッチ
> で問題が解決したのでしょうか。ならコミットしてください。
rb_gc_mark_locations()がendの次までマークしようとするので、
thread_tの持つスタックのコピーの末尾がちょうどデータセグメント
の末尾と一致するときにSEGVになります。そもそもこのコピーは
malloc()したものなので、マージンは必要ないはずです。
"safety margin"というのが、Init_stack()で指定されたVALUEまで含
めるためということであれば、rb_gc_stack_startを変更するときかそ
れをマークするためにrb_gc_mark_locations()を呼ぶ側で何とかする
べきじゃないかと思います。
ついでにstack_growup_p()をconfigureに追い出してみたり。
Index: configure.in
===================================================================
RCS file: /cvs/ruby/src/ruby/configure.in,v
retrieving revision 1.176
diff -u -2 -p -r1.176 configure.in
--- configure.in 23 Jun 2003 19:54:41 -0000 1.176
+++ configure.in 27 Jun 2003 09:48:36 -0000
@@ -617,4 +617,28 @@ if test "$rb_cv_need_io_flush_before_see
fi
+case "$target_cpu" in
+m68*|i?86|sparc) rb_cv_stack_grow_dir=-1;;
+esac
+AC_CACHE_CHECK(stack growing direction, rb_cv_stack_grow_dir,
+ [AC_TRY_RUN([
+/* recurse to get rid of inlining */
+static int
+stack_growup_p(addr, n)
+ volatile int *addr, n;
+{
+ volatile int end;
+ if (n > 0)
+ return *addr = stack_growup_p(addr, n - 1);
+ else
+ return (&end > addr);
+}
+int main()
+{
+ int x;
+ return stack_growup_p(&x, 10);
+}
+], rb_cv_stack_grow_dir=-1, rb_cv_stack_grow_dir=+1, rb_cv_stack_grow_dir=0)])
+AC_DEFINE_UNQUOTED(STACK_GROW_DIRECTION, $rb_cv_stack_grow_dir)
+
dnl default value for $KANJI
DEFAULT_KCODE="KCODE_NONE"
Index: eval.c
===================================================================
RCS file: /cvs/ruby/src/ruby/eval.c,v
retrieving revision 1.469
diff -u -2 -p -r1.469 eval.c
--- eval.c 24 Jun 2003 08:59:34 -0000 1.469
+++ eval.c 27 Jun 2003 08:22:57 -0000
@@ -8113,6 +8113,5 @@ rb_thread_save_context(th)
len = ruby_stack_length(&pos);
th->stk_len = 0;
- th->stk_pos = (rb_gc_stack_start<pos)?rb_gc_stack_start
- :rb_gc_stack_start - len;
+ th->stk_pos = pos;
if (len > th->stk_max) {
REALLOC_N(th->stk_ptr, VALUE, len);
@@ -8212,4 +8211,9 @@ rb_thread_restore_context(th, exit)
if (!th->stk_ptr) rb_bug("unsaved context");
+#if STACK_GROW_DIRECTION < 0
+ if (&v > th->stk_pos) stack_extend(th, exit);
+#elif STACK_GROW_DIRECTION > 0
+ if (&v < th->stk_pos + th->stk_len) stack_extend(th, exit);
+#else
if (&v < rb_gc_stack_start) {
/* Stack grows downward */
@@ -8220,4 +8224,5 @@ rb_thread_restore_context(th, exit)
if (&v < th->stk_pos + th->stk_len) stack_extend(th, exit);
}
+#endif
rb_trap_immediate = 0; /* inhibit interrupts from here */
Index: gc.c
===================================================================
RCS file: /cvs/ruby/src/ruby/gc.c,v
retrieving revision 1.137
diff -u -2 -p -r1.137 gc.c
--- gc.c 16 Jun 2003 07:14:36 -0000 1.137
+++ gc.c 27 Jun 2003 09:47:08 -0000
@@ -377,8 +377,28 @@ static unsigned int STACK_LEVEL_MAX = 65
#if defined(sparc) || defined(__sparc__)
# define STACK_LENGTH (rb_gc_stack_start - STACK_END + 0x80)
+#elif STACK_GROW_DIRECTION < 0
+# define STACK_LENGTH (rb_gc_stack_start - STACK_END)
+#elif STACK_GROW_DIRECTION > 0
+# define STACK_LENGTH (STACK_END - rb_gc_stack_start)
#else
# define STACK_LENGTH ((STACK_END < rb_gc_stack_start) ? rb_gc_stack_start - STACK_END\
: STACK_END - rb_gc_stack_start)
#endif
+#if STACK_GROW_DIRECTION > 0
+# define STACK_UPPER(x, a, b) a
+#elif STACK_GROW_DIRECTION < 0
+# define STACK_UPPER(x, a, b) b
+#else
+static int
+stack_growup_p(addr)
+ VALUE *addr;
+{
+ SET_STACK_END;
+
+ if (STACK_END > addr) return Qtrue;
+ return Qfalse;
+}
+# define STACK_UPPER(x, a, b) (stack_growup_p(x) ? a : b)
+#endif
#define GC_WARTER_MARK 512
@@ -394,5 +414,5 @@ ruby_stack_length(p)
{
SET_STACK_END;
- if (p) *p = STACK_END;
+ if (p) *p = STACK_UPPER(STACK_END, rb_gc_stack_start, STACK_END);
return STACK_LENGTH;
}
@@ -545,5 +565,5 @@ rb_gc_mark_locations(start, end)
end = tmp;
}
- n = end - start + 1;
+ n = end - start;
mark_locations_array(start,n);
}
@@ -1228,8 +1248,17 @@ rb_gc()
setjmp(save_regs_gc_mark);
mark_locations_array((VALUE*)save_regs_gc_mark, sizeof(save_regs_gc_mark) / sizeof(VALUE *));
+#if STACK_GROW_DIRECTION < 0
+ rb_gc_mark_locations((VALUE*)STACK_END, rb_gc_stack_start);
+#elif STACK_GROW_DIRECTION > 0
rb_gc_mark_locations(rb_gc_stack_start, (VALUE*)STACK_END);
+#else
+ if ((VALUE*)STACK_END < rb_gc_stack_start)
+ rb_gc_mark_locations((VALUE*)STACK_END, rb_gc_stack_start);
+ else
+ rb_gc_mark_locations(rb_gc_stack_start, (VALUE*)STACK_END);
+#endif
#if defined(__human68k__) || defined(__mc68000__)
- rb_gc_mark_locations((VALUE*)((char*)rb_gc_stack_start + 2),
- (VALUE*)((char*)STACK_END + 2));
+ rb_gc_mark_locations((VALUE*)((char*)STACK_END + 2),
+ (VALUE*)((char*)rb_gc_stack_start + 2));
#endif
rb_gc_mark_threads();
@@ -1269,16 +1298,4 @@ rb_gc_start()
}
-#if !defined(__human68k__)
-static int
-stack_growup_p(addr)
- VALUE *addr;
-{
- SET_STACK_END;
-
- if (STACK_END > addr) return Qtrue;
- return Qfalse;
-}
-#endif
-
void
Init_stack(addr)
@@ -1291,12 +1308,8 @@ Init_stack(addr)
if (!addr) addr = (VALUE *)&addr;
if (rb_gc_stack_start) {
- if (stack_growup_p(addr)) {
- if (rb_gc_stack_start > addr)
- rb_gc_stack_start = addr;
- }
- else {
- if (rb_gc_stack_start < addr)
- rb_gc_stack_start = addr;
- }
+ if (STACK_UPPER(&addr,
+ rb_gc_stack_start > --addr,
+ rb_gc_stack_start < ++addr))
+ rb_gc_stack_start = addr;
return;
}
--
--- 僕の前にBugはない。
--- 僕の後ろにBugはできる。
中田 伸悦