]> granicus.if.org Git - gc/commitdiff
Do not allow SHORT_DBG_HDRS if KEEP_BACK_PTRS or MAKE_BACK_GRAPH
authorIvan Maidanski <ivmai@mail.ru>
Tue, 2 Aug 2016 09:01:48 +0000 (12:01 +0300)
committerIvan Maidanski <ivmai@mail.ru>
Tue, 2 Aug 2016 22:05:50 +0000 (01:05 +0300)
Otherwise GC_HAS_DEBUG_INFO (defined as (p&1)) might return true
if a non-pointer is stored at the beginning of the tested object
leading further to its corruption by GC_store_back_pointer.
See issue #125 for details.

* include/private/dbg_mlc.h [KEEP_BACK_PTRS || MAKE_BACK_GRAPH]
(GC_HAS_DEBUG_INFO): Add #error (with the appropriate message) in
case of SHORT_DBG_HDRS defined.

include/private/dbg_mlc.h

index deda69c7c232019a41f40a08161fd56335ea4d99..2ffbc5e7b4358cdf336d1523eaf88dc785451c3e 100644 (file)
@@ -157,6 +157,10 @@ typedef struct {
 #endif
 
 #if defined(KEEP_BACK_PTRS) || defined(MAKE_BACK_GRAPH)
+# ifdef SHORT_DBG_HDRS
+#   error Non-ptr stored in object results in GC_HAS_DEBUG_INFO malfunction
+    /* We may mistakenly conclude that p has a debugging wrapper.       */
+# endif
 # define GC_HAS_DEBUG_INFO(p) \
         ((*((word *)p) & 1) && GC_has_other_debug_info(p) > 0)
 #else