From: nobu.nakada@... Date: 2001-05-15T20:16:54+09:00 Subject: [ruby-dev:13201] Re: rb_gc_stack_start なかだです。 configure.in の方もおかしくて常に __libc_stack_end が有効になっ てたり、gc.c で windows.h も include しなきゃならなかったりした のでもう一度だけ全部出し直します。 Index: configure.in =================================================================== RCS file: /cvs/ruby/src/ruby/configure.in,v retrieving revision 1.88 diff -u -2 -p -r1.88 configure.in --- configure.in 2001/05/11 05:24:54 1.88 +++ configure.in 2001/05/11 10:01:11 @@ -288,4 +288,16 @@ LIBOBJS="$save_LIBOBJS" AC_STRUCT_ST_RDEV +AC_CACHE_CHECK(for stack end address, rb_cv_stack_end_address, +[rb_cv_stack_end_address=no +for addr in __libc_stack_end _SEND; do + AC_TRY_LINK( + [extern void *$addr;], + [if (!$addr) return 1;], + [rb_cv_stack_end_address="$addr"; break]) +done]) +if test $rb_cv_stack_end_address != no; then + AC_DEFINE_UNQUOTED(STACK_END_ADDRESS, $rb_cv_stack_end_address) +fi + dnl Checks for library functions. AC_TYPE_GETGROUPS Index: gc.c =================================================================== RCS file: /cvs/ruby/src/ruby/gc.c,v retrieving revision 1.67 diff -u -2 -p -r1.67 gc.c --- gc.c 2001/05/07 09:26:24 1.67 +++ gc.c 2001/05/15 10:25:26 @@ -21,4 +21,7 @@ #include #include +#ifdef _WIN32 +#include +#endif void re_free_registers _((struct re_registers*)); @@ -1017,7 +1020,13 @@ Init_stack(addr) VALUE *addr; { -#if defined(__human68k__) - extern void *_SEND; - rb_gc_stack_start = _SEND; +#if defined(_WIN32) + MEMORY_BASIC_INFORMATION m; + memset(&m, 0, sizeof(m)); + VirtualQuery(&m, &m, sizeof(m)); + /* assume stack growing downward */ + rb_gc_stack_start = (VALUE *)((char *)m.BaseAddress + m.RegionSize) - 1; +#elif defined(STACK_END_ADDRESS) + extern void *STACK_END_ADDRESS; + rb_gc_stack_start = STACK_END_ADDRESS; #elif defined(__GNUC__) && defined(USE_BUILTIN_FRAME_ADDRESS) rb_gc_stack_start = __builtin_frame_address(2); -- --- 僕の前にBugはない。 --- 僕の後ろにBugはできる。 中田 伸悦