From 53a5ce734a02c7f207dd3adc415645e99e37ec72 Mon Sep 17 00:00:00 2001 From: Kostyantyn Vorobyov <kostyantyn.vorobyov@cea.fr> Date: Tue, 23 May 2017 15:52:21 +0200 Subject: [PATCH] Aliases in API --- .../bittree_model/e_acsl_bittree_mmodel.c | 27 +------ .../e-acsl/share/e-acsl/e_acsl_mmodel.c | 1 + .../e-acsl/share/e-acsl/e_acsl_mmodel_api.h | 71 +++++++++++++------ .../segment_model/e_acsl_segment_mmodel.c | 22 ------ 4 files changed, 53 insertions(+), 68 deletions(-) diff --git a/src/plugins/e-acsl/share/e-acsl/bittree_model/e_acsl_bittree_mmodel.c b/src/plugins/e-acsl/share/e-acsl/bittree_model/e_acsl_bittree_mmodel.c index 13e51eeea7b..7806d422e11 100644 --- a/src/plugins/e-acsl/share/e-acsl/bittree_model/e_acsl_bittree_mmodel.c +++ b/src/plugins/e-acsl/share/e-acsl/bittree_model/e_acsl_bittree_mmodel.c @@ -28,7 +28,7 @@ #include "e_acsl_bittree.h" -/* API BINDINGS {{{ */ +/* Public API {{{ */ /* Heap allocation */ #define bittree_malloc malloc #define bittree_calloc calloc @@ -36,29 +36,8 @@ #define bittree_free free #define bittree_posix_memalign posix_memalign #define bittree_aligned_alloc aligned_alloc -/* Explicit tracking */ -#define delete_block export_alias(delete_block) -#define store_block export_alias(store_block) -#define store_block_duplicate export_alias(store_block_duplicate) -/* Predicates */ -#define offset export_alias(offset) -#define base_addr export_alias(base_addr) -#define valid_read export_alias(valid_read) -#define valid export_alias(valid) -#define block_length export_alias(block_length) -#define initialized export_alias(initialized) -#define freeable export_alias(freeable) -#define mark_readonly export_alias(mark_readonly) -/* Block initialization */ -#define initialize export_alias(initialize) -#define full_init export_alias(full_init) -/* Memory state initialization */ -#define memory_clean export_alias(memory_clean) -#define memory_init export_alias(memory_init) -/* Heap size */ -#define get_heap_allocation_size export_alias(get_heap_allocation_size) -#define heap_allocation_size export_alias(heap_allocation_size) -#ifdef E_ACSL_DEBUG /* Debug */ +/* Debug */ +#ifdef E_ACSL_DEBUG # define bt_print_block export_alias(bt_print_block) # define bt_print_tree export_alias(bt_print_tree) # define block_info export_alias(block_info) diff --git a/src/plugins/e-acsl/share/e-acsl/e_acsl_mmodel.c b/src/plugins/e-acsl/share/e-acsl/e_acsl_mmodel.c index eada23ccb8b..c107df178c2 100644 --- a/src/plugins/e-acsl/share/e-acsl/e_acsl_mmodel.c +++ b/src/plugins/e-acsl/share/e-acsl/e_acsl_mmodel.c @@ -54,6 +54,7 @@ #include "e_acsl_assert.h" #include "e_acsl_safe_locations.h" #include "e_acsl_temporal_timestamp.h" +#include "e_acsl_mmodel_api.h" /* Memory model settings * Memory model: diff --git a/src/plugins/e-acsl/share/e-acsl/e_acsl_mmodel_api.h b/src/plugins/e-acsl/share/e-acsl/e_acsl_mmodel_api.h index 7d24d191f07..c145b6d9239 100644 --- a/src/plugins/e-acsl/share/e-acsl/e_acsl_mmodel_api.h +++ b/src/plugins/e-acsl/share/e-acsl/e_acsl_mmodel_api.h @@ -31,6 +31,33 @@ #define E_ACSL_MMODEL #include <stddef.h> +#include "e_acsl_alias.h" + +/***********************************************/ +/************ API prefixes *********************/ +/***********************************************/ +/* Tracking */ +#define delete_block export_alias(delete_block) +#define store_block export_alias(store_block) +#define store_block_duplicate export_alias(store_block_duplicate) +/* Predicates */ +#define offset export_alias(offset) +#define base_addr export_alias(base_addr) +#define block_length export_alias(block_length) +#define valid_read export_alias(valid_read) +#define valid export_alias(valid) +#define initialized export_alias(initialized) +#define freeable export_alias(freeable) +/* Block initialization */ +#define mark_readonly export_alias(mark_readonly) +#define initialize export_alias(initialize) +#define full_init export_alias(full_init) +/* Memory state initialization */ +#define memory_clean export_alias(memory_clean) +#define memory_init export_alias(memory_init) +/* Heap size */ +#define heap_allocation_size export_alias(heap_allocation_size) +#define get_heap_allocation_size export_alias(get_heap_allocation_size) /***********************************************/ /************ Basic API ************************/ @@ -83,40 +110,40 @@ int posix_memalign(void **memptr, size_t alignment, size_t size) * \param ptr base address of the tracked memory block * \param size size of the tracked block in bytes */ /*@ assigns \result \from *(((char*)ptr)+(0..size-1)); */ -void * __e_acsl_store_block(void * ptr, size_t size) +void * store_block(void * ptr, size_t size) __attribute__((FC_BUILTIN)); -/*! \brief Same as `__e_acsl_store_block`, but first check +/*! \brief Same as `store_block`, but first check * checks whether a block with a base address given by `ptr` exists in the * tracked allocation and remove it before storing a new block. * * \param ptr base address of the tracked memory block * \param size size of the tracked block in bytes */ /*@ assigns \result \from *(((char*)ptr)+(0..size-1)); */ -void * __e_acsl_store_block_duplicate(void * ptr, size_t size) +void * store_block_duplicate(void * ptr, size_t size) __attribute__((FC_BUILTIN)); /*! \brief Remove a memory block which base address is \p ptr from tracking. */ /*@ assigns \nothing; */ -void __e_acsl_delete_block(void * ptr) +void delete_block(void * ptr) __attribute__((FC_BUILTIN)); /*! \brief Mark the \p size bytes starting at an address given by \p ptr as * initialized. */ /*@ assigns \nothing; */ -void __e_acsl_initialize(void * ptr, size_t size) +void initialize(void * ptr, size_t size) __attribute__((FC_BUILTIN)); /*! \brief Mark all bytes belonging to a memory block which start address is * given by \p ptr as initialized. */ /*@ assigns \nothing; */ -void __e_acsl_full_init(void * ptr) +void full_init(void * ptr) __attribute__((FC_BUILTIN)); /*! \brief Mark a memory block which start address is given by \p ptr as * read-only. */ /*@ assigns \nothing; */ -void __e_acsl_mark_readonly(void * ptr) +void mark_readonly(void * ptr) __attribute__((FC_BUILTIN)); /* ****************** */ @@ -128,7 +155,7 @@ void __e_acsl_mark_readonly(void * ptr) * Evaluate to a non-zero value if \p ptr points to a start address of * a block allocated via \p malloc, \p calloc or \p realloc. */ /*@ assigns \result \from ptr; */ -int __e_acsl_freeable(void * ptr) +int freeable(void * ptr) __attribute__((FC_BUILTIN)); /*! \brief Implementation of the \b \\valid predicate of E-ACSL. @@ -157,17 +184,17 @@ int __e_acsl_freeable(void * ptr) /*@ ensures \result == 0 || \result == 1; @ ensures \result == 1 ==> \valid(((char *)ptr)+(0..size-1)); @ assigns \result \from *(((char*)ptr)+(0..size-1)); */ -int __e_acsl_valid(void * ptr, size_t size, void *base, void *addrof_base) +int valid(void * ptr, size_t size, void *base, void *addrof_base) __attribute__((FC_BUILTIN)); /*! \brief Implementation of the \b \\valid_read predicate of E-ACSL. * - * Same as ::__e_acsl_valid except the checked memory locations are only + * Same as ::valid except the checked memory locations are only * required to be allocated. */ /*@ ensures \result == 0 || \result == 1; @ ensures \result == 1 ==> \valid_read(((char *)ptr)+(0..size-1)); @ assigns \result \from *(((char*)ptr)+(0..size-1)); */ -int __e_acsl_valid_read(void * ptr, size_t size, void *ptr_base, void *addrof_base) +int valid_read(void * ptr, size_t size, void *ptr_base, void *addrof_base) __attribute__((FC_BUILTIN)); /*! \brief Implementation of the \b \\base_addr predicate of E-ACSL. @@ -176,7 +203,7 @@ int __e_acsl_valid_read(void * ptr, size_t size, void *ptr_base, void *addrof_ba * by \p ptr */ /*@ ensures \result == \base_addr(ptr); @ assigns \result \from ptr; */ -void * __e_acsl_base_addr(void * ptr) +void * base_addr(void * ptr) __attribute__((FC_BUILTIN)); /*! \brief Implementation of the \b \\block_length predicate of E-ACSL. @@ -185,19 +212,19 @@ void * __e_acsl_base_addr(void * ptr) * address given by \p ptr */ /*@ ensures \result == \block_length(ptr); @ assigns \result \from ptr; */ -size_t __e_acsl_block_length(void * ptr) +size_t block_length(void * ptr) __attribute__((FC_BUILTIN)); /*! \brief Implementation of the \b \\offset predicate of E-ACSL. * * Return the byte offset of address given by \p ptr within a memory blocks * it belongs to */ -/* FIXME: The return type of __e_acsl_offset should be changed to size_t. +/* FIXME: The return type of offset should be changed to size_t. * In the current E-ACSL/Frama-C implementation, however, this change * leads to a Frama-C failure. */ /*@ ensures \result == \offset(ptr); @ assigns \result \from ptr; */ -int __e_acsl_offset(void * ptr) +int offset(void * ptr) __attribute__((FC_BUILTIN)); /*! \brief Implementation of the \b \\initialized predicate of E-ACSL. @@ -207,33 +234,33 @@ int __e_acsl_offset(void * ptr) /*@ ensures \result == 0 || \result == 1; @ ensures \result == 1 ==> \initialized(((char *)ptr)+(0..size-1)); @ assigns \result \from *(((char*)ptr)+(0..size-1)); */ -int __e_acsl_initialized(void * ptr, size_t size) +int initialized(void * ptr, size_t size) __attribute__((FC_BUILTIN)); /*@ ghost int extern __e_acsl_internal_heap; */ /*! \brief Clean-up memory tracking state before a program's termination. */ /*@ assigns \nothing; */ -void __e_acsl_memory_clean(void) +void memory_clean(void) __attribute__((FC_BUILTIN)); /*! \brief Initialize memory tracking state. * Called before any other statement in \p main */ /*@ assigns \nothing; */ -void __e_acsl_memory_init(int *argc_ref, char ***argv, size_t ptr_size) +void memory_init(int *argc_ref, char ***argv, size_t ptr_size) __attribute__((FC_BUILTIN)); /*! \brief Return the cumulative size (in bytes) of tracked heap allocation. */ /*@ assigns \result \from __e_acsl_internal_heap; */ -size_t __e_acsl_get_heap_allocation_size(void) +size_t get_heap_allocation_size(void) __attribute__((FC_BUILTIN)); /*! \brief A variable holding a byte size of tracked heap allocation. */ -extern size_t __e_acsl_heap_allocation_size; +extern size_t heap_allocation_size; /*@predicate diffSize{L1,L2}(integer i) = - \at(__e_acsl_heap_allocation_size, L1) - - \at(__e_acsl_heap_allocation_size, L2) == i; */ + \at(heap_allocation_size, L1) + - \at(heap_allocation_size, L2) == i; */ /***********************************************/ /************ Temporal analysis API ************/ diff --git a/src/plugins/e-acsl/share/e-acsl/segment_model/e_acsl_segment_mmodel.c b/src/plugins/e-acsl/share/e-acsl/segment_model/e_acsl_segment_mmodel.c index 9cdc97d92f0..239fcb241c1 100644 --- a/src/plugins/e-acsl/share/e-acsl/segment_model/e_acsl_segment_mmodel.c +++ b/src/plugins/e-acsl/share/e-acsl/segment_model/e_acsl_segment_mmodel.c @@ -36,28 +36,6 @@ #define shadow_free free #define shadow_aligned_alloc aligned_alloc #define shadow_posix_memalign posix_memalign -/* Explicit tracking */ -#define delete_block export_alias(delete_block) -#define store_block export_alias(store_block) -#define store_block_duplicate export_alias(store_block_duplicate) -/* Predicates */ -#define offset export_alias(offset) -#define base_addr export_alias(base_addr) -#define block_length export_alias(block_length) -#define valid_read export_alias(valid_read) -#define valid export_alias(valid) -#define initialized export_alias(initialized) -#define freeable export_alias(freeable) -/* Block initialization */ -#define mark_readonly export_alias(mark_readonly) -#define initialize export_alias(initialize) -#define full_init export_alias(full_init) -/* Memory state initialization */ -#define memory_clean export_alias(memory_clean) -#define memory_init export_alias(memory_init) -/* Heap size */ -#define heap_allocation_size export_alias(heap_allocation_size) -#define get_heap_allocation_size export_alias(get_heap_allocation_size) /* }}} */ #include "e_acsl_shadow_layout.h" -- GitLab