libga68: Make it possible to debug the GC

Message ID 20260111204044.982556-1-pietro@sociotechnical.xyz
State Superseded
Headers
Series libga68: Make it possible to debug the GC |

Commit Message

Pietro Monteiro Jan. 11, 2026, 8:40 p.m. UTC
  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.
	(_libga68_realloc): Use the C macro version of the GC function.
	(_libga68_realloc_unchecked): Likewise.
	(_libga68_malloc): Likewise.

Signed-off-by: Pietro Monteiro <pietro@sociotechnical.xyz>
---
 libga68/configure    | 31 +++++++++++++++++++++++++++++--
 libga68/configure.ac | 20 ++++++++++++++++++++
 libga68/ga68-alloc.c | 11 ++++++++---
 3 files changed, 57 insertions(+), 5 deletions(-)


base-commit: 87222af419eb272d4b66628abda573ba8fcadc77
  

Comments

Jose E. Marchesi Jan. 11, 2026, 9:05 p.m. UTC | #1
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?

> 	(_libga68_realloc): Use the C macro version of the GC function.
> 	(_libga68_realloc_unchecked): Likewise.
> 	(_libga68_malloc): Likewise.
>
> Signed-off-by: Pietro Monteiro <pietro@sociotechnical.xyz>
> ---
>  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
  
Pietro Monteiro Jan. 11, 2026, 9:52 p.m. UTC | #2
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.

pietro

>> 	(_libga68_realloc): Use the C macro version of the GC function.
>> 	(_libga68_realloc_unchecked): Likewise.
>> 	(_libga68_malloc): Likewise.
>>
>> Signed-off-by: Pietro Monteiro <pietro@sociotechnical.xyz>
>> ---
>>  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
  
Jose E. Marchesi Jan. 11, 2026, 10:06 p.m. UTC | #3
> 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 <pietro@sociotechnical.xyz>
>>> ---
>>>  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
  

Patch

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;