зеркало из https://github.com/github/ruby.git
Родитель
e2b6289bab
Коммит
72aba64fff
21
common.mk
21
common.mk
|
@ -3058,7 +3058,6 @@ compile.$(OBJEXT): {$(VPATH)}debug_counter.h
|
|||
compile.$(OBJEXT): {$(VPATH)}defines.h
|
||||
compile.$(OBJEXT): {$(VPATH)}encindex.h
|
||||
compile.$(OBJEXT): {$(VPATH)}encoding.h
|
||||
compile.$(OBJEXT): {$(VPATH)}gc.h
|
||||
compile.$(OBJEXT): {$(VPATH)}id.h
|
||||
compile.$(OBJEXT): {$(VPATH)}id_table.h
|
||||
compile.$(OBJEXT): {$(VPATH)}insns.def
|
||||
|
@ -3461,11 +3460,11 @@ cont.$(OBJEXT): {$(VPATH)}defines.h
|
|||
cont.$(OBJEXT): {$(VPATH)}encoding.h
|
||||
cont.$(OBJEXT): {$(VPATH)}eval_intern.h
|
||||
cont.$(OBJEXT): {$(VPATH)}fiber/scheduler.h
|
||||
cont.$(OBJEXT): {$(VPATH)}gc.h
|
||||
cont.$(OBJEXT): {$(VPATH)}id.h
|
||||
cont.$(OBJEXT): {$(VPATH)}id_table.h
|
||||
cont.$(OBJEXT): {$(VPATH)}intern.h
|
||||
cont.$(OBJEXT): {$(VPATH)}internal.h
|
||||
cont.$(OBJEXT): {$(VPATH)}internal/gc.h
|
||||
cont.$(OBJEXT): {$(VPATH)}internal/abi.h
|
||||
cont.$(OBJEXT): {$(VPATH)}internal/anyargs.h
|
||||
cont.$(OBJEXT): {$(VPATH)}internal/arithmetic.h
|
||||
|
@ -3673,11 +3672,11 @@ debug.$(OBJEXT): {$(VPATH)}defines.h
|
|||
debug.$(OBJEXT): {$(VPATH)}encindex.h
|
||||
debug.$(OBJEXT): {$(VPATH)}encoding.h
|
||||
debug.$(OBJEXT): {$(VPATH)}eval_intern.h
|
||||
debug.$(OBJEXT): {$(VPATH)}gc.h
|
||||
debug.$(OBJEXT): {$(VPATH)}id.h
|
||||
debug.$(OBJEXT): {$(VPATH)}id_table.h
|
||||
debug.$(OBJEXT): {$(VPATH)}intern.h
|
||||
debug.$(OBJEXT): {$(VPATH)}internal.h
|
||||
debug.$(OBJEXT): {$(VPATH)}internal/gc.h
|
||||
debug.$(OBJEXT): {$(VPATH)}internal/abi.h
|
||||
debug.$(OBJEXT): {$(VPATH)}internal/anyargs.h
|
||||
debug.$(OBJEXT): {$(VPATH)}internal/arithmetic.h
|
||||
|
@ -6373,11 +6372,11 @@ eval.$(OBJEXT): {$(VPATH)}eval_error.c
|
|||
eval.$(OBJEXT): {$(VPATH)}eval_intern.h
|
||||
eval.$(OBJEXT): {$(VPATH)}eval_jump.c
|
||||
eval.$(OBJEXT): {$(VPATH)}fiber/scheduler.h
|
||||
eval.$(OBJEXT): {$(VPATH)}gc.h
|
||||
eval.$(OBJEXT): {$(VPATH)}id.h
|
||||
eval.$(OBJEXT): {$(VPATH)}id_table.h
|
||||
eval.$(OBJEXT): {$(VPATH)}intern.h
|
||||
eval.$(OBJEXT): {$(VPATH)}internal.h
|
||||
eval.$(OBJEXT): {$(VPATH)}internal/gc.h
|
||||
eval.$(OBJEXT): {$(VPATH)}internal/abi.h
|
||||
eval.$(OBJEXT): {$(VPATH)}internal/anyargs.h
|
||||
eval.$(OBJEXT): {$(VPATH)}internal/arithmetic.h
|
||||
|
@ -6822,7 +6821,6 @@ gc.$(OBJEXT): {$(VPATH)}defines.h
|
|||
gc.$(OBJEXT): {$(VPATH)}encoding.h
|
||||
gc.$(OBJEXT): {$(VPATH)}eval_intern.h
|
||||
gc.$(OBJEXT): {$(VPATH)}gc.c
|
||||
gc.$(OBJEXT): {$(VPATH)}gc.h
|
||||
gc.$(OBJEXT): {$(VPATH)}gc.rbinc
|
||||
gc.$(OBJEXT): {$(VPATH)}id.h
|
||||
gc.$(OBJEXT): {$(VPATH)}id_table.h
|
||||
|
@ -8045,7 +8043,6 @@ iseq.$(OBJEXT): {$(VPATH)}debug_counter.h
|
|||
iseq.$(OBJEXT): {$(VPATH)}defines.h
|
||||
iseq.$(OBJEXT): {$(VPATH)}encoding.h
|
||||
iseq.$(OBJEXT): {$(VPATH)}eval_intern.h
|
||||
iseq.$(OBJEXT): {$(VPATH)}gc.h
|
||||
iseq.$(OBJEXT): {$(VPATH)}id.h
|
||||
iseq.$(OBJEXT): {$(VPATH)}id_table.h
|
||||
iseq.$(OBJEXT): {$(VPATH)}insns.def
|
||||
|
@ -9749,7 +9746,6 @@ mjit.$(OBJEXT): {$(VPATH)}debug_counter.h
|
|||
mjit.$(OBJEXT): {$(VPATH)}defines.h
|
||||
mjit.$(OBJEXT): {$(VPATH)}dln.h
|
||||
mjit.$(OBJEXT): {$(VPATH)}encoding.h
|
||||
mjit.$(OBJEXT): {$(VPATH)}gc.h
|
||||
mjit.$(OBJEXT): {$(VPATH)}id.h
|
||||
mjit.$(OBJEXT): {$(VPATH)}id_table.h
|
||||
mjit.$(OBJEXT): {$(VPATH)}insns.def
|
||||
|
@ -11175,7 +11171,6 @@ proc.$(OBJEXT): {$(VPATH)}constant.h
|
|||
proc.$(OBJEXT): {$(VPATH)}defines.h
|
||||
proc.$(OBJEXT): {$(VPATH)}encoding.h
|
||||
proc.$(OBJEXT): {$(VPATH)}eval_intern.h
|
||||
proc.$(OBJEXT): {$(VPATH)}gc.h
|
||||
proc.$(OBJEXT): {$(VPATH)}id.h
|
||||
proc.$(OBJEXT): {$(VPATH)}id_table.h
|
||||
proc.$(OBJEXT): {$(VPATH)}intern.h
|
||||
|
@ -11614,7 +11609,6 @@ ractor.$(OBJEXT): {$(VPATH)}constant.h
|
|||
ractor.$(OBJEXT): {$(VPATH)}debug_counter.h
|
||||
ractor.$(OBJEXT): {$(VPATH)}defines.h
|
||||
ractor.$(OBJEXT): {$(VPATH)}encoding.h
|
||||
ractor.$(OBJEXT): {$(VPATH)}gc.h
|
||||
ractor.$(OBJEXT): {$(VPATH)}id.h
|
||||
ractor.$(OBJEXT): {$(VPATH)}id_table.h
|
||||
ractor.$(OBJEXT): {$(VPATH)}intern.h
|
||||
|
@ -14163,7 +14157,6 @@ shape.$(OBJEXT): {$(VPATH)}constant.h
|
|||
shape.$(OBJEXT): {$(VPATH)}debug_counter.h
|
||||
shape.$(OBJEXT): {$(VPATH)}defines.h
|
||||
shape.$(OBJEXT): {$(VPATH)}encoding.h
|
||||
shape.$(OBJEXT): {$(VPATH)}gc.h
|
||||
shape.$(OBJEXT): {$(VPATH)}id.h
|
||||
shape.$(OBJEXT): {$(VPATH)}id_table.h
|
||||
shape.$(OBJEXT): {$(VPATH)}intern.h
|
||||
|
@ -15132,7 +15125,6 @@ string.$(OBJEXT): {$(VPATH)}debug_counter.h
|
|||
string.$(OBJEXT): {$(VPATH)}defines.h
|
||||
string.$(OBJEXT): {$(VPATH)}encindex.h
|
||||
string.$(OBJEXT): {$(VPATH)}encoding.h
|
||||
string.$(OBJEXT): {$(VPATH)}gc.h
|
||||
string.$(OBJEXT): {$(VPATH)}id.h
|
||||
string.$(OBJEXT): {$(VPATH)}id_table.h
|
||||
string.$(OBJEXT): {$(VPATH)}intern.h
|
||||
|
@ -15573,7 +15565,6 @@ symbol.$(OBJEXT): {$(VPATH)}constant.h
|
|||
symbol.$(OBJEXT): {$(VPATH)}debug_counter.h
|
||||
symbol.$(OBJEXT): {$(VPATH)}defines.h
|
||||
symbol.$(OBJEXT): {$(VPATH)}encoding.h
|
||||
symbol.$(OBJEXT): {$(VPATH)}gc.h
|
||||
symbol.$(OBJEXT): {$(VPATH)}id.c
|
||||
symbol.$(OBJEXT): {$(VPATH)}id.h
|
||||
symbol.$(OBJEXT): {$(VPATH)}id_table.c
|
||||
|
@ -15793,7 +15784,6 @@ thread.$(OBJEXT): {$(VPATH)}defines.h
|
|||
thread.$(OBJEXT): {$(VPATH)}encoding.h
|
||||
thread.$(OBJEXT): {$(VPATH)}eval_intern.h
|
||||
thread.$(OBJEXT): {$(VPATH)}fiber/scheduler.h
|
||||
thread.$(OBJEXT): {$(VPATH)}gc.h
|
||||
thread.$(OBJEXT): {$(VPATH)}hrtime.h
|
||||
thread.$(OBJEXT): {$(VPATH)}id.h
|
||||
thread.$(OBJEXT): {$(VPATH)}id_table.h
|
||||
|
@ -16388,7 +16378,6 @@ transient_heap.$(OBJEXT): {$(VPATH)}constant.h
|
|||
transient_heap.$(OBJEXT): {$(VPATH)}debug.h
|
||||
transient_heap.$(OBJEXT): {$(VPATH)}debug_counter.h
|
||||
transient_heap.$(OBJEXT): {$(VPATH)}defines.h
|
||||
transient_heap.$(OBJEXT): {$(VPATH)}gc.h
|
||||
transient_heap.$(OBJEXT): {$(VPATH)}id_table.h
|
||||
transient_heap.$(OBJEXT): {$(VPATH)}intern.h
|
||||
transient_heap.$(OBJEXT): {$(VPATH)}internal.h
|
||||
|
@ -17178,7 +17167,6 @@ vm.$(OBJEXT): {$(VPATH)}defines.h
|
|||
vm.$(OBJEXT): {$(VPATH)}defs/opt_operand.def
|
||||
vm.$(OBJEXT): {$(VPATH)}encoding.h
|
||||
vm.$(OBJEXT): {$(VPATH)}eval_intern.h
|
||||
vm.$(OBJEXT): {$(VPATH)}gc.h
|
||||
vm.$(OBJEXT): {$(VPATH)}id.h
|
||||
vm.$(OBJEXT): {$(VPATH)}id_table.h
|
||||
vm.$(OBJEXT): {$(VPATH)}insns.def
|
||||
|
@ -17608,7 +17596,6 @@ vm_dump.$(OBJEXT): {$(VPATH)}backward/2/stdarg.h
|
|||
vm_dump.$(OBJEXT): {$(VPATH)}config.h
|
||||
vm_dump.$(OBJEXT): {$(VPATH)}constant.h
|
||||
vm_dump.$(OBJEXT): {$(VPATH)}defines.h
|
||||
vm_dump.$(OBJEXT): {$(VPATH)}gc.h
|
||||
vm_dump.$(OBJEXT): {$(VPATH)}id.h
|
||||
vm_dump.$(OBJEXT): {$(VPATH)}id_table.h
|
||||
vm_dump.$(OBJEXT): {$(VPATH)}intern.h
|
||||
|
@ -17802,7 +17789,6 @@ vm_sync.$(OBJEXT): {$(VPATH)}config.h
|
|||
vm_sync.$(OBJEXT): {$(VPATH)}constant.h
|
||||
vm_sync.$(OBJEXT): {$(VPATH)}debug_counter.h
|
||||
vm_sync.$(OBJEXT): {$(VPATH)}defines.h
|
||||
vm_sync.$(OBJEXT): {$(VPATH)}gc.h
|
||||
vm_sync.$(OBJEXT): {$(VPATH)}id.h
|
||||
vm_sync.$(OBJEXT): {$(VPATH)}id_table.h
|
||||
vm_sync.$(OBJEXT): {$(VPATH)}intern.h
|
||||
|
@ -18216,7 +18202,6 @@ yjit.$(OBJEXT): {$(VPATH)}debug.h
|
|||
yjit.$(OBJEXT): {$(VPATH)}debug_counter.h
|
||||
yjit.$(OBJEXT): {$(VPATH)}defines.h
|
||||
yjit.$(OBJEXT): {$(VPATH)}encoding.h
|
||||
yjit.$(OBJEXT): {$(VPATH)}gc.h
|
||||
yjit.$(OBJEXT): {$(VPATH)}id.h
|
||||
yjit.$(OBJEXT): {$(VPATH)}id_table.h
|
||||
yjit.$(OBJEXT): {$(VPATH)}insns.def
|
||||
|
|
|
@ -17,7 +17,6 @@
|
|||
#endif
|
||||
|
||||
#include "encindex.h"
|
||||
#include "gc.h"
|
||||
#include "id_table.h"
|
||||
#include "internal.h"
|
||||
#include "internal/array.h"
|
||||
|
@ -25,6 +24,7 @@
|
|||
#include "internal/complex.h"
|
||||
#include "internal/encoding.h"
|
||||
#include "internal/error.h"
|
||||
#include "internal/gc.h"
|
||||
#include "internal/hash.h"
|
||||
#include "internal/numeric.h"
|
||||
#include "internal/object.h"
|
||||
|
|
2
cont.c
2
cont.c
|
@ -26,10 +26,10 @@ extern int madvise(caddr_t, size_t, int);
|
|||
#include COROUTINE_H
|
||||
|
||||
#include "eval_intern.h"
|
||||
#include "gc.h"
|
||||
#include "internal.h"
|
||||
#include "internal/cont.h"
|
||||
#include "internal/error.h"
|
||||
#include "internal/gc.h"
|
||||
#include "internal/proc.h"
|
||||
#include "internal/sanitizers.h"
|
||||
#include "internal/warnings.h"
|
||||
|
|
2
debug.c
2
debug.c
|
@ -118,7 +118,7 @@ ruby_debug_printf(const char *format, ...)
|
|||
va_end(ap);
|
||||
}
|
||||
|
||||
#include "gc.h"
|
||||
#include "internal/gc.h"
|
||||
|
||||
VALUE
|
||||
ruby_debug_print_value(int level, int debug_level, const char *header, VALUE obj)
|
||||
|
|
2
eval.c
2
eval.c
|
@ -18,12 +18,12 @@
|
|||
#endif
|
||||
|
||||
#include "eval_intern.h"
|
||||
#include "gc.h"
|
||||
#include "internal.h"
|
||||
#include "internal/class.h"
|
||||
#include "internal/cont.h"
|
||||
#include "internal/error.h"
|
||||
#include "internal/eval.h"
|
||||
#include "internal/gc.h"
|
||||
#include "internal/hash.h"
|
||||
#include "internal/inits.h"
|
||||
#include "internal/io.h"
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
|
||||
************************************************/
|
||||
|
||||
#include "gc.h"
|
||||
#include "internal/gc.h"
|
||||
#include "internal/hash.h"
|
||||
#include "internal/thread.h"
|
||||
#include "internal/sanitizers.h"
|
||||
|
|
|
@ -167,7 +167,6 @@ coverage.o: $(top_srcdir)/ccan/container_of/container_of.h
|
|||
coverage.o: $(top_srcdir)/ccan/list/list.h
|
||||
coverage.o: $(top_srcdir)/ccan/str/str.h
|
||||
coverage.o: $(top_srcdir)/constant.h
|
||||
coverage.o: $(top_srcdir)/gc.h
|
||||
coverage.o: $(top_srcdir)/id_table.h
|
||||
coverage.o: $(top_srcdir)/internal.h
|
||||
coverage.o: $(top_srcdir)/internal/array.h
|
||||
|
|
|
@ -6,6 +6,7 @@ object_tracing.o: $(hdrdir)/ruby/backward.h
|
|||
object_tracing.o: $(hdrdir)/ruby/backward/2/assume.h
|
||||
object_tracing.o: $(hdrdir)/ruby/backward/2/attributes.h
|
||||
object_tracing.o: $(hdrdir)/ruby/backward/2/bool.h
|
||||
object_tracing.o: $(hdrdir)/ruby/backward/2/gcc_version_since.h
|
||||
object_tracing.o: $(hdrdir)/ruby/backward/2/inttypes.h
|
||||
object_tracing.o: $(hdrdir)/ruby/backward/2/limits.h
|
||||
object_tracing.o: $(hdrdir)/ruby/backward/2/long_long.h
|
||||
|
@ -159,8 +160,10 @@ object_tracing.o: $(hdrdir)/ruby/missing.h
|
|||
object_tracing.o: $(hdrdir)/ruby/ruby.h
|
||||
object_tracing.o: $(hdrdir)/ruby/st.h
|
||||
object_tracing.o: $(hdrdir)/ruby/subst.h
|
||||
object_tracing.o: $(top_srcdir)/gc.h
|
||||
object_tracing.o: $(top_srcdir)/internal.h
|
||||
object_tracing.o: $(top_srcdir)/internal/compilers.h
|
||||
object_tracing.o: $(top_srcdir)/internal/gc.h
|
||||
object_tracing.o: $(top_srcdir)/internal/warnings.h
|
||||
object_tracing.o: object_tracing.c
|
||||
object_tracing.o: objspace.h
|
||||
objspace.o: $(RUBY_EXTCONF_H)
|
||||
|
@ -339,7 +342,6 @@ objspace.o: $(hdrdir)/ruby/regex.h
|
|||
objspace.o: $(hdrdir)/ruby/ruby.h
|
||||
objspace.o: $(hdrdir)/ruby/st.h
|
||||
objspace.o: $(hdrdir)/ruby/subst.h
|
||||
objspace.o: $(top_srcdir)/gc.h
|
||||
objspace.o: $(top_srcdir)/id_table.h
|
||||
objspace.o: $(top_srcdir)/internal.h
|
||||
objspace.o: $(top_srcdir)/internal/array.h
|
||||
|
@ -539,7 +541,6 @@ objspace_dump.o: $(top_srcdir)/ccan/container_of/container_of.h
|
|||
objspace_dump.o: $(top_srcdir)/ccan/list/list.h
|
||||
objspace_dump.o: $(top_srcdir)/ccan/str/str.h
|
||||
objspace_dump.o: $(top_srcdir)/constant.h
|
||||
objspace_dump.o: $(top_srcdir)/gc.h
|
||||
objspace_dump.o: $(top_srcdir)/id_table.h
|
||||
objspace_dump.o: $(top_srcdir)/internal.h
|
||||
objspace_dump.o: $(top_srcdir)/internal/array.h
|
||||
|
|
|
@ -13,8 +13,8 @@
|
|||
|
||||
**********************************************************************/
|
||||
|
||||
#include "gc.h"
|
||||
#include "internal.h"
|
||||
#include "internal/gc.h"
|
||||
#include "ruby/debug.h"
|
||||
#include "objspace.h"
|
||||
|
||||
|
|
|
@ -12,10 +12,10 @@
|
|||
|
||||
**********************************************************************/
|
||||
|
||||
#include "gc.h"
|
||||
#include "internal.h"
|
||||
#include "internal/class.h"
|
||||
#include "internal/compilers.h"
|
||||
#include "internal/gc.h"
|
||||
#include "internal/hash.h"
|
||||
#include "internal/imemo.h"
|
||||
#include "internal/sanitizers.h"
|
||||
|
|
|
@ -12,11 +12,11 @@
|
|||
|
||||
**********************************************************************/
|
||||
|
||||
#include "gc.h"
|
||||
#include "id_table.h"
|
||||
#include "internal.h"
|
||||
#include "internal/array.h"
|
||||
#include "internal/class.h"
|
||||
#include "internal/gc.h"
|
||||
#include "internal/hash.h"
|
||||
#include "internal/string.h"
|
||||
#include "internal/sanitizers.h"
|
||||
|
|
1
gc.c
1
gc.c
|
@ -97,7 +97,6 @@
|
|||
#include "constant.h"
|
||||
#include "debug_counter.h"
|
||||
#include "eval_intern.h"
|
||||
#include "gc.h"
|
||||
#include "id_table.h"
|
||||
#include "internal.h"
|
||||
#include "internal/class.h"
|
||||
|
|
147
gc.h
147
gc.h
|
@ -1,147 +0,0 @@
|
|||
#ifndef RUBY_GC_H
|
||||
#define RUBY_GC_H 1
|
||||
#include "ruby/ruby.h"
|
||||
|
||||
#if defined(__x86_64__) && !defined(_ILP32) && defined(__GNUC__)
|
||||
#define SET_MACHINE_STACK_END(p) __asm__ __volatile__ ("movq\t%%rsp, %0" : "=r" (*(p)))
|
||||
#elif defined(__i386) && defined(__GNUC__)
|
||||
#define SET_MACHINE_STACK_END(p) __asm__ __volatile__ ("movl\t%%esp, %0" : "=r" (*(p)))
|
||||
#elif (defined(__powerpc__) || defined(__powerpc64__)) && defined(__GNUC__) && !defined(_AIX) && !defined(__APPLE__) // Not Apple is NEEDED to unbreak ppc64 build on Darwin. Don't ask.
|
||||
#define SET_MACHINE_STACK_END(p) __asm__ __volatile__ ("mr\t%0, %%r1" : "=r" (*(p)))
|
||||
#elif (defined(__powerpc__) || defined(__powerpc64__)) && defined(__GNUC__) && defined(_AIX)
|
||||
#define SET_MACHINE_STACK_END(p) __asm__ __volatile__ ("mr %0,1" : "=r" (*(p)))
|
||||
#elif defined(__POWERPC__) && defined(__APPLE__) // Darwin ppc and ppc64
|
||||
#define SET_MACHINE_STACK_END(p) __asm__ volatile("mr %0, r1" : "=r" (*(p)))
|
||||
#elif defined(__aarch64__) && defined(__GNUC__)
|
||||
#define SET_MACHINE_STACK_END(p) __asm__ __volatile__ ("mov\t%0, sp" : "=r" (*(p)))
|
||||
#else
|
||||
NOINLINE(void rb_gc_set_stack_end(VALUE **stack_end_p));
|
||||
#define SET_MACHINE_STACK_END(p) rb_gc_set_stack_end(p)
|
||||
#define USE_CONSERVATIVE_STACK_END
|
||||
#endif
|
||||
|
||||
#define RB_GC_SAVE_MACHINE_CONTEXT(th) \
|
||||
do { \
|
||||
FLUSH_REGISTER_WINDOWS; \
|
||||
setjmp((th)->ec->machine.regs); \
|
||||
SET_MACHINE_STACK_END(&(th)->ec->machine.stack_end); \
|
||||
} while (0)
|
||||
|
||||
/* for GC debug */
|
||||
|
||||
#ifndef RUBY_MARK_FREE_DEBUG
|
||||
#define RUBY_MARK_FREE_DEBUG 0
|
||||
#endif
|
||||
|
||||
#if RUBY_MARK_FREE_DEBUG
|
||||
extern int ruby_gc_debug_indent;
|
||||
|
||||
static inline void
|
||||
rb_gc_debug_indent(void)
|
||||
{
|
||||
ruby_debug_printf("%*s", ruby_gc_debug_indent, "");
|
||||
}
|
||||
|
||||
static inline void
|
||||
rb_gc_debug_body(const char *mode, const char *msg, int st, void *ptr)
|
||||
{
|
||||
if (st == 0) {
|
||||
ruby_gc_debug_indent--;
|
||||
}
|
||||
rb_gc_debug_indent();
|
||||
ruby_debug_printf("%s: %s %s (%p)\n", mode, st ? "->" : "<-", msg, ptr);
|
||||
|
||||
if (st) {
|
||||
ruby_gc_debug_indent++;
|
||||
}
|
||||
|
||||
fflush(stdout);
|
||||
}
|
||||
|
||||
#define RUBY_MARK_ENTER(msg) rb_gc_debug_body("mark", (msg), 1, ptr)
|
||||
#define RUBY_MARK_LEAVE(msg) rb_gc_debug_body("mark", (msg), 0, ptr)
|
||||
#define RUBY_FREE_ENTER(msg) rb_gc_debug_body("free", (msg), 1, ptr)
|
||||
#define RUBY_FREE_LEAVE(msg) rb_gc_debug_body("free", (msg), 0, ptr)
|
||||
#define RUBY_GC_INFO rb_gc_debug_indent(), ruby_debug_printf
|
||||
|
||||
#else
|
||||
#define RUBY_MARK_ENTER(msg)
|
||||
#define RUBY_MARK_LEAVE(msg)
|
||||
#define RUBY_FREE_ENTER(msg)
|
||||
#define RUBY_FREE_LEAVE(msg)
|
||||
#define RUBY_GC_INFO if(0)printf
|
||||
#endif
|
||||
|
||||
#define RUBY_MARK_MOVABLE_UNLESS_NULL(ptr) do { \
|
||||
VALUE markobj = (ptr); \
|
||||
if (RTEST(markobj)) {rb_gc_mark_movable(markobj);} \
|
||||
} while (0)
|
||||
#define RUBY_MARK_UNLESS_NULL(ptr) do { \
|
||||
VALUE markobj = (ptr); \
|
||||
if (RTEST(markobj)) {rb_gc_mark(markobj);} \
|
||||
} while (0)
|
||||
#define RUBY_FREE_UNLESS_NULL(ptr) if(ptr){ruby_xfree(ptr);(ptr)=NULL;}
|
||||
|
||||
#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
|
||||
RUBY_EXTERN int ruby_stack_grow_direction;
|
||||
int ruby_get_stack_grow_direction(volatile VALUE *addr);
|
||||
# define stack_growup_p(x) ( \
|
||||
(ruby_stack_grow_direction ? \
|
||||
ruby_stack_grow_direction : \
|
||||
ruby_get_stack_grow_direction(x)) > 0)
|
||||
# define STACK_UPPER(x, a, b) (stack_growup_p(x) ? (a) : (b))
|
||||
#endif
|
||||
|
||||
/*
|
||||
STACK_GROW_DIR_DETECTION is used with STACK_DIR_UPPER.
|
||||
|
||||
On most normal systems, stacks grow from high address to lower address. In
|
||||
this case, STACK_DIR_UPPER(a, b) will return (b), but on exotic systems where
|
||||
the stack grows UP (from low address to high address), it will return (a).
|
||||
*/
|
||||
|
||||
#if STACK_GROW_DIRECTION
|
||||
#define STACK_GROW_DIR_DETECTION
|
||||
#define STACK_DIR_UPPER(a,b) STACK_UPPER(0, (a), (b))
|
||||
#else
|
||||
#define STACK_GROW_DIR_DETECTION VALUE stack_grow_dir_detection
|
||||
#define STACK_DIR_UPPER(a,b) STACK_UPPER(&stack_grow_dir_detection, (a), (b))
|
||||
#endif
|
||||
#define IS_STACK_DIR_UPPER() STACK_DIR_UPPER(1,0)
|
||||
|
||||
const char *rb_obj_info(VALUE obj);
|
||||
const char *rb_raw_obj_info(char *const buff, const size_t buff_size, VALUE obj);
|
||||
|
||||
struct rb_thread_struct;
|
||||
|
||||
size_t rb_size_pool_slot_size(unsigned char pool_id);
|
||||
|
||||
RUBY_SYMBOL_EXPORT_BEGIN
|
||||
|
||||
/* exports for objspace module */
|
||||
size_t rb_objspace_data_type_memsize(VALUE obj);
|
||||
void rb_objspace_reachable_objects_from(VALUE obj, void (func)(VALUE, void *), void *data);
|
||||
void rb_objspace_reachable_objects_from_root(void (func)(const char *category, VALUE, void *), void *data);
|
||||
int rb_objspace_markable_object_p(VALUE obj);
|
||||
int rb_objspace_internal_object_p(VALUE obj);
|
||||
int rb_objspace_marked_object_p(VALUE obj);
|
||||
|
||||
void rb_objspace_each_objects(
|
||||
int (*callback)(void *start, void *end, size_t stride, void *data),
|
||||
void *data);
|
||||
|
||||
void rb_objspace_each_objects_without_setup(
|
||||
int (*callback)(void *, void *, size_t, void *),
|
||||
void *data);
|
||||
|
||||
size_t rb_gc_obj_slot_size(VALUE obj);
|
||||
|
||||
VALUE rb_gc_disable_no_rest(void);
|
||||
|
||||
RUBY_SYMBOL_EXPORT_END
|
||||
|
||||
#endif /* RUBY_GC_H */
|
2
hash.c
2
hash.c
|
@ -54,7 +54,7 @@
|
|||
#endif
|
||||
|
||||
#if HASH_DEBUG
|
||||
#include "gc.h"
|
||||
#include "internal/gc.h"
|
||||
#endif
|
||||
|
||||
#define SET_DEFAULT(hash, ifnone) ( \
|
||||
|
|
139
internal/gc.h
139
internal/gc.h
|
@ -15,6 +15,124 @@
|
|||
#include "internal/compilers.h" /* for __has_attribute */
|
||||
#include "ruby/ruby.h" /* for rb_event_flag_t */
|
||||
|
||||
#if defined(__x86_64__) && !defined(_ILP32) && defined(__GNUC__)
|
||||
#define SET_MACHINE_STACK_END(p) __asm__ __volatile__ ("movq\t%%rsp, %0" : "=r" (*(p)))
|
||||
#elif defined(__i386) && defined(__GNUC__)
|
||||
#define SET_MACHINE_STACK_END(p) __asm__ __volatile__ ("movl\t%%esp, %0" : "=r" (*(p)))
|
||||
#elif (defined(__powerpc__) || defined(__powerpc64__)) && defined(__GNUC__) && !defined(_AIX) && !defined(__APPLE__) // Not Apple is NEEDED to unbreak ppc64 build on Darwin. Don't ask.
|
||||
#define SET_MACHINE_STACK_END(p) __asm__ __volatile__ ("mr\t%0, %%r1" : "=r" (*(p)))
|
||||
#elif (defined(__powerpc__) || defined(__powerpc64__)) && defined(__GNUC__) && defined(_AIX)
|
||||
#define SET_MACHINE_STACK_END(p) __asm__ __volatile__ ("mr %0,1" : "=r" (*(p)))
|
||||
#elif defined(__POWERPC__) && defined(__APPLE__) // Darwin ppc and ppc64
|
||||
#define SET_MACHINE_STACK_END(p) __asm__ volatile("mr %0, r1" : "=r" (*(p)))
|
||||
#elif defined(__aarch64__) && defined(__GNUC__)
|
||||
#define SET_MACHINE_STACK_END(p) __asm__ __volatile__ ("mov\t%0, sp" : "=r" (*(p)))
|
||||
#else
|
||||
NOINLINE(void rb_gc_set_stack_end(VALUE **stack_end_p));
|
||||
#define SET_MACHINE_STACK_END(p) rb_gc_set_stack_end(p)
|
||||
#define USE_CONSERVATIVE_STACK_END
|
||||
#endif
|
||||
|
||||
#define RB_GC_SAVE_MACHINE_CONTEXT(th) \
|
||||
do { \
|
||||
FLUSH_REGISTER_WINDOWS; \
|
||||
setjmp((th)->ec->machine.regs); \
|
||||
SET_MACHINE_STACK_END(&(th)->ec->machine.stack_end); \
|
||||
} while (0)
|
||||
|
||||
/* for GC debug */
|
||||
|
||||
#ifndef RUBY_MARK_FREE_DEBUG
|
||||
#define RUBY_MARK_FREE_DEBUG 0
|
||||
#endif
|
||||
|
||||
#if RUBY_MARK_FREE_DEBUG
|
||||
extern int ruby_gc_debug_indent;
|
||||
|
||||
static inline void
|
||||
rb_gc_debug_indent(void)
|
||||
{
|
||||
ruby_debug_printf("%*s", ruby_gc_debug_indent, "");
|
||||
}
|
||||
|
||||
static inline void
|
||||
rb_gc_debug_body(const char *mode, const char *msg, int st, void *ptr)
|
||||
{
|
||||
if (st == 0) {
|
||||
ruby_gc_debug_indent--;
|
||||
}
|
||||
rb_gc_debug_indent();
|
||||
ruby_debug_printf("%s: %s %s (%p)\n", mode, st ? "->" : "<-", msg, ptr);
|
||||
|
||||
if (st) {
|
||||
ruby_gc_debug_indent++;
|
||||
}
|
||||
|
||||
fflush(stdout);
|
||||
}
|
||||
|
||||
#define RUBY_MARK_ENTER(msg) rb_gc_debug_body("mark", (msg), 1, ptr)
|
||||
#define RUBY_MARK_LEAVE(msg) rb_gc_debug_body("mark", (msg), 0, ptr)
|
||||
#define RUBY_FREE_ENTER(msg) rb_gc_debug_body("free", (msg), 1, ptr)
|
||||
#define RUBY_FREE_LEAVE(msg) rb_gc_debug_body("free", (msg), 0, ptr)
|
||||
#define RUBY_GC_INFO rb_gc_debug_indent(), ruby_debug_printf
|
||||
|
||||
#else
|
||||
#define RUBY_MARK_ENTER(msg)
|
||||
#define RUBY_MARK_LEAVE(msg)
|
||||
#define RUBY_FREE_ENTER(msg)
|
||||
#define RUBY_FREE_LEAVE(msg)
|
||||
#define RUBY_GC_INFO if(0)printf
|
||||
#endif
|
||||
|
||||
#define RUBY_MARK_MOVABLE_UNLESS_NULL(ptr) do { \
|
||||
VALUE markobj = (ptr); \
|
||||
if (RTEST(markobj)) {rb_gc_mark_movable(markobj);} \
|
||||
} while (0)
|
||||
#define RUBY_MARK_UNLESS_NULL(ptr) do { \
|
||||
VALUE markobj = (ptr); \
|
||||
if (RTEST(markobj)) {rb_gc_mark(markobj);} \
|
||||
} while (0)
|
||||
#define RUBY_FREE_UNLESS_NULL(ptr) if(ptr){ruby_xfree(ptr);(ptr)=NULL;}
|
||||
|
||||
#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
|
||||
RUBY_EXTERN int ruby_stack_grow_direction;
|
||||
int ruby_get_stack_grow_direction(volatile VALUE *addr);
|
||||
# define stack_growup_p(x) ( \
|
||||
(ruby_stack_grow_direction ? \
|
||||
ruby_stack_grow_direction : \
|
||||
ruby_get_stack_grow_direction(x)) > 0)
|
||||
# define STACK_UPPER(x, a, b) (stack_growup_p(x) ? (a) : (b))
|
||||
#endif
|
||||
|
||||
/*
|
||||
STACK_GROW_DIR_DETECTION is used with STACK_DIR_UPPER.
|
||||
|
||||
On most normal systems, stacks grow from high address to lower address. In
|
||||
this case, STACK_DIR_UPPER(a, b) will return (b), but on exotic systems where
|
||||
the stack grows UP (from low address to high address), it will return (a).
|
||||
*/
|
||||
|
||||
#if STACK_GROW_DIRECTION
|
||||
#define STACK_GROW_DIR_DETECTION
|
||||
#define STACK_DIR_UPPER(a,b) STACK_UPPER(0, (a), (b))
|
||||
#else
|
||||
#define STACK_GROW_DIR_DETECTION VALUE stack_grow_dir_detection
|
||||
#define STACK_DIR_UPPER(a,b) STACK_UPPER(&stack_grow_dir_detection, (a), (b))
|
||||
#endif
|
||||
#define IS_STACK_DIR_UPPER() STACK_DIR_UPPER(1,0)
|
||||
|
||||
const char *rb_obj_info(VALUE obj);
|
||||
const char *rb_raw_obj_info(char *const buff, const size_t buff_size, VALUE obj);
|
||||
|
||||
|
||||
struct rb_thread_struct;
|
||||
size_t rb_size_pool_slot_size(unsigned char pool_id);
|
||||
|
||||
struct rb_execution_context_struct; /* in vm_core.h */
|
||||
struct rb_objspace; /* in vm_core.h */
|
||||
|
||||
|
@ -137,6 +255,27 @@ void rb_gc_mark_and_move(VALUE *ptr);
|
|||
} while (0)
|
||||
|
||||
RUBY_SYMBOL_EXPORT_BEGIN
|
||||
/* exports for objspace module */
|
||||
size_t rb_objspace_data_type_memsize(VALUE obj);
|
||||
void rb_objspace_reachable_objects_from(VALUE obj, void (func)(VALUE, void *), void *data);
|
||||
void rb_objspace_reachable_objects_from_root(void (func)(const char *category, VALUE, void *), void *data);
|
||||
int rb_objspace_markable_object_p(VALUE obj);
|
||||
int rb_objspace_internal_object_p(VALUE obj);
|
||||
int rb_objspace_marked_object_p(VALUE obj);
|
||||
|
||||
void rb_objspace_each_objects(
|
||||
int (*callback)(void *start, void *end, size_t stride, void *data),
|
||||
void *data);
|
||||
|
||||
void rb_objspace_each_objects_without_setup(
|
||||
int (*callback)(void *, void *, size_t, void *),
|
||||
void *data);
|
||||
|
||||
size_t rb_gc_obj_slot_size(VALUE obj);
|
||||
|
||||
VALUE rb_gc_disable_no_rest(void);
|
||||
|
||||
|
||||
/* gc.c (export) */
|
||||
const char *rb_objspace_data_type_name(VALUE obj);
|
||||
VALUE rb_wb_protected_newobj_of(VALUE, VALUE, size_t);
|
||||
|
|
2
iseq.c
2
iseq.c
|
@ -19,7 +19,6 @@
|
|||
#endif
|
||||
|
||||
#include "eval_intern.h"
|
||||
#include "gc.h"
|
||||
#include "id_table.h"
|
||||
#include "internal.h"
|
||||
#include "internal/bits.h"
|
||||
|
@ -27,6 +26,7 @@
|
|||
#include "internal/compile.h"
|
||||
#include "internal/error.h"
|
||||
#include "internal/file.h"
|
||||
#include "internal/gc.h"
|
||||
#include "internal/hash.h"
|
||||
#include "internal/parse.h"
|
||||
#include "internal/sanitizers.h"
|
||||
|
|
2
mjit.c
2
mjit.c
|
@ -90,7 +90,6 @@
|
|||
#include "vm_callinfo.h"
|
||||
#include "mjit.h"
|
||||
#include "mjit_c.h"
|
||||
#include "gc.h"
|
||||
#include "ruby_assert.h"
|
||||
#include "ruby/debug.h"
|
||||
#include "ruby/thread.h"
|
||||
|
@ -99,6 +98,7 @@
|
|||
#include "insns.inc"
|
||||
#include "insns_info.inc"
|
||||
#include "internal/compile.h"
|
||||
#include "internal/gc.h"
|
||||
|
||||
#include <sys/wait.h>
|
||||
#include <sys/time.h>
|
||||
|
|
2
proc.c
2
proc.c
|
@ -10,11 +10,11 @@
|
|||
**********************************************************************/
|
||||
|
||||
#include "eval_intern.h"
|
||||
#include "gc.h"
|
||||
#include "internal.h"
|
||||
#include "internal/class.h"
|
||||
#include "internal/error.h"
|
||||
#include "internal/eval.h"
|
||||
#include "internal/gc.h"
|
||||
#include "internal/object.h"
|
||||
#include "internal/proc.h"
|
||||
#include "internal/symbol.h"
|
||||
|
|
2
ractor.c
2
ractor.c
|
@ -9,12 +9,12 @@
|
|||
#include "ractor_core.h"
|
||||
#include "internal/complex.h"
|
||||
#include "internal/error.h"
|
||||
#include "internal/gc.h"
|
||||
#include "internal/hash.h"
|
||||
#include "internal/rational.h"
|
||||
#include "internal/struct.h"
|
||||
#include "internal/thread.h"
|
||||
#include "variable.h"
|
||||
#include "gc.h"
|
||||
#include "transient_heap.h"
|
||||
#include "yjit.h"
|
||||
#include "mjit.h"
|
||||
|
|
2
shape.c
2
shape.c
|
@ -1,10 +1,10 @@
|
|||
#include "vm_core.h"
|
||||
#include "vm_sync.h"
|
||||
#include "shape.h"
|
||||
#include "gc.h"
|
||||
#include "symbol.h"
|
||||
#include "id_table.h"
|
||||
#include "internal/class.h"
|
||||
#include "internal/gc.h"
|
||||
#include "internal/symbol.h"
|
||||
#include "internal/variable.h"
|
||||
#include "variable.h"
|
||||
|
|
1
string.c
1
string.c
|
@ -23,7 +23,6 @@
|
|||
|
||||
#include "debug_counter.h"
|
||||
#include "encindex.h"
|
||||
#include "gc.h"
|
||||
#include "id.h"
|
||||
#include "internal.h"
|
||||
#include "internal/array.h"
|
||||
|
|
1
symbol.c
1
symbol.c
|
@ -9,7 +9,6 @@
|
|||
|
||||
**********************************************************************/
|
||||
|
||||
#include "gc.h"
|
||||
#include "internal.h"
|
||||
#include "internal/error.h"
|
||||
#include "internal/gc.h"
|
||||
|
|
2
thread.c
2
thread.c
|
@ -73,12 +73,12 @@
|
|||
#define TH_SCHED(th) (&(th)->ractor->threads.sched)
|
||||
|
||||
#include "eval_intern.h"
|
||||
#include "gc.h"
|
||||
#include "hrtime.h"
|
||||
#include "internal.h"
|
||||
#include "internal/class.h"
|
||||
#include "internal/cont.h"
|
||||
#include "internal/error.h"
|
||||
#include "internal/gc.h"
|
||||
#include "internal/hash.h"
|
||||
#include "internal/io.h"
|
||||
#include "internal/object.h"
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
|
||||
#ifdef THREAD_SYSTEM_DEPENDENT_IMPLEMENTATION
|
||||
|
||||
#include "gc.h"
|
||||
#include "internal/gc.h"
|
||||
#include "mjit.h"
|
||||
|
||||
#ifdef HAVE_SYS_RESOURCE_H
|
||||
|
|
|
@ -7,7 +7,6 @@
|
|||
**********************************************************************/
|
||||
|
||||
#include "debug_counter.h"
|
||||
#include "gc.h"
|
||||
#include "internal.h"
|
||||
#include "internal/array.h"
|
||||
#include "internal/gc.h"
|
||||
|
|
2
vm.c
2
vm.c
|
@ -11,12 +11,12 @@
|
|||
#define vm_exec rb_vm_exec
|
||||
|
||||
#include "eval_intern.h"
|
||||
#include "gc.h"
|
||||
#include "internal.h"
|
||||
#include "internal/compile.h"
|
||||
#include "internal/cont.h"
|
||||
#include "internal/error.h"
|
||||
#include "internal/eval.h"
|
||||
#include "internal/gc.h"
|
||||
#include "internal/inits.h"
|
||||
#include "internal/object.h"
|
||||
#include "internal/parse.h"
|
||||
|
|
|
@ -29,8 +29,8 @@
|
|||
#endif
|
||||
|
||||
#include "addr2line.h"
|
||||
#include "gc.h"
|
||||
#include "internal.h"
|
||||
#include "internal/gc.h"
|
||||
#include "internal/variable.h"
|
||||
#include "internal/vm.h"
|
||||
#include "iseq.h"
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
#include "internal/gc.h"
|
||||
#include "vm_core.h"
|
||||
#include "vm_sync.h"
|
||||
#include "ractor_core.h"
|
||||
#include "vm_debug.h"
|
||||
#include "gc.h"
|
||||
|
||||
static bool vm_barrier_finish_p(rb_vm_t *vm);
|
||||
|
||||
|
|
2
yjit.c
2
yjit.c
|
@ -14,7 +14,7 @@
|
|||
#include "internal/compile.h"
|
||||
#include "internal/class.h"
|
||||
#include "internal/fixnum.h"
|
||||
#include "gc.h"
|
||||
#include "internal/gc.h"
|
||||
#include "vm_core.h"
|
||||
#include "vm_callinfo.h"
|
||||
#include "builtin.h"
|
||||
|
|
|
@ -1126,8 +1126,8 @@ extern "C" {
|
|||
pub fn rb_attr_get(obj: VALUE, name: ID) -> VALUE;
|
||||
pub fn rb_obj_info_dump(obj: VALUE);
|
||||
pub fn rb_reg_new_ary(ary: VALUE, options: ::std::os::raw::c_int) -> VALUE;
|
||||
pub fn rb_class_allocate_instance(klass: VALUE) -> VALUE;
|
||||
pub fn rb_obj_info(obj: VALUE) -> *const ::std::os::raw::c_char;
|
||||
pub fn rb_class_allocate_instance(klass: VALUE) -> VALUE;
|
||||
pub fn rb_shape_id_offset() -> i32;
|
||||
pub fn rb_shape_get_shape_by_id(shape_id: shape_id_t) -> *mut rb_shape_t;
|
||||
pub fn rb_shape_get_shape_id(obj: VALUE) -> shape_id_t;
|
||||
|
|
Загрузка…
Ссылка в новой задаче