diff --git a/ChangeLog b/ChangeLog index e40ccdb771..1aa77dabaf 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +Thu Jun 28 05:01:56 2007 Koichi Sasada + + * common.mk (run.gdb): fix to load $(srcdir)/.gdbinit + + * vm.c (rb_vm_set_finish_env): add a cast. + + * vm.h: support __fastcall for MSVC. + Thu Jun 28 02:12:08 2007 Koichi Sasada * bootstraptest/runner.rb: fix to untouch $:. diff --git a/common.mk b/common.mk index 3e335561d9..d9b0f15c75 100644 --- a/common.mk +++ b/common.mk @@ -663,6 +663,7 @@ run.gdb: echo '# handle SIGPIPE nostop' >> run.gdb echo '# b rb_longjmp' >> run.gdb echo source $(srcdir)/breakpoints.gdb >> run.gdb + echo source $(srcdir)/.gdbinit >> run.gdb echo run >> run.gdb gdb: miniruby$(EXEEXT) run.gdb PHONY diff --git a/vm.c b/vm.c index 7dc292e112..27d6d42de9 100644 --- a/vm.c +++ b/vm.c @@ -52,7 +52,7 @@ rb_vm_set_finish_env(rb_thread_t *th) vm_push_frame(th, 0, FRAME_MAGIC_FINISH, Qnil, th->cfp->lfp[0], 0, th->cfp->sp, 0, 1); - th->cfp->pc = &yarv_finish_insn_seq[0]; + th->cfp->pc = (VALUE *)&yarv_finish_insn_seq[0]; return Qtrue; } diff --git a/vm.h b/vm.h index 13781bbe68..3b87033344 100644 --- a/vm.h +++ b/vm.h @@ -97,23 +97,32 @@ error ! /************************************************/ #elif OPT_CALL_THREADED_CODE -#if __GCC__ -#define FASTCALL __attribute__ ((fastcall)) -#else -#define FASTCALL -#endif - - #define LABEL(x) insn_func_##x #define ELABEL(x) #define LABEL_PTR(x) &LABEL(x) +#if __GCC__ +#define FASTCALL(x) x __attribute__ ((fastcall)) +#define FASTCALL_KWD_GCC __attribute__ ((fastcall)) +#define FASTCALL_KWD_VC + +#elif defined(_MSC_VER) +#define FASTCALL(x) __fastcall x +#define FASTCALL_KWD_GCC +#define FASTCALL_KWD_VC __fastcall +#else + +#define FASTCALL +#define FASTCALL_KWD_GCC +#define FASTCALL_KWD_VC +#endif + typedef rb_control_frame_t * - (*insn_func_type) (rb_thread_t *, rb_control_frame_t *)FASTCALL; + (FASTCALL_KWD_VC *insn_func_type)(rb_thread_t *, rb_control_frame_t *) FASTCALL_KWD_GCC; #define INSN_ENTRY(insn) \ static rb_control_frame_t * \ - LABEL(insn)(rb_thread_t *th, rb_control_frame_t *reg_cfp) FASTCALL { + FASTCALL(LABEL(insn)(rb_thread_t *th, rb_control_frame_t *reg_cfp)) { #define END_INSN(insn) return reg_cfp;}