From abe9a1a86da2874d29fdf4fea9e910121eec9bdd Mon Sep 17 00:00:00 2001 From: Kostyantyn Vorobyov <kostyantyn.vorobyov@cea.fr> Date: Fri, 25 Nov 2016 14:18:04 +0100 Subject: [PATCH] Namespace changes as per changes of terminology of shadow techniques --- .../segment_model/e_acsl_segment_tracking.h | 84 ++++++++++--------- 1 file changed, 43 insertions(+), 41 deletions(-) diff --git a/src/plugins/e-acsl/share/e-acsl/segment_model/e_acsl_segment_tracking.h b/src/plugins/e-acsl/share/e-acsl/segment_model/e_acsl_segment_tracking.h index ebc8c99abef..e1fb8c7bebb 100644 --- a/src/plugins/e-acsl/share/e-acsl/segment_model/e_acsl_segment_tracking.h +++ b/src/plugins/e-acsl/share/e-acsl/segment_model/e_acsl_segment_tracking.h @@ -65,7 +65,7 @@ * These remaining bytes reuse the shadow of [0,7]. */ #define LONG_BLOCK_BOUNDARY(_size) (_size - _size%LONG_BLOCK) -/*! \brief Short shadow of a long block consists of a 8-byte segment + a +/*! \brief Primary shadow of a long block consists of a 8-byte segment + a * remainder. For instance, a 18-byte block is represented by two 8-byte * segments + 2 bytes. Each byte of a segment stores an offset in the secondary * shadow. The offsets for each such segment can be expressed using the @@ -225,7 +225,7 @@ static int freeable(void *ptr); # define DVALIDATE_HEAP_ACCESS(_addr, _size) \ DVALIDATE_SHADOW_LAYOUT; \ - DVASSERT(IS_ON_HEAP((uintptr_t)_addr), \ + DVASSERT(IS_ON_HEAP(_addr), \ "Expected heap location: %a\n ", _addr); \ DVASSERT(heap_allocated((uintptr_t)_addr, _size), \ "Operation on unallocated heap block [%a + %lu]\n ", _addr, _size) @@ -233,7 +233,7 @@ static int freeable(void *ptr); # define segstr(_global) ((_global) ? "global" : "stack") # define DVALIDATE_STATIC_ACCESS(_addr, _size, _global) \ DVALIDATE_SHADOW_LAYOUT; \ - DVASSERT(IS_ON_STATIC((uintptr_t)_addr, _global), \ + DVASSERT(IS_ON_STATIC(_addr, _global), \ "Expected %s location: %a\n ", segstr(_global), _addr); \ DVASSERT(static_allocated((uintptr_t)_addr, _size, _global), \ "Operation on unallocated %s block [%a + %lu]\n ", \ @@ -241,7 +241,7 @@ static int freeable(void *ptr); # define DVALIDATE_STATIC_LOCATION(_addr, _global) \ DVALIDATE_SHADOW_LAYOUT; \ - DVASSERT(IS_ON_STATIC((uintptr_t)_addr, _global), \ + DVASSERT(IS_ON_STATIC(_addr, _global), \ "Expected %s location: %a\n ", segstr(_global), _addr); \ DVASSERT(static_allocated_one((uintptr_t)_addr, _global), \ "Operation on unallocated %s block [%a]\n ", segstr(_global), _addr) @@ -306,11 +306,11 @@ static uintptr_t predicate(uintptr_t addr, char p) { #define block_length(_addr) predicate((uintptr_t)_addr, 'L') /*! \brief Return a base address of a memory block address `_addr` belongs to * \param uintptr_t _addr - a memory address */ -#define base_addr(_addr) predicate((uintptr_t)_addr, 'B') +#define base_addr(_addr) predicate((uintptr_t)_addr, 'B') /*! \brief Return a byte offset of a memory address given by `_addr` within * its block * \param uintptr_t _addr - a memory address */ -#define offset(_addr) predicate((uintptr_t)_addr, 'O') +#define offset(_addr) predicate((uintptr_t)_addr, 'O') /* }}} */ /* Static allocation {{{ */ @@ -336,39 +336,39 @@ static const char short_offsets_base [] = { 0, 1, 2, 4, 7, 11, 16, 22, 29 }; static void shadow_alloca(void *ptr, size_t size, int global) { DVALIDATE_SHADOW_LAYOUT; - unsigned char *short_shadowed = + unsigned char *prim_shadow = (unsigned char*)PRIMARY_SHADOW(ptr, global); - uint64_t *short_shadowed_alt = + uint64_t *prim_shadow_alt = (uint64_t *)PRIMARY_SHADOW(ptr, global); - unsigned int *long_shadowed = + unsigned int *sec_shadow = (unsigned int*)SECONDARY_SHADOW(ptr, global); /* Flip read-only bit for zero-size blocks. That is, physically it exists * but one cannot write to it. Further, the flipped read-only bit will also * identify such block as allocated */ if (!size) - setbit(READONLY_BIT, short_shadowed[0]); + setbit(READONLY_BIT, prim_shadow[0]); unsigned int i, j = 0, k = 0; if (IS_LONG_BLOCK(size)) { /* Long blocks */ int boundary = LONG_BLOCK_BOUNDARY(size); for (i = 0; i < boundary; i += LONG_BLOCK) { - /* Set values for a long shadow */ - long_shadowed[j++] = size; - long_shadowed[j++] = i; - /* Set offsets in the short shadow */ - short_shadowed_alt[k++] = LONG_BLOCK_MASK; + /* Set-up a secondary shadow segment */ + sec_shadow[j++] = size; + sec_shadow[j++] = i; + /* Set primary shadow offsets */ + prim_shadow_alt[k++] = LONG_BLOCK_MASK; } /* Write out the remainder */ for (i = boundary; i < size; i++) { unsigned char offset = i%LONG_BLOCK + LONG_BLOCK_INDEX_START + LONG_BLOCK; - short_shadowed[i] = (offset << 2); + prim_shadow[i] = (offset << 2); } } else { /* Short blocks */ for (i = 0; i < size; i++) { unsigned char code = short_offsets_base[size] + i; - short_shadowed[i] = (code << 2); + prim_shadow[i] = (code << 2); } } } @@ -409,18 +409,18 @@ static void static_shadow_freea(void *ptr, int global) { * applied to a stack or global address. */ static int static_allocated(uintptr_t addr, long size, int global) { DVALIDATE_SHADOW_LAYOUT; - unsigned char *short_shadowed = (unsigned char*)PRIMARY_SHADOW(addr, global); + unsigned char *prim_shadow = (unsigned char*)PRIMARY_SHADOW(addr, global); /* Unless the address belongs to tracked allocation 0 is returned */ - if (short_shadowed[0]) { - unsigned int code = (short_shadowed[0] >> 2); + if (prim_shadow[0]) { + unsigned int code = (prim_shadow[0] >> 2); unsigned int long_block = (code >= LONG_BLOCK_INDEX_START); size_t length, offset; if (long_block) { offset = code - LONG_BLOCK_INDEX_START; - unsigned int *long_shadowed = + unsigned int *sec_shadow = (unsigned int*)SECONDARY_SHADOW(addr - offset, global) ; - length = long_shadowed[0]; - offset = long_shadowed[1] + offset; + length = sec_shadow[0]; + offset = sec_shadow[1] + offset; } else { offset = short_offsets[code]; length = short_lengths[code]; @@ -490,23 +490,23 @@ static int static_initialized(uintptr_t addr, long size, int global) { * unspecified. */ static uintptr_t static_info(uintptr_t addr, char type, int global) { DVALIDATE_STATIC_LOCATION(addr, global); - unsigned char *short_shadowed = (unsigned char*)PRIMARY_SHADOW(addr, global); + unsigned char *prim_shadow = (unsigned char*)PRIMARY_SHADOW(addr, global); /* Unless the address belongs to tracked allocation 0 is returned */ - if (short_shadowed[0]) { - unsigned int code = (short_shadowed[0] >> 2); + if (prim_shadow[0]) { + unsigned int code = (prim_shadow[0] >> 2); unsigned int long_block = (code >= LONG_BLOCK_INDEX_START); if (long_block) { unsigned int offset = code - LONG_BLOCK_INDEX_START; - unsigned int *long_shadowed = + unsigned int *sec_shadow = (unsigned int*)SECONDARY_SHADOW(addr - offset, global) ; switch(type) { case 'B': /* Base address */ - return addr - offset - long_shadowed[1]; + return addr - offset - sec_shadow[1]; case 'O': /* Offset */ - return long_shadowed[1] + offset; + return sec_shadow[1] + offset; case 'L': /* Length */ - return long_shadowed[0]; + return sec_shadow[0]; default: DASSERT(0 && "Unknown static query type"); } @@ -1084,11 +1084,11 @@ static void initialize(void *ptr, size_t n) { * shadow */ static void printbyte(unsigned char c, char buf[]) { if (c >> 2 < LONG_BLOCK_INDEX_START) { - sprintf(buf, "SHORT: I{%u} RO{%u} OF{%2u} => %u[%u]", + sprintf(buf, "PRIMARY: I{%u} RO{%u} OF{%2u} => %u[%u]", checkbit(INIT_BIT,c), checkbit(READONLY_BIT,c), c >> 2, short_lengths[c >> 2], short_offsets[c >> 2]); } else { - sprintf(buf, "LONG: I{%u} RO{%u} OF{%u} => %4u", + sprintf(buf, "SECONDARY: I{%u} RO{%u} OF{%u} => %4u", checkbit(INIT_BIT,c), checkbit(READONLY_BIT,c), (c >> 2), (c >> 2) - LONG_BLOCK_INDEX_START); } @@ -1097,27 +1097,27 @@ static void printbyte(unsigned char c, char buf[]) { /*! \brief Print human-readable (well, ish) representation of a memory block * using primary and secondary shadows. */ static void print_static_shadows(uintptr_t addr, size_t size, int global) { - char short_buf[256]; - char long_buf[256]; + char prim_buf[256]; + char sec_buf[256]; - unsigned char *short_shadowed = (unsigned char*)PRIMARY_SHADOW(addr, global); - unsigned int *long_shadowed = (unsigned int*)SECONDARY_SHADOW(addr, global); + unsigned char *prim_shadow = (unsigned char*)PRIMARY_SHADOW(addr, global); + unsigned int *sec_shadow = (unsigned int*)SECONDARY_SHADOW(addr, global); int i, j = 0; for (i = 0; i < size; i++) { - long_buf[0] = '\0'; - printbyte(short_shadowed[i], short_buf); + sec_buf[0] = '\0'; + printbyte(prim_shadow[i], prim_buf); if (IS_LONG_BLOCK(size) && (i%LONG_BLOCK) == 0) { j += 2; if (i < LONG_BLOCK_BOUNDARY(size)) { - sprintf(long_buf, " %a SZ{%u} OF{%u}", - &long_shadowed[j], long_shadowed[j-2], long_shadowed[j-1]); + sprintf(sec_buf, " %a SZ{%u} OF{%u}", + &sec_shadow[j], sec_shadow[j-2], sec_shadow[j-1]); } if (i) { DLOG("---------------------------------------------\n"); } } - DLOG("| [%2d] %a | %s || %s\n", i, &short_shadowed[i], short_buf, long_buf); + DLOG("| [%2d] %a | %s || %s\n", i, &prim_shadow[i], prim_buf, sec_buf); } } @@ -1184,6 +1184,8 @@ static void which_segment(uintptr_t addr) { loc = "heap"; else if (IS_ON_GLOBAL(addr)) loc = "global"; + else if (IS_ON_TLS(addr)) + loc = "TLS"; else loc = "untracked"; DLOG("Address: %a -> %s\n", addr, loc); -- GitLab