diff options
author | Ivan Maidanski <ivmai@mail.ru> | 2023-03-24 08:35:46 +0300 |
---|---|---|
committer | Ivan Maidanski <ivmai@mail.ru> | 2023-03-24 12:53:15 +0300 |
commit | 1d8ed2c5bb50d20c8903bb96f017b43a62b32ef2 (patch) | |
tree | 88c9cab5eaa62d7572de72f2673a48b0e0725ad8 /include | |
parent | d21d456b3abecb61ec8e5dfc6f06f48ba1eb4cc5 (diff) | |
download | bdwgc-1d8ed2c5bb50d20c8903bb96f017b43a62b32ef2.tar.gz |
Avoid code duplication in IGNORE_OFF_PAGE-specific malloc functions
(refactoring)
* alloc.c: Update comment regarding GC_generic_malloc_inner usage.
* alloc.c (GC_collect_or_expand): Replace ignore_off_page argument to
flags (check IGNORE_OFF_PAGE bit only in it); update comment.
* alloc.c (GC_allocobj): Pass 0 as flags to GC_collect_or_expand.
* dbg_mlc.c (GC_debug_generic_malloc,
GC_debug_generic_or_special_malloc): Rename knd argument to k.
* mallocx.c (GC_generic_or_special_malloc): Likewise.
* dbg_mlc.c (GC_debug_generic_malloc): Use GC_generic_malloc_aligned()
instead of GC_generic_malloc().
* dbg_mlc.c (GC_debug_generic_malloc_inner): Add flags argument.
* gcj_mlc.c [GC_GCJ_SUPPORT] (GC_core_gcj_malloc): Likewise.
* include/private/gc_priv.h (C_generic_malloc_aligned,
GC_generic_malloc_inner): Likewise.
* include/private/gc_priv.h [THREAD_LOCAL_ALLOC && GC_GCJ_SUPPORT]
(GC_core_gcj_malloc): Likewise.
* include/private/gc_priv.h [DBG_HDRS_ALL]
(GC_debug_generic_malloc_inner): Likewise.
* malloc.c (GC_generic_malloc_inner, GC_generic_malloc_aligned):
Likewise.
* dbg_mlc.c (GC_debug_generic_malloc_inner): Use
GC_generic_malloc_inner() instead of
GC_generic_malloc_inner_ignore_off_page().
* dbg_mlc.c [DBG_HDRS_ALL]
(GC_debug_generic_malloc_inner_ignore_off_page): Remove GC_INNER
function.
* include/private/gc_priv.h [DBG_HDRS_ALL || GC_GCJ_SUPPORT
|| !GC_NO_FINALIZATION] (GC_generic_malloc_inner_ignore_off_page):
Likewise.
* include/private/gc_priv.h [DBG_HDRS_ALL]
(GC_debug_generic_malloc_inner_ignore_off_page): Likewise.
* malloc.c [DBG_HDRS_ALL || GC_GCJ_SUPPORT
|| !GC_NO_FINALIZATION] (GC_generic_malloc_inner_ignore_off_page):
Likewise.
* gcj_mlc.c [GC_GCJ_SUPPORT && !THREAD_LOCAL_ALLOC]
(GC_gcj_malloc): Define as STATIC GC_core_gcj_malloc.
* gcj_mlc.c [GC_GCJ_SUPPORT] (GC_core_gcj_malloc): Reformat comment;
pass flags to GC_generic_malloc_inner().
* gcj_mlc.c [GC_GCJ_SUPPORT && !THREAD_LOCAL_ALLOC]
(GC_gcj_malloc): Redirect to GC_core_gcj_malloc() passing 0 to flags
argument.
* thread_local_alloc.c [THREAD_LOCAL_ALLOC && GC_GCJ_SUPPORT]
(GC_gcj_malloc): Likewise.
* gcj_mlc.c [GC_GCJ_SUPPORT] (GC_gcj_malloc_ignore_off_page): Redirect
to GC_core_gcj_malloc() passing IGNORE_OFF_PAGE.
* gcj_mlc.c [GC_GCJ_SUPPORT] (GC_debug_gcj_malloc): Pass 0 as flags to
GC_generic_malloc_inner().
* include/private/gc_priv.h (GC_generic_malloc_inner): Update comment.
* mallocx.c (GC_generic_malloc_many): Likewise.
* include/private/gc_priv.h (GC_collect_or_expand): Replace
GC_bool ignore_off_page argument to unsigned flags.
* include/private/gc_priv.h (GC_INTERNAL_MALLOC,
GC_INTERNAL_MALLOC_IGNORE_OFF_PAGE): Specify macro arguments.
* include/private/gc_priv.h (GC_INTERNAL_MALLOC): Pass 0 as flags
argument to GC_[debug_]generic_malloc_inner().
* include/private/gc_priv.h (GC_INTERNAL_MALLOC_IGNORE_OFF_PAGE): Pass
IGNORE_OFF_PAGE to GC_[debug_]generic_malloc_inner().
* malloc.c (GC_alloc_large): Pass flags (instead of flags!=0) to
GC_collect_or_expand().
* malloc.c (GC_generic_malloc_inner_small): New STATIC function (move
most of code from GC_generic_malloc_inner).
* malloc.c (GC_generic_malloc_inner): Move comment to gc_priv.h; call
GC_generic_malloc_inner_small().
* malloc.c (GC_generic_malloc_aligned): Call
GC_generic_malloc_inner_small() instead of GC_generic_malloc_inner();
pass flags (instead of 0) to GC_alloc_large(); do not cast result of
GC_alloc_large() to ptr_t.
* malloc.c (GC_generic_malloc): Pass 0 as flags to
GC_generic_malloc_aligned().
* malloc.c (GC_memalign): Likewise.
* malloc.c (GC_malloc_kind_global, GC_generic_malloc_uncollectable):
Call GC_generic_malloc_aligned() instead of GC_generic_malloc().
* mallocx.c (GC_generic_malloc_many): Likewise.
* malloc.c (free_internal): Rename knd local variable to k.
* mallocx.c (GC_generic_malloc_ignore_off_page,
GC_malloc_ignore_off_page, GC_malloc_atomic_ignore_off_page): Redirect
to GC_generic_malloc_aligned() passing IGNORE_OFF_PAGE.
* typd_mlc.c (GC_generic_malloc_ignore_off_page): Likewise.
* tests/gctest.c (run_one_test): Call
GC_generic_malloc_ignore_off_page() (with size larger than HBLKSIZE);
increment collectable_count.
Diffstat (limited to 'include')
-rw-r--r-- | include/private/gc_priv.h | 39 |
1 files changed, 20 insertions, 19 deletions
diff --git a/include/private/gc_priv.h b/include/private/gc_priv.h index de1af1e9..9c7855ce 100644 --- a/include/private/gc_priv.h +++ b/include/private/gc_priv.h @@ -2286,6 +2286,7 @@ GC_INNER void GC_freehblk(struct hblk * p); /* as invalid. */ /* Miscellaneous GC routines. */ + GC_INNER GC_bool GC_expand_hp_inner(word n); GC_INNER void GC_start_reclaim(GC_bool abort_if_found); /* Restore unmarked objects to free */ @@ -2338,23 +2339,24 @@ GC_INNER void GC_collect_a_little_inner(int n); /* A unit is an amount appropriate for */ /* HBLKSIZE bytes of allocation. */ -GC_INNER void * GC_generic_malloc_aligned(size_t lb, int k, size_t align_m1); +GC_INNER void * GC_generic_malloc_aligned(size_t lb, int k, unsigned flags, + size_t align_m1); -GC_INNER void * GC_generic_malloc_inner(size_t lb, int k); +GC_INNER void * GC_generic_malloc_inner(size_t lb, int k, unsigned flags); /* Allocate an object of the given */ /* kind but assuming lock already held. */ -#if defined(DBG_HDRS_ALL) || defined(GC_GCJ_SUPPORT) \ - || !defined(GC_NO_FINALIZATION) - GC_INNER void * GC_generic_malloc_inner_ignore_off_page(size_t lb, int k); - /* Allocate an object, where the client */ + /* Should not be used to directly */ + /* allocate objects requiring special */ + /* handling on allocation. The flags */ + /* argument should be IGNORE_OFF_PAGE */ + /* or 0. In the first case the client */ /* guarantees that there will always be */ /* a pointer to the beginning (i.e. */ /* within the first hblk) of the object */ /* while it is live. */ -#endif -GC_INNER GC_bool GC_collect_or_expand(word needed_blocks, - GC_bool ignore_off_page, GC_bool retry); +GC_INNER GC_bool GC_collect_or_expand(word needed_blocks, unsigned flags, + GC_bool retry); GC_INNER ptr_t GC_allocobj(size_t gran, int kind); /* Make the indicated free list */ @@ -2386,7 +2388,7 @@ GC_INNER ptr_t GC_allocobj(size_t gran, int kind); /* Allocation routines that bypass the thread local cache. */ #if defined(THREAD_LOCAL_ALLOC) && defined(GC_GCJ_SUPPORT) - GC_INNER void * GC_core_gcj_malloc(size_t, void *); + GC_INNER void *GC_core_gcj_malloc(size_t lb, void *, unsigned flags); #endif GC_INNER void GC_init_headers(void); @@ -2508,12 +2510,11 @@ GC_EXTERN GC_bool GC_print_back_height; /* Macros used for collector internal allocation. */ /* These assume the collector lock is held. */ #ifdef DBG_HDRS_ALL - GC_INNER void * GC_debug_generic_malloc_inner(size_t lb, int k); - GC_INNER void * GC_debug_generic_malloc_inner_ignore_off_page(size_t lb, - int k); -# define GC_INTERNAL_MALLOC GC_debug_generic_malloc_inner -# define GC_INTERNAL_MALLOC_IGNORE_OFF_PAGE \ - GC_debug_generic_malloc_inner_ignore_off_page + GC_INNER void * GC_debug_generic_malloc_inner(size_t lb, int k, + unsigned flags); +# define GC_INTERNAL_MALLOC(lb, k) GC_debug_generic_malloc_inner(lb, k, 0) +# define GC_INTERNAL_MALLOC_IGNORE_OFF_PAGE(lb, k) \ + GC_debug_generic_malloc_inner(lb, k, IGNORE_OFF_PAGE) # ifdef THREADS GC_INNER void GC_debug_free_inner(void * p); # define GC_INTERNAL_FREE GC_debug_free_inner @@ -2521,9 +2522,9 @@ GC_EXTERN GC_bool GC_print_back_height; # define GC_INTERNAL_FREE GC_debug_free # endif #else -# define GC_INTERNAL_MALLOC GC_generic_malloc_inner -# define GC_INTERNAL_MALLOC_IGNORE_OFF_PAGE \ - GC_generic_malloc_inner_ignore_off_page +# define GC_INTERNAL_MALLOC(lb, k) GC_generic_malloc_inner(lb, k, 0) +# define GC_INTERNAL_MALLOC_IGNORE_OFF_PAGE(lb, k) \ + GC_generic_malloc_inner(lb, k, IGNORE_OFF_PAGE) # ifdef THREADS # define GC_INTERNAL_FREE GC_free_inner # else |