Ruby  2.7.2p137(2020-10-01revision5445e0435260b449decf2ac16f9d09bae3cafe72)
Data Structures | Macros | Typedefs | Enumerations | Functions | Variables
gc.c File Reference
#include "ruby/encoding.h"
#include "ruby/io.h"
#include "ruby/st.h"
#include "ruby/re.h"
#include "ruby/thread.h"
#include "ruby/util.h"
#include "ruby/debug.h"
#include "internal.h"
#include "eval_intern.h"
#include "vm_core.h"
#include "builtin.h"
#include "gc.h"
#include "constant.h"
#include "ruby_atomic.h"
#include "probes.h"
#include "id_table.h"
#include "symbol.h"
#include <stdio.h>
#include <stdarg.h>
#include <setjmp.h>
#include <sys/types.h>
#include "ruby_assert.h"
#include "debug_counter.h"
#include "transient_heap.h"
#include "mjit.h"
#include "regint.h"
#include "gc.rbinc"

Go to the source code of this file.

Data Structures

struct  optional
 
struct  ruby_gc_params_t
 
struct  gc_profile_record
 
struct  RVALUE
 
struct  heap_page_header
 
struct  heap_page_body
 
struct  gc_list
 
struct  stack_chunk
 
struct  mark_stack
 
struct  rb_heap_struct
 
struct  rb_objspace
 
struct  rb_objspace::mark_func_data_struct
 
struct  heap_page
 
struct  RZombie
 
struct  each_obj_args
 
struct  os_each_struct
 
struct  force_finalize_list
 
struct  verify_internal_consistency_struct
 
struct  objspace_and_reason
 
struct  heap_cursor
 
struct  root_objects_data
 
struct  gc_raise_tag
 
struct  malloc_obj_info
 
struct  weakmap
 
struct  wmap_iter_arg
 

Macros

#define rb_data_object_alloc   rb_data_object_alloc
 
#define rb_data_typed_object_alloc   rb_data_typed_object_alloc
 
#define rb_setjmp(env)   RUBY_SETJMP(env)
 
#define rb_jmp_buf   rb_jmpbuf_t
 
#define GC_HEAP_INIT_SLOTS   10000
 
#define GC_HEAP_FREE_SLOTS   4096
 
#define GC_HEAP_GROWTH_FACTOR   1.8
 
#define GC_HEAP_GROWTH_MAX_SLOTS   0 /* 0 is disable */
 
#define GC_HEAP_OLDOBJECT_LIMIT_FACTOR   2.0
 
#define GC_HEAP_FREE_SLOTS_MIN_RATIO   0.20
 
#define GC_HEAP_FREE_SLOTS_GOAL_RATIO   0.40
 
#define GC_HEAP_FREE_SLOTS_MAX_RATIO   0.65
 
#define GC_MALLOC_LIMIT_MIN   (16 * 1024 * 1024 /* 16MB */)
 
#define GC_MALLOC_LIMIT_MAX   (32 * 1024 * 1024 /* 32MB */)
 
#define GC_MALLOC_LIMIT_GROWTH_FACTOR   1.4
 
#define GC_OLDMALLOC_LIMIT_MIN   (16 * 1024 * 1024 /* 16MB */)
 
#define GC_OLDMALLOC_LIMIT_GROWTH_FACTOR   1.2
 
#define GC_OLDMALLOC_LIMIT_MAX   (128 * 1024 * 1024 /* 128MB */)
 
#define PRINT_MEASURE_LINE   0
 
#define PRINT_ENTER_EXIT_TICK   0
 
#define PRINT_ROOT_TICKS   0
 
#define USE_TICK_T   (PRINT_ENTER_EXIT_TICK || PRINT_MEASURE_LINE || PRINT_ROOT_TICKS)
 
#define TICK_TYPE   1
 
#define GC_DEBUG   0
 
#define RGENGC_DEBUG   0
 
#define RGENGC_DEBUG_ENABLED(level)   ((RGENGC_DEBUG) >= (level))
 
#define RGENGC_CHECK_MODE   0
 
#define GC_ASSERT(expr)   RUBY_ASSERT_MESG_WHEN(RGENGC_CHECK_MODE > 0, expr, #expr)
 
#define RGENGC_OLD_NEWOBJ_CHECK   0
 
#define RGENGC_PROFILE   0
 
#define RGENGC_ESTIMATE_OLDMALLOC   1
 
#define RGENGC_FORCE_MAJOR_GC   0
 
#define GC_PROFILE_MORE_DETAIL   0
 
#define GC_PROFILE_DETAIL_MEMORY   0
 
#define GC_ENABLE_INCREMENTAL_MARK   USE_RINCGC
 
#define GC_ENABLE_LAZY_SWEEP   1
 
#define CALC_EXACT_MALLOC_SIZE   USE_GC_MALLOC_OBJ_INFO_DETAILS
 
#define MALLOC_ALLOCATED_SIZE   0
 
#define MALLOC_ALLOCATED_SIZE_CHECK   0
 
#define GC_DEBUG_STRESS_TO_CLASS   0
 
#define RGENGC_OBJ_INFO   (RGENGC_DEBUG | RGENGC_CHECK_MODE)
 
#define popcount_bits   rb_popcount_intptr
 
#define STACK_CHUNK_SIZE   500
 
#define HEAP_PAGE_ALIGN_LOG   14
 
#define CEILDIV(i, mod)   (((i) + (mod) - 1)/(mod))
 
#define GET_PAGE_BODY(x)   ((struct heap_page_body *)((bits_t)(x) & ~(HEAP_PAGE_ALIGN_MASK)))
 
#define GET_PAGE_HEADER(x)   (&GET_PAGE_BODY(x)->header)
 
#define GET_HEAP_PAGE(x)   (GET_PAGE_HEADER(x)->page)
 
#define NUM_IN_PAGE(p)   (((bits_t)(p) & HEAP_PAGE_ALIGN_MASK)/sizeof(RVALUE))
 
#define BITMAP_INDEX(p)   (NUM_IN_PAGE(p) / BITS_BITLENGTH )
 
#define BITMAP_OFFSET(p)   (NUM_IN_PAGE(p) & (BITS_BITLENGTH-1))
 
#define BITMAP_BIT(p)   ((bits_t)1 << BITMAP_OFFSET(p))
 
#define MARKED_IN_BITMAP(bits, p)   ((bits)[BITMAP_INDEX(p)] & BITMAP_BIT(p))
 
#define MARK_IN_BITMAP(bits, p)   ((bits)[BITMAP_INDEX(p)] = (bits)[BITMAP_INDEX(p)] | BITMAP_BIT(p))
 
#define CLEAR_IN_BITMAP(bits, p)   ((bits)[BITMAP_INDEX(p)] = (bits)[BITMAP_INDEX(p)] & ~BITMAP_BIT(p))
 
#define GET_HEAP_MARK_BITS(x)   (&GET_HEAP_PAGE(x)->mark_bits[0])
 
#define GET_HEAP_PINNED_BITS(x)   (&GET_HEAP_PAGE(x)->pinned_bits[0])
 
#define GET_HEAP_UNCOLLECTIBLE_BITS(x)   (&GET_HEAP_PAGE(x)->uncollectible_bits[0])
 
#define GET_HEAP_WB_UNPROTECTED_BITS(x)   (&GET_HEAP_PAGE(x)->wb_unprotected_bits[0])
 
#define GET_HEAP_MARKING_BITS(x)   (&GET_HEAP_PAGE(x)->marking_bits[0])
 
#define rb_objspace   (*rb_objspace_of(GET_VM()))
 
#define rb_objspace_of(vm)   ((vm)->objspace)
 
#define ruby_initial_gc_stress   gc_params.gc_stress
 
#define malloc_limit   objspace->malloc_params.limit
 
#define malloc_increase   objspace->malloc_params.increase
 
#define malloc_allocated_size   objspace->malloc_params.allocated_size
 
#define heap_pages_sorted   objspace->heap_pages.sorted
 
#define heap_allocated_pages   objspace->heap_pages.allocated_pages
 
#define heap_pages_sorted_length   objspace->heap_pages.sorted_length
 
#define heap_pages_lomem   objspace->heap_pages.range[0]
 
#define heap_pages_himem   objspace->heap_pages.range[1]
 
#define heap_allocatable_pages   objspace->heap_pages.allocatable_pages
 
#define heap_pages_freeable_pages   objspace->heap_pages.freeable_pages
 
#define heap_pages_final_slots   objspace->heap_pages.final_slots
 
#define heap_pages_deferred_final   objspace->heap_pages.deferred_final
 
#define heap_eden   (&objspace->eden_heap)
 
#define heap_tomb   (&objspace->tomb_heap)
 
#define dont_gc   objspace->flags.dont_gc
 
#define during_gc   objspace->flags.during_gc
 
#define finalizing   objspace->atomic_flags.finalizing
 
#define finalizer_table   objspace->finalizer_table
 
#define global_list   objspace->global_list
 
#define ruby_gc_stressful   objspace->flags.gc_stressful
 
#define ruby_gc_stress_mode   objspace->gc_stress_mode
 
#define stress_to_class   0
 
#define gc_mode(objspace)   gc_mode_verify((enum gc_mode)(objspace)->flags.mode)
 
#define gc_mode_set(objspace, mode)   ((objspace)->flags.mode = (unsigned int)gc_mode_verify(mode))
 
#define is_marking(objspace)   (gc_mode(objspace) == gc_mode_marking)
 
#define is_sweeping(objspace)   (gc_mode(objspace) == gc_mode_sweeping)
 
#define is_full_marking(objspace)   ((objspace)->flags.during_minor_gc == FALSE)
 
#define is_incremental_marking(objspace)   ((objspace)->flags.during_incremental_marking != FALSE)
 
#define will_be_incremental_marking(objspace)   ((objspace)->rgengc.need_major_gc != GPR_FLAG_NONE)
 
#define has_sweeping_pages(heap)   ((heap)->sweeping_page != 0)
 
#define is_lazy_sweeping(heap)   (GC_ENABLE_LAZY_SWEEP && has_sweeping_pages(heap))
 
#define nonspecial_obj_id(obj)   (VALUE)((SIGNED_VALUE)(obj)|FIXNUM_FLAG)
 
#define obj_id_to_ref(objid)   ((objid) ^ FIXNUM_FLAG) /* unset FIXNUM_FLAG */
 
#define RANY(o)   ((RVALUE*)(o))
 
#define RZOMBIE(o)   ((struct RZombie *)(o))
 
#define nomem_error   GET_VM()->special_exceptions[ruby_error_nomemory]
 
#define TYPED_UPDATE_IF_MOVED(_objspace, _type, _thing)
 
#define UPDATE_IF_MOVED(_objspace, _thing)   TYPED_UPDATE_IF_MOVED(_objspace, VALUE, _thing)
 
#define gc_prof_record(objspace)   (objspace)->profile.current_record
 
#define gc_prof_enabled(objspace)   ((objspace)->profile.run && (objspace)->profile.current_record)
 
#define gc_report   if (!RGENGC_DEBUG_ENABLED(0)) {} else gc_report_body
 
#define PUSH_MARK_FUNC_DATA(v)
 
#define POP_MARK_FUNC_DATA()   objspace->mark_func_data = prev_mark_func_data;} while (0)
 
#define MEASURE_LINE(expr)   expr
 
#define FL_CHECK2(name, x, pred)
 
#define FL_TEST2(x, f)   FL_CHECK2("FL_TEST2", x, FL_TEST_RAW((x),(f)) != 0)
 
#define FL_SET2(x, f)   FL_CHECK2("FL_SET2", x, RBASIC(x)->flags |= (f))
 
#define FL_UNSET2(x, f)   FL_CHECK2("FL_UNSET2", x, RBASIC(x)->flags &= ~(f))
 
#define RVALUE_MARK_BITMAP(obj)   MARKED_IN_BITMAP(GET_HEAP_MARK_BITS(obj), (obj))
 
#define RVALUE_PIN_BITMAP(obj)   MARKED_IN_BITMAP(GET_HEAP_PINNED_BITS(obj), (obj))
 
#define RVALUE_PAGE_MARKED(page, obj)   MARKED_IN_BITMAP((page)->mark_bits, (obj))
 
#define RVALUE_WB_UNPROTECTED_BITMAP(obj)   MARKED_IN_BITMAP(GET_HEAP_WB_UNPROTECTED_BITS(obj), (obj))
 
#define RVALUE_UNCOLLECTIBLE_BITMAP(obj)   MARKED_IN_BITMAP(GET_HEAP_UNCOLLECTIBLE_BITS(obj), (obj))
 
#define RVALUE_MARKING_BITMAP(obj)   MARKED_IN_BITMAP(GET_HEAP_MARKING_BITS(obj), (obj))
 
#define RVALUE_PAGE_WB_UNPROTECTED(page, obj)   MARKED_IN_BITMAP((page)->wb_unprotected_bits, (obj))
 
#define RVALUE_PAGE_UNCOLLECTIBLE(page, obj)   MARKED_IN_BITMAP((page)->uncollectible_bits, (obj))
 
#define RVALUE_PAGE_MARKING(page, obj)   MARKED_IN_BITMAP((page)->marking_bits, (obj))
 
#define RVALUE_OLD_AGE   3
 
#define RVALUE_AGE_SHIFT   5 /* FL_PROMOTED0 bit */
 
#define gc_event_hook_available_p(objspace)   ((objspace)->flags.has_hook)
 
#define gc_event_hook_needed_p(objspace, event)   ((objspace)->hook_events & (event))
 
#define gc_event_hook(objspace, event, data)
 
#define UNEXPECTED_NODE(func)
 
#define OBJ_ID_INCREMENT   (sizeof(RVALUE) / 2)
 
#define OBJ_ID_INITIAL   (OBJ_ID_INCREMENT * 2)
 
#define RESTORE_FINALIZER()
 
#define NUM2PTR(x)   NUM2ULONG(x)
 
#define COUNT_TYPE(t)   case (t): return ID2SYM(rb_intern(#t)); break;
 
#define SET_STACK_END   SET_MACHINE_STACK_END(&ec->machine.stack_end)
 
#define STACK_START   (ec->machine.stack_start)
 
#define STACK_END   (ec->machine.stack_end)
 
#define STACK_LEVEL_MAX   (ec->machine.stack_maxsize/sizeof(VALUE))
 
#define STACK_LENGTH
 
#define PREVENT_STACK_OVERFLOW   1
 
#define STACKFRAME_FOR_CALL_CFUNC   2048
 
#define GET_STACK_BOUNDS(start, end, appendix)
 
#define MARK_CHECKPOINT_PRINT_TICK(category)
 
#define MARK_CHECKPOINT(category)
 
#define PROFILE_REMEMBERSET_MARK   0
 
#define I(s)   ID_##s = rb_intern(#s);
 
#define MARK_OBJECT_ARY_BUCKET_SIZE   1024
 
#define GC_NOTIFY   0
 
#define gc_stress_full_mark_after_malloc_p()    (FIXNUM_P(ruby_gc_stress_mode) && (FIX2LONG(ruby_gc_stress_mode) & (1<<gc_stress_full_mark_after_malloc)))
 
#define global_symbols   ruby_global_symbols
 
#define S(s)   sym_##s = ID2SYM(rb_intern_const(#s))
 
#define SET(name, attr)
 
#define S(s)   gc_stat_symbols[gc_stat_sym_##s] = ID2SYM(rb_intern_const(#s))
 
#define S(s)   gc_stat_compat_symbols[gc_stat_compat_sym_##s] = ID2SYM(rb_intern_const(#s))
 
#define OLD_SYM(s)   gc_stat_compat_symbols[gc_stat_compat_sym_##s]
 
#define NEW_SYM(s)   gc_stat_symbols[gc_stat_sym_##s]
 
#define SET(name, attr)
 
#define TRY_WITH_GC(alloc)
 
#define WMAP_DELETE_DEAD_OBJECT_IN_MARK   0
 
#define GC_PROFILE_RECORD_DEFAULT_SIZE   100
 
#define RUBY_DTRACE_GC_HOOK(name)    do {if (RUBY_DTRACE_GC_##name##_ENABLED()) RUBY_DTRACE_GC_##name();} while (0)
 
#define TYPE_NAME(t)   case (t): return #t;
 
#define ARY_SHARED_P(ary)
 
#define ARY_EMBED_P(ary)
 
#define BUFF_ARGS   buff + pos, buff_size - pos
 
#define APPENDF(f)   if ((pos += snprintf f) >= buff_size) goto end
 
#define TF(c)   ((c) != 0 ? "true" : "false")
 
#define C(c, s)   ((c) != 0 ? (s) : " ")
 
#define IMEMO_NAME(x)   case imemo_##x: imemo_name = #x; break;
 
#define OPT(o)   if (o) rb_ary_push(opts, rb_fstring_lit(#o))
 

Typedefs

typedef struct gc_profile_record gc_profile_record
 
typedef struct RVALUE RVALUE
 
typedef uintptr_t bits_t
 
typedef struct stack_chunk stack_chunk_t
 
typedef struct mark_stack mark_stack_t
 
typedef struct rb_heap_struct rb_heap_t
 
typedef struct rb_objspace rb_objspace_t
 
typedef int each_obj_callback(void *, void *, size_t, void *)
 
typedef int page_compare_func_t(const void *, const void *, void *)
 

Enumerations

enum  gc_profile_record_flag {
  GPR_FLAG_NONE = 0x000, GPR_FLAG_MAJOR_BY_NOFREE = 0x001, GPR_FLAG_MAJOR_BY_OLDGEN = 0x002, GPR_FLAG_MAJOR_BY_SHADY = 0x004,
  GPR_FLAG_MAJOR_BY_FORCE = 0x008, GPR_FLAG_MAJOR_BY_OLDMALLOC = 0x020, GPR_FLAG_MAJOR_MASK = 0x0ff, GPR_FLAG_NEWOBJ = 0x100,
  GPR_FLAG_MALLOC = 0x200, GPR_FLAG_METHOD = 0x400, GPR_FLAG_CAPI = 0x800, GPR_FLAG_STRESS = 0x1000,
  GPR_FLAG_IMMEDIATE_SWEEP = 0x2000, GPR_FLAG_HAVE_FINALIZE = 0x4000, GPR_FLAG_IMMEDIATE_MARK = 0x8000, GPR_FLAG_FULL_MARK = 0x10000,
  GPR_DEFAULT_REASON
}
 
enum  {
  DBL_BIGDIG = ((DBL_MANT_DIG + BITSPERDIG) / BITSPERDIG), COROUTINE_REGISTERS = 6, COROUTINE_REGISTERS = 8, COROUTINE_REGISTERS = 0xb0 / 8,
  COROUTINE_REGISTERS, COROUTINE_REGISTERS = 4, COROUTINE_REGISTERS = 8, COROUTINE_XMM_REGISTERS = 1+10*2,
  COROUTINE_REGISTERS = 4, NAME_ERR_MESG__MESG, NAME_ERR_MESG__RECV, NAME_ERR_MESG__NAME,
  NAME_ERR_MESG_COUNT, raise_opt_cause, raise_max_opt, RAISED_EXCEPTION = 1,
  RAISED_STACKOVERFLOW = 2, RAISED_NOMEMORY = 4, DECIMAL_SIZE_OF_LONG = DECIMAL_SIZE_OF_BITS(CHAR_BIT*sizeof(long)), JISX0301_DATE_SIZE = DECIMAL_SIZE_OF_LONG+8,
  FLAG_RETURNS_128BITS = 1 << (31-31), FLAG_RETURNS_NOTHING = 1 << (31-30), FLAG_RETURNS_FP = 1 << (31-29), FLAG_RETURNS_64BITS = 1 << (31-28),
  FLAG_RETURNS_STRUCT = 1 << (31-27), FLAG_ARG_NEEDS_COPY = 1 << (31- 7), FLAG_FP_ARGUMENTS = 1 << (31- 6), FLAG_4_GPR_ARGUMENTS = 1 << (31- 5),
  FLAG_RETVAL_REFERENCE = 1 << (31- 4), FLAG_RETURNS_SMST = 1 << (31-31), FLAG_RETURNS_NOTHING = 1 << (31-30), FLAG_RETURNS_FP = 1 << (31-29),
  FLAG_RETURNS_64BITS = 1 << (31-28), FLAG_RETURNS_128BITS = 1 << (31-27), FLAG_COMPAT = 1 << (31- 8), FLAG_ARG_NEEDS_COPY = 1 << (31- 7),
  FLAG_ARG_NEEDS_PSAVE = FLAG_ARG_NEEDS_COPY, FLAG_FP_ARGUMENTS = 1 << (31- 6), FLAG_4_GPR_ARGUMENTS = 1 << (31- 5), FLAG_RETVAL_REFERENCE = 1 << (31- 4),
  JSON_object_start = 1, ossl_asn1_info_size = (sizeof(ossl_asn1_info)/sizeof(ossl_asn1_info[0])), tIGNORED_NL = tLAST_TOKEN + 1, tCOMMENT,
  tEMBDOC_BEG, tEMBDOC, tEMBDOC_END, tHEREDOC_BEG,
  tHEREDOC_END, k__END__, ORDINAL_PARAM = -1, NO_PARAM = 0,
  NUMPARAM_MAX = 9, BITS_SIZE = sizeof(bits_t), BITS_BITLENGTH = ( BITS_SIZE * CHAR_BIT ), RSTRUCT_EMBED_LEN_MAX = RVALUE_EMBED_LEN_MAX,
  RSTRUCT_EMBED_LEN_MASK = (RUBY_FL_USER2|RUBY_FL_USER1), RSTRUCT_EMBED_LEN_SHIFT = (RUBY_FL_USHIFT+1), RSTRUCT_TRANSIENT_FLAG = FL_USER3, RSTRUCT_ENUM_END,
  bom_prefix_len = (int)sizeof(bom_prefix) - 1, MT_MAX_STATE = N, PCH_NOT_READY, PCH_FAILED,
  PCH_SUCCESS, ORDINAL_PARAM = -1, NO_PARAM = 0, NUMPARAM_MAX = 9,
  COMPILATION_FEATURES, DEFAULT_FEATURES, LONGEST_SIGNAME = 7, LEFT,
  CHCASE, LOWER, UPPER, AREF_HASH_UNIT = 5,
  AREF_HASH_THRESHOLD = 10, TMOPT_IN, TMOPT_MAX_, CALLER_BINDING_SELF,
  CALLER_BINDING_CLASS, CALLER_BINDING_BINDING, CALLER_BINDING_ISEQ, CALLER_BINDING_CFP,
  VM_FRAME_MAGIC_METHOD = 0x11110001, VM_FRAME_MAGIC_BLOCK = 0x22220001, VM_FRAME_MAGIC_CLASS = 0x33330001, VM_FRAME_MAGIC_TOP = 0x44440001,
  VM_FRAME_MAGIC_CFUNC = 0x55550001, VM_FRAME_MAGIC_IFUNC = 0x66660001, VM_FRAME_MAGIC_EVAL = 0x77770001, VM_FRAME_MAGIC_RESCUE = 0x78880001,
  VM_FRAME_MAGIC_DUMMY = 0x79990001, VM_FRAME_MAGIC_MASK = 0x7fff0001, VM_FRAME_FLAG_PASSED = 0x0010, VM_FRAME_FLAG_FINISH = 0x0020,
  VM_FRAME_FLAG_BMETHOD = 0x0040, VM_FRAME_FLAG_CFRAME = 0x0080, VM_FRAME_FLAG_LAMBDA = 0x0100, VM_FRAME_FLAG_MODIFIED_BLOCK_PARAM = 0x0200,
  VM_FRAME_FLAG_CFRAME_KW = 0x0400, VM_FRAME_FLAG_CFRAME_EMPTY_KW = 0x0800, VM_ENV_FLAG_LOCAL = 0x0002, VM_ENV_FLAG_ESCAPED = 0x0004,
  VM_ENV_FLAG_WB_REQUIRED = 0x0008, MINIMUM_REPARSE_BUFFER_PATH_LEN = 4, SI_USER = 0, SI_ASYNCIO = 2,
  SI_MESGQ, SI_TIMER, SI_QUEUE, SI_KERNEL,
  ILL_ILLOPC = 7, ILL_ILLOPN, ILL_ILLADR, ILL_ILLTRP,
  ILL_PRVOPC, ILL_PRVREG, ILL_COPROC, ILL_BADSTK,
  FPE_INTDIV = 15, FPE_INTOVF, FPE_FLTDIV, FPE_FLTOVF,
  FPE_FLTUND, FPE_FLTRES, FPE_FLTINV, FPE_FLTSUB,
  SEGV_MAPERR = 23, SEGV_ACCERR, BUS_ADRALN = 25, BUS_ADRERR,
  BUS_OBJERR, CLD_EXITED = 28, CLD_KILLED, CLD_DUMPED,
  CLD_TRAPPED, CLD_STOPPED, CLD_CONTINUED
}
 
enum  gc_mode { gc_mode_none, gc_mode_marking, gc_mode_sweeping }
 
enum  {
  NUM_GPR_ARG_REGISTERS = 8, NUM_FPR_ARG_REGISTERS = 13, LINKAGE_AREA_GPRS = 6, JSON_object_first_final = 27,
  HEAP_PAGE_ALIGN = (1UL << HEAP_PAGE_ALIGN_LOG), HEAP_PAGE_ALIGN_MASK = (~(~0UL << HEAP_PAGE_ALIGN_LOG)), REQUIRED_SIZE_BY_MALLOC = (sizeof(size_t) * 5), HEAP_PAGE_SIZE = (HEAP_PAGE_ALIGN - REQUIRED_SIZE_BY_MALLOC),
  HEAP_PAGE_OBJ_LIMIT = (unsigned int)((HEAP_PAGE_SIZE - sizeof(struct heap_page_header))/sizeof(struct RVALUE)), HEAP_PAGE_BITMAP_LIMIT = CEILDIV(CEILDIV(HEAP_PAGE_SIZE, sizeof(struct RVALUE)), BITS_BITLENGTH), HEAP_PAGE_BITMAP_SIZE = (BITS_SIZE * HEAP_PAGE_BITMAP_LIMIT), HEAP_PAGE_BITMAP_PLANES = USE_RGENGC ? 4 : 1,
  cmp_opt_Fixnum, cmp_opt_String, cmp_opt_Float, cmp_optimizable_count,
  utf_prefix_len = (int)sizeof(utf_prefix) - 1, base_dump_size = 8, TIMER_INTERRUPT_MASK = 0x01, PENDING_INTERRUPT_MASK = 0x02,
  POSTPONED_JOB_INTERRUPT_MASK = 0x04, TRAP_INTERRUPT_MASK = 0x08, constat_init = -2, constat_esc = -1,
  constat_seq = 0, SIGEV_SIGNAL = 0, SIGEV_NONE, SIGEV_THREAD
}
 
enum  {
  ASM_NEEDS_REGISTERS = 4, JSON_object_error = 0, gc_stress_no_major, gc_stress_no_immediate_sweep,
  gc_stress_full_mark_after_malloc, gc_stress_max, RSTRUCT_EMBED_LEN_MAX = RVALUE_EMBED_LEN_MAX, RSTRUCT_EMBED_LEN_MASK = (RUBY_FL_USER2|RUBY_FL_USER1),
  RSTRUCT_EMBED_LEN_SHIFT = (RUBY_FL_USHIFT+1), RSTRUCT_TRANSIENT_FLAG = ((VALUE)RUBY_FL_USER3), RSTRUCT_ENUM_END
}
 
enum  gc_stat_sym {
  gc_stat_sym_count, gc_stat_sym_heap_allocated_pages, gc_stat_sym_heap_sorted_length, gc_stat_sym_heap_allocatable_pages,
  gc_stat_sym_heap_available_slots, gc_stat_sym_heap_live_slots, gc_stat_sym_heap_free_slots, gc_stat_sym_heap_final_slots,
  gc_stat_sym_heap_marked_slots, gc_stat_sym_heap_eden_pages, gc_stat_sym_heap_tomb_pages, gc_stat_sym_total_allocated_pages,
  gc_stat_sym_total_freed_pages, gc_stat_sym_total_allocated_objects, gc_stat_sym_total_freed_objects, gc_stat_sym_malloc_increase_bytes,
  gc_stat_sym_malloc_increase_bytes_limit, gc_stat_sym_minor_gc_count, gc_stat_sym_major_gc_count, gc_stat_sym_compact_count,
  gc_stat_sym_remembered_wb_unprotected_objects, gc_stat_sym_remembered_wb_unprotected_objects_limit, gc_stat_sym_old_objects, gc_stat_sym_old_objects_limit,
  gc_stat_sym_oldmalloc_increase_bytes, gc_stat_sym_oldmalloc_increase_bytes_limit, gc_stat_sym_last
}
 
enum  gc_stat_compat_sym {
  gc_stat_compat_sym_gc_stat_heap_used, gc_stat_compat_sym_heap_eden_page_length, gc_stat_compat_sym_heap_tomb_page_length, gc_stat_compat_sym_heap_increment,
  gc_stat_compat_sym_heap_length, gc_stat_compat_sym_heap_live_slot, gc_stat_compat_sym_heap_free_slot, gc_stat_compat_sym_heap_final_slot,
  gc_stat_compat_sym_heap_swept_slot, gc_stat_compat_sym_remembered_shady_object, gc_stat_compat_sym_remembered_shady_object_limit, gc_stat_compat_sym_old_object,
  gc_stat_compat_sym_old_object_limit, gc_stat_compat_sym_total_allocated_object, gc_stat_compat_sym_total_freed_object, gc_stat_compat_sym_malloc_increase,
  gc_stat_compat_sym_malloc_limit, gc_stat_compat_sym_oldmalloc_increase, gc_stat_compat_sym_oldmalloc_limit, gc_stat_compat_sym_last
}
 
enum  memop_type { MEMOP_TYPE_MALLOC = 0, MEMOP_TYPE_FREE, MEMOP_TYPE_REALLOC }
 

Functions

 PRINTF_ARGS (NORETURN(static void gc_raise(VALUE, const char *,...)), 2, 3)
 
size_t rb_size_mul_or_raise (size_t x, size_t y, VALUE exc)
 
size_t rb_size_mul_add_or_raise (size_t x, size_t y, size_t z, VALUE exc)
 
volatile VALUErb_gc_guarded_ptr_val (volatile VALUE *ptr, VALUE val)
 
void rb_iseq_mark (const rb_iseq_t *iseq)
 
void rb_iseq_update_references (rb_iseq_t *iseq)
 
void rb_iseq_free (const rb_iseq_t *iseq)
 
size_t rb_iseq_memsize (const rb_iseq_t *iseq)
 
void rb_vm_update_references (void *ptr)
 
void rb_gcdebug_print_obj_condition (VALUE obj)
 
 NORETURN (static void negative_size_allocation_error(const char *))
 
 NO_SANITIZE ("memory", static void gc_mark_maybe(rb_objspace_t *objspace, VALUE ptr))
 
 NO_SANITIZE ("memory", static inline int is_pointer_to_heap(rb_objspace_t *objspace, void *ptr))
 
 PRINTF_ARGS (static void gc_report_body(int level, rb_objspace_t *objspace, const char *fmt,...), 3, 4)
 
rb_objspace_trb_objspace_alloc (void)
 
void rb_objspace_free (rb_objspace_t *objspace)
 
void rb_objspace_set_event_hook (const rb_event_flag_t event)
 
 NOINLINE (static VALUE newobj_slowpath_wb_protected(VALUE klass, VALUE flags, VALUE v1, VALUE v2, VALUE v3, rb_objspace_t *objspace))
 
VALUE rb_wb_unprotected_newobj_of (VALUE klass, VALUE flags)
 
VALUE rb_wb_protected_newobj_of (VALUE klass, VALUE flags)
 
VALUE rb_newobj (void)
 
VALUE rb_newobj_of (VALUE klass, VALUE flags)
 
VALUE rb_imemo_new (enum imemo_type type, VALUE v1, VALUE v2, VALUE v3, VALUE v0)
 
rb_imemo_tmpbuf_trb_imemo_tmpbuf_parser_heap (void *buf, rb_imemo_tmpbuf_t *old_heap, size_t cnt)
 
VALUE rb_data_object_wrap (VALUE klass, void *datap, RUBY_DATA_FUNC dmark, RUBY_DATA_FUNC dfree)
 
 RUBY_ALIAS_FUNCTION (rb_data_object_alloc(VALUE klass, void *datap, RUBY_DATA_FUNC dmark, RUBY_DATA_FUNC dfree), rb_data_object_wrap,(klass, datap, dmark, dfree))
 
VALUE rb_data_typed_object_wrap (VALUE klass, void *datap, const rb_data_type_t *type)
 
 RUBY_ALIAS_FUNCTION (rb_data_typed_object_alloc(VALUE klass, void *datap, const rb_data_type_t *type), rb_data_typed_object_wrap,(klass, datap, type))
 
size_t rb_objspace_data_type_memsize (VALUE obj)
 
const charrb_objspace_data_type_name (VALUE obj)
 
void rb_free_const_table (struct rb_id_table *tbl)
 
void Init_heap (void)
 
void Init_gc_stress (void)
 
void rb_objspace_each_objects (each_obj_callback *callback, void *data)
 
void rb_objspace_each_objects_without_setup (each_obj_callback *callback, void *data)
 
int rb_objspace_internal_object_p (VALUE obj)
 
VALUE rb_undefine_finalizer (VALUE obj)
 
VALUE rb_define_finalizer (VALUE obj, VALUE block)
 
void rb_gc_copy_finalizer (VALUE dest, VALUE obj)
 
void rb_objspace_call_finalizer (rb_objspace_t *objspace)
 
 PUREFUNC (static inline int is_id_value(rb_objspace_t *objspace, VALUE ptr))
 
int rb_objspace_markable_object_p (VALUE obj)
 
int rb_objspace_garbage_object_p (VALUE obj)
 
VALUE rb_memory_id (VALUE obj)
 
VALUE rb_obj_id (VALUE obj)
 
size_t rb_obj_memsize_of (VALUE obj)
 
int ruby_get_stack_grow_direction (volatile VALUE *addr)
 
size_t ruby_stack_length (VALUE **p)
 
MJIT_FUNC_EXPORTED int rb_ec_stack_check (rb_execution_context_t *ec)
 
int ruby_stack_check (void)
 
 ATTRIBUTE_NO_ADDRESS_SAFETY_ANALYSIS (static void mark_locations_array(rb_objspace_t *objspace, register const VALUE *x, register long n))
 
void rb_gc_mark_locations (const VALUE *start, const VALUE *end)
 
void rb_gc_mark_values (long n, const VALUE *values)
 
void rb_gc_mark_vm_stack_values (long n, const VALUE *values)
 
void rb_mark_set (st_table *tbl)
 
void rb_mark_hash (st_table *tbl)
 
void rb_gc_mark_machine_stack (const rb_execution_context_t *ec)
 
void rb_mark_tbl (st_table *tbl)
 
void rb_mark_tbl_no_pin (st_table *tbl)
 
void rb_gc_mark_maybe (VALUE obj)
 
 NOINLINE (static void gc_mark_ptr(rb_objspace_t *objspace, VALUE obj))
 
void rb_gc_mark_movable (VALUE ptr)
 
void rb_gc_mark (VALUE ptr)
 
int rb_objspace_marked_object_p (VALUE obj)
 
void rb_gc_verify_internal_consistency (void)
 
 NOINLINE (static void gc_writebarrier_generational(VALUE a, VALUE b, rb_objspace_t *objspace))
 
void rb_gc_writebarrier (VALUE a, VALUE b)
 
void rb_gc_writebarrier_unprotect (VALUE obj)
 
MJIT_FUNC_EXPORTED void rb_gc_writebarrier_remember (VALUE obj)
 
void rb_gc_unprotect_logging (void *objptr, const char *filename, int line)
 
void rb_copy_wb_protected_attribute (VALUE dest, VALUE obj)
 
VALUE rb_obj_rgengc_writebarrier_protected_p (VALUE obj)
 
VALUE rb_obj_rgengc_promoted_p (VALUE obj)
 
size_t rb_obj_gc_flags (VALUE obj, ID *flags, size_t max)
 
void rb_gc_force_recycle (VALUE obj)
 
void rb_gc_register_mark_object (VALUE obj)
 
void rb_gc_register_address (VALUE *addr)
 
void rb_gc_unregister_address (VALUE *addr)
 
void rb_global_variable (VALUE *var)
 
void rb_gc_update_tbl_refs (st_table *ptr)
 
VALUE rb_gc_location (VALUE value)
 
VALUE rb_gc_start (void)
 
void rb_gc (void)
 
int rb_during_gc (void)
 
size_t rb_gc_count (void)
 
VALUE rb_gc_latest_gc_info (VALUE key)
 
size_t rb_gc_stat (VALUE key)
 
VALUE rb_gc_enable (void)
 
VALUE rb_objspace_gc_enable (rb_objspace_t *objspace)
 
VALUE rb_gc_disable_no_rest (void)
 
VALUE rb_gc_disable (void)
 
VALUE rb_objspace_gc_disable (rb_objspace_t *objspace)
 
void ruby_gc_set_params (void)
 
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 *passing_data)
 
void rb_memerror (void)
 
voidrb_aligned_malloc (size_t alignment, size_t size)
 
void rb_malloc_info_show_results (void)
 
voidruby_xmalloc_body (size_t size)
 
void ruby_malloc_size_overflow (size_t count, size_t elsize)
 
voidruby_xmalloc2_body (size_t n, size_t size)
 
voidruby_xcalloc_body (size_t n, size_t size)
 
voidruby_sized_xrealloc (void *ptr, size_t new_size, size_t old_size)
 
voidruby_xrealloc_body (void *ptr, size_t new_size)
 
voidruby_sized_xrealloc2 (void *ptr, size_t n, size_t size, size_t old_n)
 
voidruby_xrealloc2_body (void *ptr, size_t n, size_t size)
 
void ruby_sized_xfree (void *x, size_t size)
 
void ruby_xfree (void *x)
 
voidrb_xmalloc_mul_add (size_t x, size_t y, size_t z)
 
voidrb_xrealloc_mul_add (const void *p, size_t x, size_t y, size_t z)
 
voidrb_xmalloc_mul_add_mul (size_t x, size_t y, size_t z, size_t w)
 
voidrb_xcalloc_mul_add_mul (size_t x, size_t y, size_t z, size_t w)
 
voidruby_mimmalloc (size_t size)
 
void ruby_mimfree (void *ptr)
 
voidrb_alloc_tmp_buffer_with_count (volatile VALUE *store, size_t size, size_t cnt)
 
voidrb_alloc_tmp_buffer (volatile VALUE *store, long len)
 
void rb_free_tmp_buffer (volatile VALUE *store)
 
void rb_gc_adjust_memory_usage (ssize_t diff)
 
const charrb_method_type_name (rb_method_type_t type)
 
const charrb_raw_obj_info (char *buff, const int buff_size, VALUE obj)
 
MJIT_FUNC_EXPORTED const charrb_obj_info (VALUE obj)
 
void rb_obj_info_dump (VALUE obj)
 
void rb_obj_info_dump_loc (VALUE obj, const char *file, int line, const char *func)
 
void Init_GC (void)
 
voidruby_xmalloc (size_t size)
 
voidruby_xmalloc2 (size_t n, size_t size)
 
voidruby_xcalloc (size_t n, size_t size)
 
voidruby_xrealloc (void *ptr, size_t new_size)
 
voidruby_xrealloc2 (void *ptr, size_t n, size_t new_size)
 

Variables

volatile VALUE rb_gc_guarded_val
 
int ruby_rgengc_debug
 
VALUEruby_initial_gc_stress_ptr = &ruby_initial_gc_stress
 
VALUE rb_mGC
 
int ruby_disable_gc = 0
 
int ruby_stack_grow_direction
 
rb_symbols_t ruby_global_symbols
 
const struct st_hash_type rb_hashtype_ident
 

Macro Definition Documentation

◆ APPENDF

#define APPENDF (   f)    if ((pos += snprintf f) >= buff_size) goto end

◆ ARY_EMBED_P

#define ARY_EMBED_P (   ary)
Value:
FL_TEST((ary), RARRAY_EMBED_FLAG)!=0)

Definition at line 11429 of file gc.c.

◆ ARY_SHARED_P

#define ARY_SHARED_P (   ary)
Value:
FL_TEST((ary),ELTS_SHARED)!=0)

Definition at line 11426 of file gc.c.

◆ BITMAP_BIT

#define BITMAP_BIT (   p)    ((bits_t)1 << BITMAP_OFFSET(p))

Definition at line 883 of file gc.c.

◆ BITMAP_INDEX

#define BITMAP_INDEX (   p)    (NUM_IN_PAGE(p) / BITS_BITLENGTH )

Definition at line 881 of file gc.c.

◆ BITMAP_OFFSET

#define BITMAP_OFFSET (   p)    (NUM_IN_PAGE(p) & (BITS_BITLENGTH-1))

Definition at line 882 of file gc.c.

◆ BUFF_ARGS

#define BUFF_ARGS   buff + pos, buff_size - pos

◆ C

#define C (   c,
 
)    ((c) != 0 ? (s) : " ")

◆ CALC_EXACT_MALLOC_SIZE

#define CALC_EXACT_MALLOC_SIZE   USE_GC_MALLOC_OBJ_INFO_DETAILS

Definition at line 470 of file gc.c.

◆ CEILDIV

#define CEILDIV (   i,
  mod 
)    (((i) + (mod) - 1)/(mod))

Definition at line 833 of file gc.c.

◆ CLEAR_IN_BITMAP

#define CLEAR_IN_BITMAP (   bits,
 
)    ((bits)[BITMAP_INDEX(p)] = (bits)[BITMAP_INDEX(p)] & ~BITMAP_BIT(p))

Definition at line 888 of file gc.c.

◆ COUNT_TYPE

#define COUNT_TYPE (   t)    case (t): return ID2SYM(rb_intern(#t)); break;

◆ dont_gc

#define dont_gc   objspace->flags.dont_gc

Definition at line 921 of file gc.c.

◆ during_gc

#define during_gc   objspace->flags.during_gc

Definition at line 922 of file gc.c.

◆ finalizer_table

#define finalizer_table   objspace->finalizer_table

Definition at line 924 of file gc.c.

◆ finalizing

#define finalizing   objspace->atomic_flags.finalizing

Definition at line 923 of file gc.c.

◆ FL_CHECK2

#define FL_CHECK2 (   name,
  x,
  pred 
)
Value:
(rb_bug(name": SPECIAL_CONST (%p)", (void *)(x)), 0) : (pred))

Definition at line 1203 of file gc.c.

◆ FL_SET2

#define FL_SET2 (   x,
  f 
)    FL_CHECK2("FL_SET2", x, RBASIC(x)->flags |= (f))

Definition at line 1207 of file gc.c.

◆ FL_TEST2

#define FL_TEST2 (   x,
  f 
)    FL_CHECK2("FL_TEST2", x, FL_TEST_RAW((x),(f)) != 0)

Definition at line 1206 of file gc.c.

◆ FL_UNSET2

#define FL_UNSET2 (   x,
  f 
)    FL_CHECK2("FL_UNSET2", x, RBASIC(x)->flags &= ~(f))

Definition at line 1208 of file gc.c.

◆ GC_ASSERT

#define GC_ASSERT (   expr)    RUBY_ASSERT_MESG_WHEN(RGENGC_CHECK_MODE > 0, expr, #expr)

Definition at line 403 of file gc.c.

◆ GC_DEBUG

#define GC_DEBUG   0

Definition at line 365 of file gc.c.

◆ GC_DEBUG_STRESS_TO_CLASS

#define GC_DEBUG_STRESS_TO_CLASS   0

Definition at line 484 of file gc.c.

◆ GC_ENABLE_INCREMENTAL_MARK

#define GC_ENABLE_INCREMENTAL_MARK   USE_RINCGC

Definition at line 464 of file gc.c.

◆ GC_ENABLE_LAZY_SWEEP

#define GC_ENABLE_LAZY_SWEEP   1

Definition at line 467 of file gc.c.

◆ gc_event_hook

#define gc_event_hook (   objspace,
  event,
  data 
)
Value:
do { \
if (UNLIKELY(gc_event_hook_needed_p(objspace, event))) { \
gc_event_hook_body(GET_EC(), (objspace), (event), (data)); \
} \
} while (0)

Definition at line 2104 of file gc.c.

◆ gc_event_hook_available_p

#define gc_event_hook_available_p (   objspace)    ((objspace)->flags.has_hook)

Definition at line 2101 of file gc.c.

◆ gc_event_hook_needed_p

#define gc_event_hook_needed_p (   objspace,
  event 
)    ((objspace)->hook_events & (event))

Definition at line 2102 of file gc.c.

◆ GC_HEAP_FREE_SLOTS

#define GC_HEAP_FREE_SLOTS   4096

Definition at line 262 of file gc.c.

◆ GC_HEAP_FREE_SLOTS_GOAL_RATIO

#define GC_HEAP_FREE_SLOTS_GOAL_RATIO   0.40

Definition at line 278 of file gc.c.

◆ GC_HEAP_FREE_SLOTS_MAX_RATIO

#define GC_HEAP_FREE_SLOTS_MAX_RATIO   0.65

Definition at line 281 of file gc.c.

◆ GC_HEAP_FREE_SLOTS_MIN_RATIO

#define GC_HEAP_FREE_SLOTS_MIN_RATIO   0.20

Definition at line 275 of file gc.c.

◆ GC_HEAP_GROWTH_FACTOR

#define GC_HEAP_GROWTH_FACTOR   1.8

Definition at line 265 of file gc.c.

◆ GC_HEAP_GROWTH_MAX_SLOTS

#define GC_HEAP_GROWTH_MAX_SLOTS   0 /* 0 is disable */

Definition at line 268 of file gc.c.

◆ GC_HEAP_INIT_SLOTS

#define GC_HEAP_INIT_SLOTS   10000

Definition at line 259 of file gc.c.

◆ GC_HEAP_OLDOBJECT_LIMIT_FACTOR

#define GC_HEAP_OLDOBJECT_LIMIT_FACTOR   2.0

Definition at line 271 of file gc.c.

◆ GC_MALLOC_LIMIT_GROWTH_FACTOR

#define GC_MALLOC_LIMIT_GROWTH_FACTOR   1.4

Definition at line 291 of file gc.c.

◆ GC_MALLOC_LIMIT_MAX

#define GC_MALLOC_LIMIT_MAX   (32 * 1024 * 1024 /* 32MB */)

Definition at line 288 of file gc.c.

◆ GC_MALLOC_LIMIT_MIN

#define GC_MALLOC_LIMIT_MIN   (16 * 1024 * 1024 /* 16MB */)

Definition at line 285 of file gc.c.

◆ gc_mode

#define gc_mode (   objspace)    gc_mode_verify((enum gc_mode)(objspace)->flags.mode)

Definition at line 950 of file gc.c.

◆ gc_mode_set

#define gc_mode_set (   objspace,
  mode 
)    ((objspace)->flags.mode = (unsigned int)gc_mode_verify(mode))

Definition at line 951 of file gc.c.

◆ GC_NOTIFY

#define GC_NOTIFY   0

Definition at line 7120 of file gc.c.

◆ GC_OLDMALLOC_LIMIT_GROWTH_FACTOR

#define GC_OLDMALLOC_LIMIT_GROWTH_FACTOR   1.2

Definition at line 298 of file gc.c.

◆ GC_OLDMALLOC_LIMIT_MAX

#define GC_OLDMALLOC_LIMIT_MAX   (128 * 1024 * 1024 /* 128MB */)

Definition at line 301 of file gc.c.

◆ GC_OLDMALLOC_LIMIT_MIN

#define GC_OLDMALLOC_LIMIT_MIN   (16 * 1024 * 1024 /* 16MB */)

Definition at line 295 of file gc.c.

◆ gc_prof_enabled

#define gc_prof_enabled (   objspace)    ((objspace)->profile.run && (objspace)->profile.current_record)

Definition at line 1087 of file gc.c.

◆ gc_prof_record

#define gc_prof_record (   objspace)    (objspace)->profile.current_record

Definition at line 1086 of file gc.c.

◆ GC_PROFILE_DETAIL_MEMORY

#define GC_PROFILE_DETAIL_MEMORY   0

Definition at line 461 of file gc.c.

◆ GC_PROFILE_MORE_DETAIL

#define GC_PROFILE_MORE_DETAIL   0

Definition at line 458 of file gc.c.

◆ GC_PROFILE_RECORD_DEFAULT_SIZE

#define GC_PROFILE_RECORD_DEFAULT_SIZE   100

Definition at line 10759 of file gc.c.

◆ gc_report

#define gc_report   if (!RGENGC_DEBUG_ENABLED(0)) {} else gc_report_body

Definition at line 1093 of file gc.c.

◆ gc_stress_full_mark_after_malloc_p

#define gc_stress_full_mark_after_malloc_p ( )     (FIXNUM_P(ruby_gc_stress_mode) && (FIX2LONG(ruby_gc_stress_mode) & (1<<gc_stress_full_mark_after_malloc)))

Definition at line 7129 of file gc.c.

◆ GET_HEAP_MARK_BITS

#define GET_HEAP_MARK_BITS (   x)    (&GET_HEAP_PAGE(x)->mark_bits[0])

Definition at line 891 of file gc.c.

◆ GET_HEAP_MARKING_BITS

#define GET_HEAP_MARKING_BITS (   x)    (&GET_HEAP_PAGE(x)->marking_bits[0])

Definition at line 896 of file gc.c.

◆ GET_HEAP_PAGE

#define GET_HEAP_PAGE (   x)    (GET_PAGE_HEADER(x)->page)

Definition at line 878 of file gc.c.

◆ GET_HEAP_PINNED_BITS

#define GET_HEAP_PINNED_BITS (   x)    (&GET_HEAP_PAGE(x)->pinned_bits[0])

Definition at line 892 of file gc.c.

◆ GET_HEAP_UNCOLLECTIBLE_BITS

#define GET_HEAP_UNCOLLECTIBLE_BITS (   x)    (&GET_HEAP_PAGE(x)->uncollectible_bits[0])

Definition at line 894 of file gc.c.

◆ GET_HEAP_WB_UNPROTECTED_BITS

#define GET_HEAP_WB_UNPROTECTED_BITS (   x)    (&GET_HEAP_PAGE(x)->wb_unprotected_bits[0])

Definition at line 895 of file gc.c.

◆ GET_PAGE_BODY

#define GET_PAGE_BODY (   x)    ((struct heap_page_body *)((bits_t)(x) & ~(HEAP_PAGE_ALIGN_MASK)))

Definition at line 876 of file gc.c.

◆ GET_PAGE_HEADER

#define GET_PAGE_HEADER (   x)    (&GET_PAGE_BODY(x)->header)

Definition at line 877 of file gc.c.

◆ GET_STACK_BOUNDS

#define GET_STACK_BOUNDS (   start,
  end,
  appendix 
)
Value:
((start) = STACK_END, (end) = STACK_START) : ((start) = STACK_START, (end) = STACK_END+(appendix)))

Definition at line 4950 of file gc.c.

◆ global_list

#define global_list   objspace->global_list

Definition at line 925 of file gc.c.

◆ global_symbols

#define global_symbols   ruby_global_symbols

Definition at line 8410 of file gc.c.

◆ has_sweeping_pages

#define has_sweeping_pages (   heap)    ((heap)->sweeping_page != 0)

Definition at line 970 of file gc.c.

◆ heap_allocatable_pages

#define heap_allocatable_pages   objspace->heap_pages.allocatable_pages

Definition at line 915 of file gc.c.

◆ heap_allocated_pages

#define heap_allocated_pages   objspace->heap_pages.allocated_pages

Definition at line 911 of file gc.c.

◆ heap_eden

#define heap_eden   (&objspace->eden_heap)

Definition at line 919 of file gc.c.

◆ HEAP_PAGE_ALIGN_LOG

#define HEAP_PAGE_ALIGN_LOG   14

Definition at line 832 of file gc.c.

◆ heap_pages_deferred_final

#define heap_pages_deferred_final   objspace->heap_pages.deferred_final

Definition at line 918 of file gc.c.

◆ heap_pages_final_slots

#define heap_pages_final_slots   objspace->heap_pages.final_slots

Definition at line 917 of file gc.c.

◆ heap_pages_freeable_pages

#define heap_pages_freeable_pages   objspace->heap_pages.freeable_pages

Definition at line 916 of file gc.c.

◆ heap_pages_himem

#define heap_pages_himem   objspace->heap_pages.range[1]

Definition at line 914 of file gc.c.

◆ heap_pages_lomem

#define heap_pages_lomem   objspace->heap_pages.range[0]

Definition at line 913 of file gc.c.

◆ heap_pages_sorted

#define heap_pages_sorted   objspace->heap_pages.sorted

Definition at line 910 of file gc.c.

◆ heap_pages_sorted_length

#define heap_pages_sorted_length   objspace->heap_pages.sorted_length

Definition at line 912 of file gc.c.

◆ heap_tomb

#define heap_tomb   (&objspace->tomb_heap)

Definition at line 920 of file gc.c.

◆ I

#define I (   s)    ID_##s = rb_intern(#s);

◆ IMEMO_NAME

#define IMEMO_NAME (   x)    case imemo_##x: imemo_name = #x; break;

◆ is_full_marking

#define is_full_marking (   objspace)    ((objspace)->flags.during_minor_gc == FALSE)

Definition at line 956 of file gc.c.

◆ is_incremental_marking

#define is_incremental_marking (   objspace)    ((objspace)->flags.during_incremental_marking != FALSE)

Definition at line 961 of file gc.c.

◆ is_lazy_sweeping

#define is_lazy_sweeping (   heap)    (GC_ENABLE_LAZY_SWEEP && has_sweeping_pages(heap))

Definition at line 971 of file gc.c.

◆ is_marking

#define is_marking (   objspace)    (gc_mode(objspace) == gc_mode_marking)

Definition at line 953 of file gc.c.

◆ is_sweeping

#define is_sweeping (   objspace)    (gc_mode(objspace) == gc_mode_sweeping)

Definition at line 954 of file gc.c.

◆ MALLOC_ALLOCATED_SIZE

#define MALLOC_ALLOCATED_SIZE   0

Definition at line 477 of file gc.c.

◆ malloc_allocated_size

#define malloc_allocated_size   objspace->malloc_params.allocated_size

Definition at line 909 of file gc.c.

◆ MALLOC_ALLOCATED_SIZE_CHECK

#define MALLOC_ALLOCATED_SIZE_CHECK   0

Definition at line 480 of file gc.c.

◆ malloc_increase

#define malloc_increase   objspace->malloc_params.increase

Definition at line 908 of file gc.c.

◆ malloc_limit

#define malloc_limit   objspace->malloc_params.limit

Definition at line 907 of file gc.c.

◆ MARK_CHECKPOINT

#define MARK_CHECKPOINT (   category)
Value:
do { \
if (categoryp) *categoryp = category; \
MARK_CHECKPOINT_PRINT_TICK(category); \
} while (0)

◆ MARK_CHECKPOINT_PRINT_TICK

#define MARK_CHECKPOINT_PRINT_TICK (   category)

◆ MARK_IN_BITMAP

#define MARK_IN_BITMAP (   bits,
 
)    ((bits)[BITMAP_INDEX(p)] = (bits)[BITMAP_INDEX(p)] | BITMAP_BIT(p))

Definition at line 887 of file gc.c.

◆ MARK_OBJECT_ARY_BUCKET_SIZE

#define MARK_OBJECT_ARY_BUCKET_SIZE   1024

Definition at line 7062 of file gc.c.

◆ MARKED_IN_BITMAP

#define MARKED_IN_BITMAP (   bits,
 
)    ((bits)[BITMAP_INDEX(p)] & BITMAP_BIT(p))

Definition at line 886 of file gc.c.

◆ MEASURE_LINE

#define MEASURE_LINE (   expr)    expr

Definition at line 1200 of file gc.c.

◆ NEW_SYM

#define NEW_SYM (   s)    gc_stat_symbols[gc_stat_sym_##s]

◆ nomem_error

#define nomem_error   GET_VM()->special_exceptions[ruby_error_nomemory]

Definition at line 995 of file gc.c.

◆ nonspecial_obj_id

#define nonspecial_obj_id (   obj)    (VALUE)((SIGNED_VALUE)(obj)|FIXNUM_FLAG)

Definition at line 974 of file gc.c.

◆ NUM2PTR

#define NUM2PTR (   x)    NUM2ULONG(x)

◆ NUM_IN_PAGE

#define NUM_IN_PAGE (   p)    (((bits_t)(p) & HEAP_PAGE_ALIGN_MASK)/sizeof(RVALUE))

Definition at line 880 of file gc.c.

◆ OBJ_ID_INCREMENT

#define OBJ_ID_INCREMENT   (sizeof(RVALUE) / 2)

Definition at line 2883 of file gc.c.

◆ OBJ_ID_INITIAL

#define OBJ_ID_INITIAL   (OBJ_ID_INCREMENT * 2)

Definition at line 2884 of file gc.c.

◆ obj_id_to_ref

#define obj_id_to_ref (   objid)    ((objid) ^ FIXNUM_FLAG) /* unset FIXNUM_FLAG */

Definition at line 975 of file gc.c.

◆ OLD_SYM

#define OLD_SYM (   s)    gc_stat_compat_symbols[gc_stat_compat_sym_##s]

◆ OPT

#define OPT (   o)    if (o) rb_ary_push(opts, rb_fstring_lit(#o))

◆ POP_MARK_FUNC_DATA

#define POP_MARK_FUNC_DATA ( )    objspace->mark_func_data = prev_mark_func_data;} while (0)

Definition at line 1102 of file gc.c.

◆ popcount_bits

#define popcount_bits   rb_popcount_intptr

Definition at line 623 of file gc.c.

◆ PREVENT_STACK_OVERFLOW

#define PREVENT_STACK_OVERFLOW   1

Definition at line 4642 of file gc.c.

◆ PRINT_ENTER_EXIT_TICK

#define PRINT_ENTER_EXIT_TICK   0

Definition at line 308 of file gc.c.

◆ PRINT_MEASURE_LINE

#define PRINT_MEASURE_LINE   0

Definition at line 305 of file gc.c.

◆ PRINT_ROOT_TICKS

#define PRINT_ROOT_TICKS   0

Definition at line 311 of file gc.c.

◆ PROFILE_REMEMBERSET_MARK

#define PROFILE_REMEMBERSET_MARK   0

Definition at line 6656 of file gc.c.

◆ PUSH_MARK_FUNC_DATA

#define PUSH_MARK_FUNC_DATA (   v)
Value:
do { \
struct mark_func_data_struct *prev_mark_func_data = objspace->mark_func_data; \
objspace->mark_func_data = (v);

Definition at line 1098 of file gc.c.

◆ RANY

#define RANY (   o)    ((RVALUE*)(o))

Definition at line 984 of file gc.c.

◆ rb_data_object_alloc

#define rb_data_object_alloc   rb_data_object_alloc

Definition at line 14 of file gc.c.

◆ rb_data_typed_object_alloc

#define rb_data_typed_object_alloc   rb_data_typed_object_alloc

Definition at line 15 of file gc.c.

◆ rb_jmp_buf

#define rb_jmp_buf   rb_jmpbuf_t

Definition at line 82 of file gc.c.

◆ rb_objspace

#define rb_objspace   (*rb_objspace_of(GET_VM()))

Definition at line 900 of file gc.c.

◆ rb_objspace_of

#define rb_objspace_of (   vm)    ((vm)->objspace)

Definition at line 901 of file gc.c.

◆ rb_setjmp

#define rb_setjmp (   env)    RUBY_SETJMP(env)

Definition at line 81 of file gc.c.

◆ RESTORE_FINALIZER

#define RESTORE_FINALIZER ( )
Value:
(\
ec->cfp = saved.cfp, \
rb_set_errinfo(saved.errinfo))

◆ RGENGC_CHECK_MODE

#define RGENGC_CHECK_MODE   0

Definition at line 399 of file gc.c.

◆ RGENGC_DEBUG

#define RGENGC_DEBUG   0

Definition at line 380 of file gc.c.

◆ RGENGC_DEBUG_ENABLED

#define RGENGC_DEBUG_ENABLED (   level)    ((RGENGC_DEBUG) >= (level))

Definition at line 386 of file gc.c.

◆ RGENGC_ESTIMATE_OLDMALLOC

#define RGENGC_ESTIMATE_OLDMALLOC   1

Definition at line 431 of file gc.c.

◆ RGENGC_FORCE_MAJOR_GC

#define RGENGC_FORCE_MAJOR_GC   0

Definition at line 438 of file gc.c.

◆ RGENGC_OBJ_INFO

#define RGENGC_OBJ_INFO   (RGENGC_DEBUG | RGENGC_CHECK_MODE)

Definition at line 488 of file gc.c.

◆ RGENGC_OLD_NEWOBJ_CHECK

#define RGENGC_OLD_NEWOBJ_CHECK   0

Definition at line 412 of file gc.c.

◆ RGENGC_PROFILE

#define RGENGC_PROFILE   0

Definition at line 421 of file gc.c.

◆ RUBY_DTRACE_GC_HOOK

#define RUBY_DTRACE_GC_HOOK (   name)     do {if (RUBY_DTRACE_GC_##name##_ENABLED()) RUBY_DTRACE_GC_##name();} while (0)

Definition at line 10898 of file gc.c.

◆ ruby_gc_stress_mode

#define ruby_gc_stress_mode   objspace->gc_stress_mode

Definition at line 927 of file gc.c.

◆ ruby_gc_stressful

#define ruby_gc_stressful   objspace->flags.gc_stressful

Definition at line 926 of file gc.c.

◆ ruby_initial_gc_stress

#define ruby_initial_gc_stress   gc_params.gc_stress

Definition at line 903 of file gc.c.

◆ RVALUE_AGE_SHIFT

#define RVALUE_AGE_SHIFT   5 /* FL_PROMOTED0 bit */

Definition at line 1224 of file gc.c.

◆ RVALUE_MARK_BITMAP

#define RVALUE_MARK_BITMAP (   obj)    MARKED_IN_BITMAP(GET_HEAP_MARK_BITS(obj), (obj))

Definition at line 1210 of file gc.c.

◆ RVALUE_MARKING_BITMAP

#define RVALUE_MARKING_BITMAP (   obj)    MARKED_IN_BITMAP(GET_HEAP_MARKING_BITS(obj), (obj))

Definition at line 1217 of file gc.c.

◆ RVALUE_OLD_AGE

#define RVALUE_OLD_AGE   3

Definition at line 1223 of file gc.c.

◆ RVALUE_PAGE_MARKED

#define RVALUE_PAGE_MARKED (   page,
  obj 
)    MARKED_IN_BITMAP((page)->mark_bits, (obj))

Definition at line 1212 of file gc.c.

◆ RVALUE_PAGE_MARKING

#define RVALUE_PAGE_MARKING (   page,
  obj 
)    MARKED_IN_BITMAP((page)->marking_bits, (obj))

Definition at line 1221 of file gc.c.

◆ RVALUE_PAGE_UNCOLLECTIBLE

#define RVALUE_PAGE_UNCOLLECTIBLE (   page,
  obj 
)    MARKED_IN_BITMAP((page)->uncollectible_bits, (obj))

Definition at line 1220 of file gc.c.

◆ RVALUE_PAGE_WB_UNPROTECTED

#define RVALUE_PAGE_WB_UNPROTECTED (   page,
  obj 
)    MARKED_IN_BITMAP((page)->wb_unprotected_bits, (obj))

Definition at line 1219 of file gc.c.

◆ RVALUE_PIN_BITMAP

#define RVALUE_PIN_BITMAP (   obj)    MARKED_IN_BITMAP(GET_HEAP_PINNED_BITS(obj), (obj))

Definition at line 1211 of file gc.c.

◆ RVALUE_UNCOLLECTIBLE_BITMAP

#define RVALUE_UNCOLLECTIBLE_BITMAP (   obj)    MARKED_IN_BITMAP(GET_HEAP_UNCOLLECTIBLE_BITS(obj), (obj))

Definition at line 1216 of file gc.c.

◆ RVALUE_WB_UNPROTECTED_BITMAP

#define RVALUE_WB_UNPROTECTED_BITMAP (   obj)    MARKED_IN_BITMAP(GET_HEAP_WB_UNPROTECTED_BITS(obj), (obj))

Definition at line 1215 of file gc.c.

◆ RZOMBIE

#define RZOMBIE (   o)    ((struct RZombie *)(o))

Definition at line 993 of file gc.c.

◆ S [1/3]

#define S (   s)    sym_##s = ID2SYM(rb_intern_const(#s))

◆ S [2/3]

#define S (   s)    gc_stat_symbols[gc_stat_sym_##s] = ID2SYM(rb_intern_const(#s))

◆ S [3/3]

#define S (   s)    gc_stat_compat_symbols[gc_stat_compat_sym_##s] = ID2SYM(rb_intern_const(#s))

◆ SET [1/2]

#define SET (   name,
  attr 
)
Value:
if (key == sym_##name) \
return (attr); \
else if (hash != Qnil) \
rb_hash_aset(hash, sym_##name, (attr));

◆ SET [2/2]

#define SET (   name,
  attr 
)
Value:
if (key == gc_stat_symbols[gc_stat_sym_##name]) \
return attr; \
else if (hash != Qnil) \
rb_hash_aset(hash, gc_stat_symbols[gc_stat_sym_##name], SIZET2NUM(attr));

◆ SET_STACK_END

#define SET_STACK_END   SET_MACHINE_STACK_END(&ec->machine.stack_end)

Definition at line 4601 of file gc.c.

◆ STACK_CHUNK_SIZE

#define STACK_CHUNK_SIZE   500

Definition at line 640 of file gc.c.

◆ STACK_END

#define STACK_END   (ec->machine.stack_end)

Definition at line 4604 of file gc.c.

◆ STACK_LENGTH

#define STACK_LENGTH
Value:
: (size_t)(STACK_END - STACK_START + 1))

Definition at line 4617 of file gc.c.

◆ STACK_LEVEL_MAX

#define STACK_LEVEL_MAX   (ec->machine.stack_maxsize/sizeof(VALUE))

Definition at line 4605 of file gc.c.

◆ STACK_START

#define STACK_START   (ec->machine.stack_start)

Definition at line 4603 of file gc.c.

◆ STACKFRAME_FOR_CALL_CFUNC

#define STACKFRAME_FOR_CALL_CFUNC   2048

Definition at line 4665 of file gc.c.

◆ stress_to_class

#define stress_to_class   0

Definition at line 931 of file gc.c.

◆ TF

#define TF (   c)    ((c) != 0 ? "true" : "false")

◆ TICK_TYPE

#define TICK_TYPE   1

Definition at line 315 of file gc.c.

◆ TRY_WITH_GC

#define TRY_WITH_GC (   alloc)
Value:
do { \
objspace_malloc_gc_stress(objspace); \
if (!(alloc) && \
(!garbage_collect_with_gvl(objspace, GPR_FLAG_FULL_MARK | \
!(alloc))) { \
ruby_memerror(); \
} \
} while (0)

Definition at line 9841 of file gc.c.

◆ TYPE_NAME

#define TYPE_NAME (   t)    case (t): return #t;

◆ TYPED_UPDATE_IF_MOVED

#define TYPED_UPDATE_IF_MOVED (   _objspace,
  _type,
  _thing 
)
Value:
do { \
if (gc_object_moved_p(_objspace, (VALUE)_thing)) { \
*((_type *)(&_thing)) = (_type)RMOVED((_thing))->destination; \
} \
} while (0)

Definition at line 1078 of file gc.c.

◆ UNEXPECTED_NODE

#define UNEXPECTED_NODE (   func)
Value:
rb_bug(#func"(): GC does not handle T_NODE 0x%x(%p) 0x%"PRIxVALUE, \
BUILTIN_TYPE(obj), (void*)(obj), RBASIC(obj)->flags)

Definition at line 2301 of file gc.c.

◆ UPDATE_IF_MOVED

#define UPDATE_IF_MOVED (   _objspace,
  _thing 
)    TYPED_UPDATE_IF_MOVED(_objspace, VALUE, _thing)

Definition at line 1084 of file gc.c.

◆ USE_TICK_T

Definition at line 314 of file gc.c.

◆ will_be_incremental_marking

#define will_be_incremental_marking (   objspace)    ((objspace)->rgengc.need_major_gc != GPR_FLAG_NONE)

Definition at line 966 of file gc.c.

◆ WMAP_DELETE_DEAD_OBJECT_IN_MARK

#define WMAP_DELETE_DEAD_OBJECT_IN_MARK   0

Definition at line 10341 of file gc.c.

Typedef Documentation

◆ bits_t

typedef uintptr_t bits_t

Definition at line 618 of file gc.c.

◆ each_obj_callback

typedef int each_obj_callback(void *, void *, size_t, void *)

Definition at line 2938 of file gc.c.

◆ gc_profile_record

◆ mark_stack_t

typedef struct mark_stack mark_stack_t

◆ page_compare_func_t

typedef int page_compare_func_t(const void *, const void *, void *)

Definition at line 7769 of file gc.c.

◆ rb_heap_t

typedef struct rb_heap_struct rb_heap_t

◆ rb_objspace_t

typedef struct rb_objspace rb_objspace_t

◆ RVALUE

typedef struct RVALUE RVALUE

◆ stack_chunk_t

typedef struct stack_chunk stack_chunk_t

Enumeration Type Documentation

◆ anonymous enum

anonymous enum
Enumerator
DBL_BIGDIG 
COROUTINE_REGISTERS 
COROUTINE_REGISTERS 
COROUTINE_REGISTERS 
COROUTINE_REGISTERS 
COROUTINE_REGISTERS 
COROUTINE_REGISTERS 
COROUTINE_XMM_REGISTERS 
COROUTINE_REGISTERS 
NAME_ERR_MESG__MESG 
NAME_ERR_MESG__RECV 
NAME_ERR_MESG__NAME 
NAME_ERR_MESG_COUNT 
raise_opt_cause 
raise_max_opt 
RAISED_EXCEPTION 
RAISED_STACKOVERFLOW 
RAISED_NOMEMORY 
DECIMAL_SIZE_OF_LONG 
JISX0301_DATE_SIZE 
FLAG_RETURNS_128BITS 
FLAG_RETURNS_NOTHING 
FLAG_RETURNS_FP 
FLAG_RETURNS_64BITS 
FLAG_RETURNS_STRUCT 
FLAG_ARG_NEEDS_COPY 
FLAG_FP_ARGUMENTS 
FLAG_4_GPR_ARGUMENTS 
FLAG_RETVAL_REFERENCE 
FLAG_RETURNS_SMST 
FLAG_RETURNS_NOTHING 
FLAG_RETURNS_FP 
FLAG_RETURNS_64BITS 
FLAG_RETURNS_128BITS 
FLAG_COMPAT 
FLAG_ARG_NEEDS_COPY 
FLAG_ARG_NEEDS_PSAVE 
FLAG_FP_ARGUMENTS 
FLAG_4_GPR_ARGUMENTS 
FLAG_RETVAL_REFERENCE 
JSON_object_start 
ossl_asn1_info_size 
tIGNORED_NL 
tCOMMENT 
tEMBDOC_BEG 
tEMBDOC 
tEMBDOC_END 
tHEREDOC_BEG 
tHEREDOC_END 
k__END__ 
ORDINAL_PARAM 
NO_PARAM 
NUMPARAM_MAX 
BITS_SIZE 
BITS_BITLENGTH 
RSTRUCT_EMBED_LEN_MAX 
RSTRUCT_EMBED_LEN_MASK 
RSTRUCT_EMBED_LEN_SHIFT 
RSTRUCT_TRANSIENT_FLAG 
RSTRUCT_ENUM_END 
bom_prefix_len 
MT_MAX_STATE 
PCH_NOT_READY 
PCH_FAILED 
PCH_SUCCESS 
ORDINAL_PARAM 
NO_PARAM 
NUMPARAM_MAX 
COMPILATION_FEATURES 
DEFAULT_FEATURES 
LONGEST_SIGNAME 
LEFT 
CHCASE 
LOWER 
UPPER 
AREF_HASH_UNIT 
AREF_HASH_THRESHOLD 
TMOPT_IN 
TMOPT_MAX_ 
CALLER_BINDING_SELF 
CALLER_BINDING_CLASS 
CALLER_BINDING_BINDING 
CALLER_BINDING_ISEQ 
CALLER_BINDING_CFP 
VM_FRAME_MAGIC_METHOD 
VM_FRAME_MAGIC_BLOCK 
VM_FRAME_MAGIC_CLASS 
VM_FRAME_MAGIC_TOP 
VM_FRAME_MAGIC_CFUNC 
VM_FRAME_MAGIC_IFUNC 
VM_FRAME_MAGIC_EVAL 
VM_FRAME_MAGIC_RESCUE 
VM_FRAME_MAGIC_DUMMY 
VM_FRAME_MAGIC_MASK 
VM_FRAME_FLAG_PASSED 
VM_FRAME_FLAG_FINISH 
VM_FRAME_FLAG_BMETHOD 
VM_FRAME_FLAG_CFRAME 
VM_FRAME_FLAG_LAMBDA 
VM_FRAME_FLAG_MODIFIED_BLOCK_PARAM 
VM_FRAME_FLAG_CFRAME_KW 
VM_FRAME_FLAG_CFRAME_EMPTY_KW 
VM_ENV_FLAG_LOCAL 
VM_ENV_FLAG_ESCAPED 
VM_ENV_FLAG_WB_REQUIRED 
MINIMUM_REPARSE_BUFFER_PATH_LEN 
SI_USER 
SI_ASYNCIO 
SI_MESGQ 
SI_TIMER 
SI_QUEUE 
SI_KERNEL 
ILL_ILLOPC 
ILL_ILLOPN 
ILL_ILLADR 
ILL_ILLTRP 
ILL_PRVOPC 
ILL_PRVREG 
ILL_COPROC 
ILL_BADSTK 
FPE_INTDIV 
FPE_INTOVF 
FPE_FLTDIV 
FPE_FLTOVF 
FPE_FLTUND 
FPE_FLTRES 
FPE_FLTINV 
FPE_FLTSUB 
SEGV_MAPERR 
SEGV_ACCERR 
BUS_ADRALN 
BUS_ADRERR 
BUS_OBJERR 
CLD_EXITED 
CLD_KILLED 
CLD_DUMPED 
CLD_TRAPPED 
CLD_STOPPED 
CLD_CONTINUED 

Definition at line 619 of file gc.c.

◆ anonymous enum

anonymous enum
Enumerator
NUM_GPR_ARG_REGISTERS 
NUM_FPR_ARG_REGISTERS 
LINKAGE_AREA_GPRS 
JSON_object_first_final 
HEAP_PAGE_ALIGN 
HEAP_PAGE_ALIGN_MASK 
REQUIRED_SIZE_BY_MALLOC 
HEAP_PAGE_SIZE 
HEAP_PAGE_OBJ_LIMIT 
HEAP_PAGE_BITMAP_LIMIT 
HEAP_PAGE_BITMAP_SIZE 
HEAP_PAGE_BITMAP_PLANES 
cmp_opt_Fixnum 
cmp_opt_String 
cmp_opt_Float 
cmp_optimizable_count 
utf_prefix_len 
base_dump_size 
TIMER_INTERRUPT_MASK 
PENDING_INTERRUPT_MASK 
POSTPONED_JOB_INTERRUPT_MASK 
TRAP_INTERRUPT_MASK 
constat_init 
constat_esc 
constat_seq 
SIGEV_SIGNAL 
SIGEV_NONE 
SIGEV_THREAD 

Definition at line 834 of file gc.c.

◆ anonymous enum

anonymous enum
Enumerator
ASM_NEEDS_REGISTERS 
JSON_object_error 
gc_stress_no_major 
gc_stress_no_immediate_sweep 
gc_stress_full_mark_after_malloc 
gc_stress_max 
RSTRUCT_EMBED_LEN_MAX 
RSTRUCT_EMBED_LEN_MASK 
RSTRUCT_EMBED_LEN_SHIFT 
RSTRUCT_TRANSIENT_FLAG 
RSTRUCT_ENUM_END 

Definition at line 7122 of file gc.c.

◆ gc_mode

enum gc_mode
Enumerator
gc_mode_none 
gc_mode_marking 
gc_mode_sweeping 

Definition at line 670 of file gc.c.

◆ gc_profile_record_flag

Enumerator
GPR_FLAG_NONE 
GPR_FLAG_MAJOR_BY_NOFREE 
GPR_FLAG_MAJOR_BY_OLDGEN 
GPR_FLAG_MAJOR_BY_SHADY 
GPR_FLAG_MAJOR_BY_FORCE 
GPR_FLAG_MAJOR_BY_OLDMALLOC 
GPR_FLAG_MAJOR_MASK 
GPR_FLAG_NEWOBJ 
GPR_FLAG_MALLOC 
GPR_FLAG_METHOD 
GPR_FLAG_CAPI 
GPR_FLAG_STRESS 
GPR_FLAG_IMMEDIATE_SWEEP 
GPR_FLAG_HAVE_FINALIZE 
GPR_FLAG_IMMEDIATE_MARK 
GPR_FLAG_FULL_MARK 
GPR_DEFAULT_REASON 

Definition at line 491 of file gc.c.

◆ gc_stat_compat_sym

Enumerator
gc_stat_compat_sym_gc_stat_heap_used 
gc_stat_compat_sym_heap_eden_page_length 
gc_stat_compat_sym_heap_tomb_page_length 
gc_stat_compat_sym_heap_increment 
gc_stat_compat_sym_heap_length 
gc_stat_compat_sym_heap_live_slot 
gc_stat_compat_sym_heap_free_slot 
gc_stat_compat_sym_heap_final_slot 
gc_stat_compat_sym_heap_swept_slot 
gc_stat_compat_sym_remembered_shady_object 
gc_stat_compat_sym_remembered_shady_object_limit 
gc_stat_compat_sym_old_object 
gc_stat_compat_sym_old_object_limit 
gc_stat_compat_sym_total_allocated_object 
gc_stat_compat_sym_total_freed_object 
gc_stat_compat_sym_malloc_increase 
gc_stat_compat_sym_malloc_limit 
gc_stat_compat_sym_oldmalloc_increase 
gc_stat_compat_sym_oldmalloc_limit 
gc_stat_compat_sym_last 

Definition at line 8882 of file gc.c.

◆ gc_stat_sym

Enumerator
gc_stat_sym_count 
gc_stat_sym_heap_allocated_pages 
gc_stat_sym_heap_sorted_length 
gc_stat_sym_heap_allocatable_pages 
gc_stat_sym_heap_available_slots 
gc_stat_sym_heap_live_slots 
gc_stat_sym_heap_free_slots 
gc_stat_sym_heap_final_slots 
gc_stat_sym_heap_marked_slots 
gc_stat_sym_heap_eden_pages 
gc_stat_sym_heap_tomb_pages 
gc_stat_sym_total_allocated_pages 
gc_stat_sym_total_freed_pages 
gc_stat_sym_total_allocated_objects 
gc_stat_sym_total_freed_objects 
gc_stat_sym_malloc_increase_bytes 
gc_stat_sym_malloc_increase_bytes_limit 
gc_stat_sym_minor_gc_count 
gc_stat_sym_major_gc_count 
gc_stat_sym_compact_count 
gc_stat_sym_remembered_wb_unprotected_objects 
gc_stat_sym_remembered_wb_unprotected_objects_limit 
gc_stat_sym_old_objects 
gc_stat_sym_old_objects_limit 
gc_stat_sym_oldmalloc_increase_bytes 
gc_stat_sym_oldmalloc_increase_bytes_limit 
gc_stat_sym_last 

Definition at line 8840 of file gc.c.

◆ memop_type

enum memop_type
Enumerator
MEMOP_TYPE_MALLOC 
MEMOP_TYPE_FREE 
MEMOP_TYPE_REALLOC 

Definition at line 9687 of file gc.c.

Function Documentation

◆ ATTRIBUTE_NO_ADDRESS_SAFETY_ANALYSIS()

ATTRIBUTE_NO_ADDRESS_SAFETY_ANALYSIS ( static void   mark_locations_arrayrb_objspace_t *objspace, register const VALUE *x, register long n)

◆ Init_GC()

void Init_GC ( void  )

◆ Init_gc_stress()

void Init_gc_stress ( void  )

Definition at line 2931 of file gc.c.

References rb_objspace.

◆ Init_heap()

void Init_heap ( void  )

◆ NO_SANITIZE() [1/2]

NO_SANITIZE ( "memory"  ,
static inline int   is_pointer_to_heaprb_objspace_t *objspace, void *ptr 
)

◆ NO_SANITIZE() [2/2]

NO_SANITIZE ( "memory"  ,
static void   gc_mark_mayberb_objspace_t *objspace, VALUE ptr 
)

◆ NOINLINE() [1/3]

NOINLINE ( static VALUE   newobj_slowpath_wb_protectedVALUE klass, VALUE flags, VALUE v1, VALUE v2, VALUE v3, rb_objspace_t *objspace)

◆ NOINLINE() [2/3]

NOINLINE ( static void   gc_mark_ptrrb_objspace_t *objspace, VALUE obj)

◆ NOINLINE() [3/3]

NOINLINE ( static void   gc_writebarrier_generationalVALUE a, VALUE b, rb_objspace_t *objspace)

◆ NORETURN()

NORETURN ( static void   negative_size_allocation_errorconst char *)

◆ PRINTF_ARGS() [1/2]

PRINTF_ARGS ( NORETURN(static void gc_raise(VALUE, const char *,...))  ,
,
 
)

◆ PRINTF_ARGS() [2/2]

PRINTF_ARGS ( static void   gc_report_bodyint level, rb_objspace_t *objspace, const char *fmt,...,
,
 
)

◆ PUREFUNC()

PUREFUNC ( static inline int   is_id_valuerb_objspace_t *objspace, VALUE ptr)

◆ rb_aligned_malloc()

void* rb_aligned_malloc ( size_t  alignment,
size_t  size 
)

Definition at line 9630 of file gc.c.

References GC_ASSERT, malloc(), memalign(), NULL, posix_memalign(), and size.

◆ rb_alloc_tmp_buffer_with_count()

void* rb_alloc_tmp_buffer_with_count ( volatile VALUE store,
size_t  size,
size_t  cnt 
)

Definition at line 10247 of file gc.c.

References imemo, and ptr.

Referenced by rb_alloc_tmp_buffer().

◆ rb_copy_wb_protected_attribute()

void rb_copy_wb_protected_attribute ( VALUE  dest,
VALUE  obj 
)

Definition at line 6941 of file gc.c.

References rb_objspace.

◆ rb_data_object_wrap()

VALUE rb_data_object_wrap ( VALUE  klass,
void datap,
RUBY_DATA_FUNC  dmark,
RUBY_DATA_FUNC  dfree 
)

Definition at line 2378 of file gc.c.

References Check_Type, klass, and T_CLASS.

Referenced by RUBY_ALIAS_FUNCTION().

◆ rb_data_typed_object_wrap()

VALUE rb_data_typed_object_wrap ( VALUE  klass,
void datap,
const rb_data_type_t type 
)

Definition at line 2399 of file gc.c.

References Check_Type, klass, and T_CLASS.

Referenced by __attribute__(), and RUBY_ALIAS_FUNCTION().

◆ rb_define_finalizer()

VALUE rb_define_finalizer ( VALUE  obj,
VALUE  block 
)

Definition at line 3289 of file gc.c.

◆ rb_during_gc()

int rb_during_gc ( void  )

Definition at line 8690 of file gc.c.

References during_gc, and rb_objspace.

Referenced by rb_ec_stack_overflow().

◆ rb_ec_stack_check()

MJIT_FUNC_EXPORTED int rb_ec_stack_check ( rb_execution_context_t ec)

Definition at line 4668 of file gc.c.

◆ rb_free_const_table()

void rb_free_const_table ( struct rb_id_table tbl)

Definition at line 2493 of file gc.c.

References rb_id_table_foreach_values().

◆ rb_gc()

void rb_gc ( void  )

Definition at line 8682 of file gc.c.

References GPR_DEFAULT_REASON, and rb_objspace.

Referenced by rb_fdopen(), rb_gc_for_fd(), rb_gc_start(), and rb_reg_region_copy().

◆ rb_gc_adjust_memory_usage()

void rb_gc_adjust_memory_usage ( ssize_t  diff)

Definition at line 10320 of file gc.c.

◆ rb_gc_copy_finalizer()

void rb_gc_copy_finalizer ( VALUE  dest,
VALUE  obj 
)

Definition at line 3297 of file gc.c.

References finalizer_table, FL_FINALIZE, FL_SET, FL_TEST, obj, rb_objspace, st_insert(), and st_lookup().

◆ rb_gc_count()

size_t rb_gc_count ( void  )

Definition at line 8714 of file gc.c.

References rb_objspace::count, and rb_objspace::profile.

◆ rb_gc_disable()

VALUE rb_gc_disable ( void  )

Definition at line 9249 of file gc.c.

References rb_objspace, and rb_objspace_gc_disable().

◆ rb_gc_disable_no_rest()

VALUE rb_gc_disable_no_rest ( void  )

Definition at line 9234 of file gc.c.

References rb_objspace.

◆ rb_gc_enable()

VALUE rb_gc_enable ( void  )

Definition at line 9212 of file gc.c.

References rb_objspace, and rb_objspace_gc_enable().

◆ rb_gc_force_recycle()

void rb_gc_force_recycle ( VALUE  obj)

Definition at line 7014 of file gc.c.

References rb_objspace.

Referenced by rb_parser_free(), and rb_str_tmp_frozen_release().

◆ rb_gc_guarded_ptr_val()

volatile VALUE* rb_gc_guarded_ptr_val ( volatile VALUE ptr,
VALUE  val 
)

Definition at line 250 of file gc.c.

References ptr, and rb_gc_guarded_val.

◆ rb_gc_latest_gc_info()

VALUE rb_gc_latest_gc_info ( VALUE  key)

Definition at line 8819 of file gc.c.

References rb_objspace.

◆ rb_gc_location()

VALUE rb_gc_location ( VALUE  value)

Definition at line 8114 of file gc.c.

References SPECIAL_CONST_P.

Referenced by rb_execution_context_update(), rb_fiber_update_self(), and rb_iseq_update_references().

◆ rb_gc_mark()

void rb_gc_mark ( VALUE  ptr)

◆ rb_gc_mark_locations()

void rb_gc_mark_locations ( const VALUE start,
const VALUE end 
)

Definition at line 4702 of file gc.c.

◆ rb_gc_mark_machine_stack()

void rb_gc_mark_machine_stack ( const rb_execution_context_t ec)

Definition at line 4984 of file gc.c.

References GET_STACK_BOUNDS, and rb_objspace.

◆ rb_gc_mark_maybe()

void rb_gc_mark_maybe ( VALUE  obj)

Definition at line 5047 of file gc.c.

Referenced by rb_gvar_val_marker(), and rb_gvar_var_marker().

◆ rb_gc_mark_movable()

void rb_gc_mark_movable ( VALUE  ptr)

Definition at line 5209 of file gc.c.

Referenced by rb_fiber_mark_self().

◆ rb_gc_mark_values()

void rb_gc_mark_values ( long  n,
const VALUE values 
)

Definition at line 4718 of file gc.c.

References i, n, and rb_objspace.

Referenced by rb_vm_mark().

◆ rb_gc_mark_vm_stack_values()

void rb_gc_mark_vm_stack_values ( long  n,
const VALUE values 
)

Definition at line 4742 of file gc.c.

References rb_objspace.

Referenced by rb_execution_context_mark().

◆ rb_gc_start()

VALUE rb_gc_start ( void  )

Definition at line 8675 of file gc.c.

References Qnil, and rb_gc().

◆ rb_gc_stat()

size_t rb_gc_stat ( VALUE  key)

Definition at line 9177 of file gc.c.

References key, and SYMBOL_P.

◆ rb_gc_unprotect_logging()

void rb_gc_unprotect_logging ( void objptr,
const char filename,
int  line 
)

Definition at line 6912 of file gc.c.

References obj.

◆ rb_gc_update_tbl_refs()

void rb_gc_update_tbl_refs ( st_table ptr)

Definition at line 7986 of file gc.c.

References rb_objspace.

Referenced by rb_vm_update_references().

◆ rb_gc_verify_internal_consistency()

void rb_gc_verify_internal_consistency ( void  )

Definition at line 6205 of file gc.c.

◆ rb_gc_writebarrier_remember()

MJIT_FUNC_EXPORTED void rb_gc_writebarrier_remember ( VALUE  obj)

Definition at line 6878 of file gc.c.

References gc_report, and rb_objspace.

◆ rb_gcdebug_print_obj_condition()

void rb_gcdebug_print_obj_condition ( VALUE  obj)

◆ rb_imemo_new()

VALUE rb_imemo_new ( enum imemo_type  type,
VALUE  v1,
VALUE  v2,
VALUE  v3,
VALUE  v0 
)

Definition at line 2308 of file gc.c.

References FL_USHIFT, RVALUE::flags, and T_IMEMO.

◆ rb_imemo_tmpbuf_parser_heap()

rb_imemo_tmpbuf_t* rb_imemo_tmpbuf_parser_heap ( void buf,
rb_imemo_tmpbuf_t old_heap,
size_t  cnt 
)

Definition at line 2328 of file gc.c.

◆ rb_iseq_free()

void rb_iseq_free ( const rb_iseq_t iseq)

◆ rb_iseq_mark()

void rb_iseq_mark ( const rb_iseq_t iseq)

◆ rb_iseq_memsize()

size_t rb_iseq_memsize ( const rb_iseq_t iseq)

◆ rb_iseq_update_references()

void rb_iseq_update_references ( rb_iseq_t iseq)

◆ rb_malloc_info_show_results()

void rb_malloc_info_show_results ( void  )

Definition at line 9999 of file gc.c.

Referenced by ruby_default_signal().

◆ rb_mark_hash()

void rb_mark_hash ( st_table tbl)

Definition at line 4865 of file gc.c.

◆ rb_mark_set()

void rb_mark_set ( st_table tbl)

Definition at line 4801 of file gc.c.

Referenced by rb_iseq_build_from_ary().

◆ rb_mark_tbl()

void rb_mark_tbl ( st_table tbl)

Definition at line 5008 of file gc.c.

Referenced by rb_vm_mark().

◆ rb_mark_tbl_no_pin()

void rb_mark_tbl_no_pin ( st_table tbl)

Definition at line 5014 of file gc.c.

◆ rb_memerror()

void rb_memerror ( void  )

Definition at line 9598 of file gc.c.

References GET_EC, and rb_objspace_of.

◆ rb_memory_id()

VALUE rb_memory_id ( VALUE  obj)

Definition at line 3740 of file gc.c.

◆ rb_method_type_name()

const char* rb_method_type_name ( rb_method_type_t  type)

◆ rb_newobj()

VALUE rb_newobj ( void  )

Definition at line 2290 of file gc.c.

◆ rb_newobj_of()

VALUE rb_newobj_of ( VALUE  klass,
VALUE  flags 
)

Definition at line 2296 of file gc.c.

◆ rb_obj_gc_flags()

size_t rb_obj_gc_flags ( VALUE  obj,
ID flags,
size_t  max 
)

Definition at line 6979 of file gc.c.

◆ rb_obj_id()

VALUE rb_obj_id ( VALUE  obj)

Definition at line 3773 of file gc.c.

◆ rb_obj_info()

MJIT_FUNC_EXPORTED const char* rb_obj_info ( VALUE  obj)

Definition at line 11683 of file gc.c.

◆ rb_obj_info_dump()

void rb_obj_info_dump ( VALUE  obj)

Definition at line 11689 of file gc.c.

References fprintf(), obj, rb_raw_obj_info(), and stderr.

◆ rb_obj_info_dump_loc()

void rb_obj_info_dump_loc ( VALUE  obj,
const char file,
int  line,
const char func 
)

Definition at line 11696 of file gc.c.

References fprintf(), obj, rb_raw_obj_info(), and stderr.

◆ rb_obj_memsize_of()

size_t rb_obj_memsize_of ( VALUE  obj)

Definition at line 3937 of file gc.c.

◆ rb_obj_rgengc_promoted_p()

VALUE rb_obj_rgengc_promoted_p ( VALUE  obj)

Definition at line 6973 of file gc.c.

References obj, OBJ_PROMOTED, Qfalse, and Qtrue.

◆ rb_obj_rgengc_writebarrier_protected_p()

VALUE rb_obj_rgengc_writebarrier_protected_p ( VALUE  obj)

Definition at line 6963 of file gc.c.

◆ rb_objspace_alloc()

rb_objspace_t* rb_objspace_alloc ( void  )

Definition at line 1587 of file gc.c.

◆ rb_objspace_call_finalizer()

void rb_objspace_call_finalizer ( rb_objspace_t objspace)

Definition at line 3443 of file gc.c.

References i.

◆ rb_objspace_data_type_memsize()

size_t rb_objspace_data_type_memsize ( VALUE  obj)

Definition at line 2419 of file gc.c.

References obj, ptr, RTYPEDDATA_DATA, RTYPEDDATA_P, and RTYPEDDATA_TYPE.

◆ rb_objspace_data_type_name()

const char* rb_objspace_data_type_name ( VALUE  obj)

Definition at line 2432 of file gc.c.

References obj, RTYPEDDATA_P, and RTYPEDDATA_TYPE.

◆ rb_objspace_each_objects()

void rb_objspace_each_objects ( each_obj_callback callback,
void data 
)

Definition at line 3027 of file gc.c.

Referenced by rb_iseq_remove_coverage_all(), and rb_iseq_trace_set_all().

◆ rb_objspace_each_objects_without_setup()

void rb_objspace_each_objects_without_setup ( each_obj_callback callback,
void data 
)

Definition at line 3050 of file gc.c.

◆ rb_objspace_free()

void rb_objspace_free ( rb_objspace_t objspace)

◆ rb_objspace_garbage_object_p()

int rb_objspace_garbage_object_p ( VALUE  obj)

Definition at line 3607 of file gc.c.

References rb_objspace.

◆ rb_objspace_gc_disable()

VALUE rb_objspace_gc_disable ( rb_objspace_t objspace)

Definition at line 9256 of file gc.c.

Referenced by rb_gc_disable().

◆ rb_objspace_gc_enable()

VALUE rb_objspace_gc_enable ( rb_objspace_t objspace)

Definition at line 9219 of file gc.c.

References dont_gc, FALSE, old, Qfalse, and Qtrue.

Referenced by Init_vm_objects(), and rb_gc_enable().

◆ rb_objspace_internal_object_p()

int rb_objspace_internal_object_p ( VALUE  obj)

Definition at line 3097 of file gc.c.

◆ rb_objspace_markable_object_p()

int rb_objspace_markable_object_p ( VALUE  obj)

Definition at line 3600 of file gc.c.

References rb_objspace.

◆ rb_objspace_marked_object_p()

int rb_objspace_marked_object_p ( VALUE  obj)

Definition at line 5225 of file gc.c.

◆ rb_objspace_reachable_objects_from()

void rb_objspace_reachable_objects_from ( VALUE  obj,
void(func)(VALUE, void *)  ,
void data 
)

Definition at line 9468 of file gc.c.

References rb_objspace.

◆ rb_objspace_reachable_objects_from_root()

void rb_objspace_reachable_objects_from_root ( void(func)(const char *category, VALUE, void *)  ,
void passing_data 
)

Definition at line 9496 of file gc.c.

References rb_objspace.

◆ rb_objspace_set_event_hook()

void rb_objspace_set_event_hook ( const rb_event_flag_t  event)

◆ rb_raw_obj_info()

const char* rb_raw_obj_info ( char buff,
const int  buff_size,
VALUE  obj 
)

Definition at line 11447 of file gc.c.

References APPENDF, BUFF_ARGS, obj, and SPECIAL_CONST_P.

Referenced by rb_obj_info_dump(), rb_obj_info_dump_loc(), and ruby_debug_print_value().

◆ rb_size_mul_add_or_raise()

size_t rb_size_mul_add_or_raise ( size_t  x,
size_t  y,
size_t  z,
VALUE  exc 
)

Definition at line 219 of file gc.c.

◆ rb_size_mul_or_raise()

size_t rb_size_mul_or_raise ( size_t  x,
size_t  y,
VALUE  exc 
)

Definition at line 192 of file gc.c.

◆ rb_undefine_finalizer()

VALUE rb_undefine_finalizer ( VALUE  obj)

Definition at line 3193 of file gc.c.

References finalizer_table, FL_FINALIZE, FL_UNSET, obj, rb_check_frozen, rb_objspace, and st_delete().

◆ rb_vm_update_references()

void rb_vm_update_references ( void ptr)

Definition at line 2234 of file vm.c.

References rb_vm_struct::frozen_strings, ptr, and rb_gc_update_tbl_refs().

◆ rb_wb_protected_newobj_of()

VALUE rb_wb_protected_newobj_of ( VALUE  klass,
VALUE  flags 
)

Definition at line 2281 of file gc.c.

References FL_WB_PROTECTED, RVALUE::flags, and GC_ASSERT.

◆ rb_wb_unprotected_newobj_of()

VALUE rb_wb_unprotected_newobj_of ( VALUE  klass,
VALUE  flags 
)

Definition at line 2274 of file gc.c.

References FL_WB_PROTECTED, RVALUE::flags, and GC_ASSERT.

◆ rb_xcalloc_mul_add_mul()

void* rb_xcalloc_mul_add_mul ( size_t  x,
size_t  y,
size_t  z,
size_t  w 
)

Definition at line 10197 of file gc.c.

◆ rb_xmalloc_mul_add()

void* rb_xmalloc_mul_add ( size_t  x,
size_t  y,
size_t  z 
)

Definition at line 10176 of file gc.c.

◆ rb_xmalloc_mul_add_mul()

void* rb_xmalloc_mul_add_mul ( size_t  x,
size_t  y,
size_t  z,
size_t  w 
)

Definition at line 10190 of file gc.c.

◆ rb_xrealloc_mul_add()

void* rb_xrealloc_mul_add ( const void p,
size_t  x,
size_t  y,
size_t  z 
)

Definition at line 10183 of file gc.c.

◆ RUBY_ALIAS_FUNCTION() [1/2]

RUBY_ALIAS_FUNCTION ( rb_data_object_alloc(VALUE klass, void *datap, RUBY_DATA_FUNC dmark, RUBY_DATA_FUNC dfree)  ,
rb_data_object_wrap  ,
(klass, datap, dmark, dfree)   
)

Definition at line 2385 of file gc.c.

References DATA_PTR, klass, obj, rb_data_object_wrap(), size, and xcalloc.

◆ RUBY_ALIAS_FUNCTION() [2/2]

RUBY_ALIAS_FUNCTION ( rb_data_typed_object_alloc(VALUE klass, void *datap, const rb_data_type_t *type)  ,
rb_data_typed_object_wrap  ,
(klass, datap, type)   
)

Definition at line 2406 of file gc.c.

References DATA_PTR, klass, obj, rb_data_typed_object_wrap(), size, and xcalloc.

◆ ruby_gc_set_params()

void ruby_gc_set_params ( void  )

Definition at line 9421 of file gc.c.

◆ ruby_get_stack_grow_direction()

int ruby_get_stack_grow_direction ( volatile VALUE addr)

Definition at line 4623 of file gc.c.

References ruby_stack_grow_direction, and SET_MACHINE_STACK_END.

◆ ruby_malloc_size_overflow()

void ruby_malloc_size_overflow ( size_t  count,
size_t  elsize 
)

Definition at line 10094 of file gc.c.

References count, PRIuSIZE, rb_eArgError, and rb_raise().

◆ ruby_mimfree()

void ruby_mimfree ( void ptr)

Definition at line 10237 of file gc.c.

References free, and ptr.

◆ ruby_mimmalloc()

void* ruby_mimmalloc ( size_t  size)

Definition at line 10207 of file gc.c.

References malloc(), NULL, size, and malloc_obj_info::size.

Referenced by Init_BareVM(), and rb_threadptr_root_fiber_setup().

◆ ruby_sized_xfree()

void ruby_sized_xfree ( void x,
size_t  size 
)

Definition at line 10162 of file gc.c.

Referenced by ruby_xfree().

◆ ruby_sized_xrealloc()

void* ruby_sized_xrealloc ( void ptr,
size_t  new_size,
size_t  old_size 
)

Definition at line 10127 of file gc.c.

Referenced by ruby_xrealloc_body().

◆ ruby_sized_xrealloc2()

void* ruby_sized_xrealloc2 ( void ptr,
size_t  n,
size_t  size,
size_t  old_n 
)

Definition at line 10146 of file gc.c.

References len.

Referenced by ruby_xrealloc2_body().

◆ ruby_xcalloc()

void* ruby_xcalloc ( size_t  n,
size_t  size 
)

Definition at line 11998 of file gc.c.

References n, ruby_xcalloc_body(), and size.

Referenced by rb_iseq_defined_string().

◆ ruby_xcalloc_body()

void* ruby_xcalloc_body ( size_t  n,
size_t  size 
)

Definition at line 10118 of file gc.c.

Referenced by ruby_xcalloc().

◆ ruby_xfree()

void ruby_xfree ( void x)

◆ ruby_xmalloc()

void* ruby_xmalloc ( size_t  size)

Definition at line 11978 of file gc.c.

References ruby_xmalloc_body(), and size.

◆ ruby_xmalloc2()

void* ruby_xmalloc2 ( size_t  n,
size_t  size 
)

Definition at line 11988 of file gc.c.

References n, ruby_xmalloc2_body(), and size.

◆ ruby_xmalloc2_body()

void* ruby_xmalloc2_body ( size_t  n,
size_t  size 
)

Definition at line 10102 of file gc.c.

Referenced by ruby_xmalloc2().

◆ ruby_xmalloc_body()

void* ruby_xmalloc_body ( size_t  size)

Definition at line 10085 of file gc.c.

References size.

Referenced by ruby_xmalloc().

◆ ruby_xrealloc()

void* ruby_xrealloc ( void ptr,
size_t  new_size 
)

Definition at line 12008 of file gc.c.

References ptr, and ruby_xrealloc_body().

◆ ruby_xrealloc2()

void* ruby_xrealloc2 ( void ptr,
size_t  n,
size_t  new_size 
)

Definition at line 12018 of file gc.c.

References n, ptr, and ruby_xrealloc2_body().

◆ ruby_xrealloc2_body()

void* ruby_xrealloc2_body ( void ptr,
size_t  n,
size_t  size 
)

Definition at line 10153 of file gc.c.

References n, ptr, ruby_sized_xrealloc2(), and size.

Referenced by ruby_xrealloc2().

◆ ruby_xrealloc_body()

void* ruby_xrealloc_body ( void ptr,
size_t  new_size 
)

Definition at line 10137 of file gc.c.

References ptr, and ruby_sized_xrealloc().

Referenced by ruby_xrealloc().

Variable Documentation

◆ rb_gc_guarded_val

volatile VALUE rb_gc_guarded_val

Definition at line 248 of file gc.c.

Referenced by rb_gc_guarded_ptr_val().

◆ rb_hashtype_ident

const struct st_hash_type rb_hashtype_ident
extern

Definition at line 305 of file hash.c.

◆ rb_mGC

VALUE rb_mGC

Definition at line 1000 of file gc.c.

Referenced by Init_GC().

◆ ruby_disable_gc

int ruby_disable_gc = 0

Definition at line 1001 of file gc.c.

◆ ruby_global_symbols

rb_symbols_t ruby_global_symbols
extern

Definition at line 66 of file symbol.c.

◆ ruby_initial_gc_stress_ptr

VALUE* ruby_initial_gc_stress_ptr = &ruby_initial_gc_stress

Definition at line 905 of file gc.c.

Referenced by ruby_env_debug_option().

◆ ruby_rgengc_debug

int ruby_rgengc_debug

Definition at line 388 of file gc.c.

Referenced by ruby_env_debug_option().

◆ ruby_stack_grow_direction

int ruby_stack_grow_direction

Definition at line 4621 of file gc.c.

Referenced by ruby_get_stack_grow_direction().

UNLIKELY
#define UNLIKELY(x)
Definition: ffi_common.h:126
STACK_END
#define STACK_END
Definition: gc.c:4604
GPR_FLAG_IMMEDIATE_MARK
@ GPR_FLAG_IMMEDIATE_MARK
Definition: gc.c:513
PRIxVALUE
#define PRIxVALUE
Definition: ruby.h:164
VALUE
unsigned long VALUE
Definition: ruby.h:102
GET_EC
#define GET_EC()
Definition: vm_core.h:1766
STACK_START
#define STACK_START
Definition: gc.c:4603
SPECIAL_CONST_P
#define SPECIAL_CONST_P(x)
Definition: ruby.h:1313
FL_TEST
#define FL_TEST(x, f)
Definition: ruby.h:1353
ELTS_SHARED
#define ELTS_SHARED
Definition: ruby.h:970
GPR_FLAG_IMMEDIATE_SWEEP
@ GPR_FLAG_IMMEDIATE_SWEEP
Definition: gc.c:511
GPR_FLAG_FULL_MARK
@ GPR_FLAG_FULL_MARK
Definition: gc.c:514
GPR_FLAG_MALLOC
@ GPR_FLAG_MALLOC
Definition: gc.c:505
RARRAY_EMBED_FLAG
@ RARRAY_EMBED_FLAG
Definition: ruby.h:1029
key
key
Definition: openssl_missing.h:181
obj
const VALUE VALUE obj
Definition: rb_mjit_min_header-2.7.2.h:5738
rb_bug
void rb_bug(const char *fmt,...)
Definition: error.c:636
GC_ASSERT
#define GC_ASSERT(expr)
Definition: gc.c:403
RGENGC_CHECK_MODE
#define RGENGC_CHECK_MODE
Definition: gc.c:399
BUILTIN_TYPE
#define BUILTIN_TYPE(x)
Definition: ruby.h:551
RMOVED
#define RMOVED(obj)
Definition: ruby.h:1266
RBASIC
#define RBASIC(obj)
Definition: ruby.h:1267
v
int VALUE v
Definition: rb_mjit_min_header-2.7.2.h:12300
gc_event_hook_needed_p
#define gc_event_hook_needed_p(objspace, event)
Definition: gc.c:2102
SIZET2NUM
#define SIZET2NUM(v)
Definition: ruby.h:295
Qnil
#define Qnil
Definition: ruby.h:469
name
const char * name
Definition: nkf.c:208