From 81f90dd0c3c32b564116a64e1ed09275171aca62 Mon Sep 17 00:00:00 2001 From: David Malcolm Date: Fri, 30 Aug 2024 19:29:32 -0400 Subject: [PATCH 97/98] FIXME: experiments with obstack debugging Signed-off-by: David Malcolm --- include/obstack.h | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/include/obstack.h b/include/obstack.h index 799036c414c2..a14093540858 100644 --- a/include/obstack.h +++ b/include/obstack.h @@ -277,6 +277,17 @@ extern int obstack_exit_failure; # define __extension__ # endif +// TODO: use macros to have a consistent place to disable this debug code + +#if 1 +# define OBSTACK_DEBUG_MEMSET(PTR, VALUE, SIZE) memset ((PTR), (VALUE), (SIZE)) +#else +# define OBSTACK_DEBUG_MEMSET(PTR, VALUE, SIZE) +#endif + +# define OBSTACK_DEBUG_VALUE_FREED 0x11 + + /* For GNU C, if not -traditional, we can define these macros to compute all args only once without using a global variable. @@ -420,7 +431,11 @@ extern int obstack_exit_failure; ({ struct obstack *__o = (OBSTACK); \ void *__obj = (void *) (OBJ); \ if (__obj > (void *) __o->chunk && __obj < (void *) __o->chunk_limit) \ - __o->next_free = __o->object_base = (char *) __obj; \ + { \ + OBSTACK_DEBUG_MEMSET (__obj, OBSTACK_DEBUG_VALUE_FREED, \ + __o->next_free - (char *)__obj); \ + __o->next_free = __o->object_base = (char *) __obj; \ + } \ else \ _obstack_free (__o, __obj); }) -- 2.49.0