libga68: Make it possible to debug the GC
Commit Message
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
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
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
> 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
@@ -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
@@ -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)
@@ -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;