From: Dmitry Stogov Date: Fri, 2 Mar 2018 14:36:18 +0000 (+0300) Subject: Switch to better GC address representation X-Git-Tag: php-7.3.0alpha1~267 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=e6d6fcedf71a658c49b7c2eb55305cf5970ec681;p=php Switch to better GC address representation --- diff --git a/Zend/zend_gc.c b/Zend/zend_gc.c index f536736388..89aedfd5c2 100644 --- a/Zend/zend_gc.c +++ b/Zend/zend_gc.c @@ -140,17 +140,17 @@ ((void*)(((uintptr_t)(ptr)) | GC_GARBAGE)) /* GC address conversion */ -#define GC_ADDR2NUM(addr) (addr) -#define GC_NUM2ADDR(num) (num) +#define GC_ADDR2NUM(addr) ((addr) / sizeof(void*)) +#define GC_NUM2ADDR(num) ((num) * sizeof(void*)) -#define GC_NEXT_ADDR(addr) ((addr) + 1) -#define GC_PREV_ADDR(addr) ((addr) - 1) +#define GC_NEXT_ADDR(addr) ((addr) + sizeof(void*)) +#define GC_PREV_ADDR(addr) ((addr) - sizeof(void*)) -#define GC_ADDR2PTR(addr) (GC_G(buf) + (addr)) -#define GC_PTR2ADDR(ptr) ((ptr) - GC_G(buf)) +#define GC_ADDR2PTR(addr) ((gc_root_buffer*)(((char*)GC_G(buf)) + (addr))) +#define GC_PTR2ADDR(ptr) ((uint32_t)(((char*)(ptr)) - (char*)GC_G(buf))) -#define GC_ADDR2LIST(addr) ((void*)(uintptr_t)(((addr) * sizeof(void*)) | GC_UNUSED)) -#define GC_LIST2ADDR(list) (((uint32_t)(uintptr_t)(list)) / sizeof(void*)) +#define GC_ADDR2LIST(addr) ((void*)(uintptr_t)((addr) | GC_UNUSED)) +#define GC_LIST2ADDR(list) (((uint32_t)(uintptr_t)(list)) - GC_UNUSED) /* GC buffers */ #define GC_INVALID_NUM 0