diff options
author | Matt Valentine-House <[email protected]> | 2023-02-08 11:56:53 +0000 |
---|---|---|
committer | Peter Zhu <[email protected]> | 2023-02-09 10:32:29 -0500 |
commit | 72aba64fff09a829bfaf41165d0075066f087185 (patch) | |
tree | d989e27e007a38baf233dd2d0e036e0bc0b30226 | |
parent | e2b6289bab16ff2e05e8ac7a8bc3a35bcc2c44ed (diff) |
Merge gc.h and internal/gc.h
[Feature #19425]
Notes
Notes:
Merged: https://github.com/ruby/ruby/pull/7273
-rw-r--r-- | common.mk | 21 | ||||
-rw-r--r-- | compile.c | 2 | ||||
-rw-r--r-- | cont.c | 2 | ||||
-rw-r--r-- | debug.c | 2 | ||||
-rw-r--r-- | eval.c | 2 | ||||
-rw-r--r-- | ext/coverage/coverage.c | 2 | ||||
-rw-r--r-- | ext/coverage/depend | 1 | ||||
-rw-r--r-- | ext/objspace/depend | 7 | ||||
-rw-r--r-- | ext/objspace/object_tracing.c | 2 | ||||
-rw-r--r-- | ext/objspace/objspace.c | 2 | ||||
-rw-r--r-- | ext/objspace/objspace_dump.c | 2 | ||||
-rw-r--r-- | gc.c | 1 | ||||
-rw-r--r-- | gc.h | 147 | ||||
-rw-r--r-- | hash.c | 2 | ||||
-rw-r--r-- | internal/gc.h | 139 | ||||
-rw-r--r-- | iseq.c | 2 | ||||
-rw-r--r-- | mjit.c | 2 | ||||
-rw-r--r-- | proc.c | 2 | ||||
-rw-r--r-- | ractor.c | 2 | ||||
-rw-r--r-- | shape.c | 2 | ||||
-rw-r--r-- | string.c | 1 | ||||
-rw-r--r-- | symbol.c | 1 | ||||
-rw-r--r-- | thread.c | 2 | ||||
-rw-r--r-- | thread_pthread.c | 2 | ||||
-rw-r--r-- | transient_heap.c | 1 | ||||
-rw-r--r-- | vm.c | 2 | ||||
-rw-r--r-- | vm_dump.c | 2 | ||||
-rw-r--r-- | vm_sync.c | 2 | ||||
-rw-r--r-- | yjit.c | 2 | ||||
-rw-r--r-- | yjit/src/cruby_bindings.inc.rs | 2 |
30 files changed, 167 insertions, 194 deletions
@@ -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" @@ -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" @@ -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) @@ -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" diff --git a/ext/coverage/coverage.c b/ext/coverage/coverage.c index 399e28cdab..a3381901ee 100644 --- a/ext/coverage/coverage.c +++ b/ext/coverage/coverage.c @@ -8,7 +8,7 @@ ************************************************/ -#include "gc.h" +#include "internal/gc.h" #include "internal/hash.h" #include "internal/thread.h" #include "internal/sanitizers.h" diff --git a/ext/coverage/depend b/ext/coverage/depend index 66a3c96473..def0128a7a 100644 --- a/ext/coverage/depend +++ b/ext/coverage/depend @@ -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 diff --git a/ext/objspace/depend b/ext/objspace/depend index 23b5430f32..d9c0a8a050 100644 --- a/ext/objspace/depend +++ b/ext/objspace/depend @@ -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 diff --git a/ext/objspace/object_tracing.c b/ext/objspace/object_tracing.c index 8c54d51eab..c1c93c51f5 100644 --- a/ext/objspace/object_tracing.c +++ b/ext/objspace/object_tracing.c @@ -13,8 +13,8 @@ **********************************************************************/ -#include "gc.h" #include "internal.h" +#include "internal/gc.h" #include "ruby/debug.h" #include "objspace.h" diff --git a/ext/objspace/objspace.c b/ext/objspace/objspace.c index 31099b8849..e8762d1be6 100644 --- a/ext/objspace/objspace.c +++ b/ext/objspace/objspace.c @@ -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" diff --git a/ext/objspace/objspace_dump.c b/ext/objspace/objspace_dump.c index f101b334c1..d8a11083d6 100644 --- a/ext/objspace/objspace_dump.c +++ b/ext/objspace/objspace_dump.c @@ -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" @@ -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" @@ -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 */ @@ -54,7 +54,7 @@ #endif #if HASH_DEBUG -#include "gc.h" +#include "internal/gc.h" #endif #define SET_DEFAULT(hash, ifnone) ( \ diff --git a/internal/gc.h b/internal/gc.h index 8fb219a0c4..dc55de1c03 100644 --- a/internal/gc.h +++ b/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); @@ -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" @@ -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> @@ -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" @@ -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" @@ -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" @@ -23,7 +23,6 @@ #include "debug_counter.h" #include "encindex.h" -#include "gc.h" #include "id.h" #include "internal.h" #include "internal/array.h" @@ -9,7 +9,6 @@ **********************************************************************/ -#include "gc.h" #include "internal.h" #include "internal/error.h" #include "internal/gc.h" @@ -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" diff --git a/thread_pthread.c b/thread_pthread.c index aa5435aa99..944570767e 100644 --- a/thread_pthread.c +++ b/thread_pthread.c @@ -11,7 +11,7 @@ #ifdef THREAD_SYSTEM_DEPENDENT_IMPLEMENTATION -#include "gc.h" +#include "internal/gc.h" #include "mjit.h" #ifdef HAVE_SYS_RESOURCE_H diff --git a/transient_heap.c b/transient_heap.c index 14e941a41a..2340df4912 100644 --- a/transient_heap.c +++ b/transient_heap.c @@ -7,7 +7,6 @@ **********************************************************************/ #include "debug_counter.h" -#include "gc.h" #include "internal.h" #include "internal/array.h" #include "internal/gc.h" @@ -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); @@ -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" diff --git a/yjit/src/cruby_bindings.inc.rs b/yjit/src/cruby_bindings.inc.rs index a9d8009cb0..08ff196f05 100644 --- a/yjit/src/cruby_bindings.inc.rs +++ b/yjit/src/cruby_bindings.inc.rs @@ -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; |