> On Sun, Jan 11, 2026, at 4:05 PM, Jose E. Marchesi wrote: >> Hello Pietro. >> Thanks for the patch. >> >>> If GC_DEBUG is defined then all-upper-case macros will expand to calls >>> to the debug variant of collector functions. >>> >>> So add the configury bit to GC_DEBUG if the user wants and swtich all >>> `GC_` calls to the corresponding macros. >>> >>> * configure: Regenerate. >>> * configure.ac: Add --enable-algol68-gc-debug option and >>> define LIBGA68_DEBUG_GC accordingly. >>> * ga68-alloc.c (GC_DEBUG): Define macro if LIBGA68_DEBUG_GC is >>> true. >> >> >> Why not defining GC_DEBUG directly instead of going through >> LIBGA_DEBUG_GC? > > I thought that would be nice to have more flexibility in case we want > to do other things when debugging allocation functions.
Even if we switch from Boehm to an ad-hoc implementation, something that hopefully will happen sooner than later, we can still use the same cpp macro name.. > pietro > >>> (_libga68_realloc): Use the C macro version of the GC function. >>> (_libga68_realloc_unchecked): Likewise. >>> (_libga68_malloc): Likewise. >>> >>> Signed-off-by: Pietro Monteiro <[email protected]> >>> --- >>> libga68/configure | 31 +++++++++++++++++++++++++++++-- >>> libga68/configure.ac | 20 ++++++++++++++++++++ >>> libga68/ga68-alloc.c | 11 ++++++++--- >>> 3 files changed, 57 insertions(+), 5 deletions(-) >>> >>> diff --git a/libga68/configure b/libga68/configure >>> index 63c27939e14..2ecee900035 100755 >>> --- a/libga68/configure >>> +++ b/libga68/configure >>> @@ -811,6 +811,7 @@ enable_algol68_gc >>> with_target_bdw_gc >>> with_target_bdw_gc_include >>> with_target_bdw_gc_lib >>> +enable_algol68_gc_debug >>> ' >>> ac_precious_vars='build_alias >>> host_alias >>> @@ -1463,6 +1464,9 @@ Optional Features: >>> --disable-symvers disable symbol versioning for libga68 >>> --enable-algol68-gc enable use of Boehm's garbage collector with the >>> GNU >>> Algol runtime >>> + --enable-algol68-gc-debug >>> + enable use of Boehm's garbage collector debug >>> + functions with the GNU Algol runtime >>> >>> Optional Packages: >>> --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] >>> @@ -12829,7 +12833,7 @@ else >>> lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 >>> lt_status=$lt_dlunknown >>> cat > conftest.$ac_ext <<_LT_EOF >>> -#line 12832 "configure" >>> +#line 12836 "configure" >>> #include "confdefs.h" >>> >>> #if HAVE_DLFCN_H >>> @@ -12935,7 +12939,7 @@ else >>> lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 >>> lt_status=$lt_dlunknown >>> cat > conftest.$ac_ext <<_LT_EOF >>> -#line 12938 "configure" >>> +#line 12942 "configure" >>> #include "confdefs.h" >>> >>> #if HAVE_DLFCN_H >>> @@ -13532,6 +13536,14 @@ if test "${with_target_bdw_gc_lib+set}" = set; >>> then : >>> fi >>> >>> >>> +# Check whether --enable-algol68-gc-debug was given. >>> +if test "${enable_algol68_gc_debug+set}" = set; then : >>> + enableval=$enable_algol68_gc_debug; >>> +else >>> + enable_algol68_gc_debug=no >>> +fi >>> + >>> + >>> bdw_lib_dir= >>> case "$enable_algol68_gc" in >>> no) >>> @@ -13719,6 +13731,21 @@ case $host in >>> esac >>> >>> >>> +case "$enable_algol68_gc_debug" in >>> + no) >>> + if test "$use_bdw_gc" = yes; then >>> + LIBGA68_GCFLAGS="$LIBGA68_GCFLAGS -DLIBGA68_DEBUG_GC=0" >>> + fi >>> + ;; >>> + *) >>> + if test "$use_bdw_gc" = no; then >>> + as_fn_error $? "GC debugging enabled but GC is not being used" >>> "$LINENO" 5 >>> + else >>> + LIBGA68_GCFLAGS="$LIBGA68_GCFLAGS -DLIBGA68_DEBUG_GC=1" >>> + fi >>> + ;; >>> +esac >>> + >>> # Subst some variables used in Makefile.am >>> >>> >>> diff --git a/libga68/configure.ac b/libga68/configure.ac >>> index 20a903ad8d9..c8aa032fba4 100644 >>> --- a/libga68/configure.ac >>> +++ b/libga68/configure.ac >>> @@ -248,6 +248,11 @@ AC_ARG_WITH([target-bdw-gc-lib], >>> [AS_HELP_STRING([--with-target-bdw-gc-lib=PATHLIST], >>> [specify directories for installed bdw-gc library])]) >>> >>> +AC_ARG_ENABLE(algol68-gc-debug, >>> +[AS_HELP_STRING([--enable-algol68-gc-debug], >>> + [enable use of Boehm's garbage collector debug functions >>> + with the GNU Algol runtime])],,enable_algol68_gc_debug=no) >>> + >>> bdw_lib_dir= >>> case "$enable_algol68_gc" in >>> no) >>> @@ -405,6 +410,21 @@ case $host in >>> esac >>> AC_SUBST(extra_darwin_ldflags_libga68) >>> >>> +case "$enable_algol68_gc_debug" in >>> + no) >>> + if test "$use_bdw_gc" = yes; then >>> + LIBGA68_GCFLAGS="$LIBGA68_GCFLAGS -DLIBGA68_DEBUG_GC=0" >>> + fi >>> + ;; >>> + *) >>> + if test "$use_bdw_gc" = no; then >>> + AC_MSG_ERROR([GC debugging enabled but GC is not being used]) >>> + else >>> + LIBGA68_GCFLAGS="$LIBGA68_GCFLAGS -DLIBGA68_DEBUG_GC=1" >>> + fi >>> + ;; >>> +esac >>> + >>> # Subst some variables used in Makefile.am >>> AC_SUBST(LIBGA68_GCFLAGS) >>> AC_SUBST(LIBGA68_BOEHM_GC_INCLUDES) >>> diff --git a/libga68/ga68-alloc.c b/libga68/ga68-alloc.c >>> index 5e9f7c2b920..77abf592b8f 100644 >>> --- a/libga68/ga68-alloc.c >>> +++ b/libga68/ga68-alloc.c >>> @@ -43,6 +43,11 @@ _libga68_malloc_internal (size_t size) >>> } >>> >>> #if LIBGA68_WITH_GC >>> + >>> +# if LIBGA68_DEBUG_GC >>> +# define GC_DEBUG 1 >>> +#endif >>> + >>> #include <gc/gc.h> >>> >>> void >>> @@ -58,7 +63,7 @@ _libga68_init_heap (void) >>> void * >>> _libga68_realloc (void *ptr, size_t size) >>> { >>> - void *res = (void *) GC_realloc (ptr, size); >>> + void *res = (void *) GC_REALLOC (ptr, size); >>> if (!res) >>> _libga68_abort ("Virtual memory exhausted\n"); >>> return res; >>> @@ -67,14 +72,14 @@ _libga68_realloc (void *ptr, size_t size) >>> void * >>> _libga68_realloc_unchecked (void *ptr, size_t size) >>> { >>> - void *res = (void *) GC_realloc (ptr, size); >>> + void *res = (void *) GC_REALLOC (ptr, size); >>> return res; >>> } >>> >>> void * >>> _libga68_malloc (size_t size) >>> { >>> - void *res = (void *) GC_malloc (size); >>> + void *res = (void *) GC_MALLOC (size); >>> if (!res) >>> _libga68_abort ("Virtual memory exhausted\n"); >>> return res; >>> >>> base-commit: 87222af419eb272d4b66628abda573ba8fcadc77
