Browse Source

fix support for realloc() and calloc() as an option in cmake

Ioannis Koutras 12 years ago
parent
commit
29d9941cc2
4 changed files with 27 additions and 21 deletions
  1. 1 0
      CMakeLists.txt
  2. 6 2
      DefineOptions.cmake
  3. 15 16
      src/CMakeLists.txt
  4. 5 3
      src/freelist/freelist_realloc.c

+ 1 - 0
CMakeLists.txt

@@ -173,4 +173,5 @@ message(STATUS "Requested Size per Block: " ${REQUEST_SIZE_INFO})
 message(STATUS "Support for debug functions: " ${WITH_DEBUG})
 message(STATUS "Adaptivity: " ${WITH_ADAPTIVITY})
 message(STATUS "Support for realloc(): " ${WITH_REALLOC})
+message(STATUS "Support for calloc(): " ${WITH_CALLOC})
 message(STATUS "********************************************")

+ 6 - 2
DefineOptions.cmake

@@ -23,7 +23,8 @@ set(BITMAP_RESOLUTION 256 CACHE INTEGER "Choose the size of cells in bitmap-orga
 
 # Function Implementation Settings
 
-option(WITH_REALLOC "Build with realloc" OFF)
+option(WITH_REALLOC "Build with realloc" ON)
+option(WITH_CALLOC "Build with calloc" ON)
 
 # Statistics Settings
 
@@ -60,6 +61,7 @@ if(P2012)
   set(WITH_COALESCING "never")
   set(WITH_SPLITTING "never")
   set(WITH_REALLOC OFF)
+  set(WITH_CALLOC OFF)
   set(STATS "none")
   set(TRACE_LEVEL 0)
   set(WITH_DEBUG OFF)
@@ -78,6 +80,7 @@ if(LEON3)
   set(WITH_COALESCING "never")
   set(WITH_SPLITTING "never")
   set(WITH_REALLOC OFF)
+  set(WITH_CALLOC OFF)
   set(STATS "none")
   set(TRACE_LEVEL 0)
   set(WITH_DEBUG OFF)
@@ -94,8 +97,9 @@ if(LINUX)
   set(RAW_BLOCKS_TYPE "bitmap")
   set(BITMAP_RESOLUTION 256)
   set(TRACE_LEVEL 3)
-  set(WITH_DEBUG ON)
+  set(WITH_DEBUG OFF)
   set(WITH_REALLOC ON)
+  set(WITH_CALLOC ON)
   set(STATS "global")
   set(REQUEST_SIZE_INFO ON)
   set(WITH_SHARED_LIB ON)

+ 15 - 16
src/CMakeLists.txt

@@ -37,7 +37,6 @@ if(NOT WITH_SYSTEM_CALLS STREQUAL "none")
     ${dmmlib_SRCS}
     malloc.c
     free.c
-    realloc.c
     calloc.c
     release_memory.c
     other.c
@@ -112,6 +111,10 @@ if(RAW_BLOCKS_TYPE STREQUAL "freelist")
       )
   endif(SPLITTING_FIXED OR SPLITTING_VARIABLE)
 
+  if(WITH_REALLOC)
+    set(dmmlib_SRCS ${dmmlib_SRCS} freelist/realloc.c)
+  endif(WITH_REALLOC)
+
   if(WITH_DEBUG)
     set(dmmlib_SRCS
       ${dmmlib_SRCS}
@@ -119,13 +122,6 @@ if(RAW_BLOCKS_TYPE STREQUAL "freelist")
       )
   endif(WITH_DEBUG)
 
-  if(WITH_REALLOC)
-    set(dmmlib_SRCS
-      ${dmmlib_SRCS}
-      freelist/freelist_realloc.c
-      )
-  endif(WITH_REALLOC)
-
 elseif(RAW_BLOCKS_TYPE STREQUAL "bitmap")
 
   set(dmmlib_SRCS
@@ -133,10 +129,12 @@ elseif(RAW_BLOCKS_TYPE STREQUAL "bitmap")
     bitmap/other.c
     bitmap/malloc.c
     bitmap/free.c
-    bitmap/realloc.c
-    memmove.c
     )
 
+  if(WITH_REALLOC)
+    set(dmmlib_SRCS ${dmmlib_SRCS} bitmap/realloc.c memmove.c)
+  endif(WITH_REALLOC)
+
   if(WITH_DEBUG)
     set(dmmlib_SRCS
       ${dmmlib_SRCS}
@@ -182,12 +180,13 @@ if(NOT STATS STREQUAL "none")
   )
 endif(NOT STATS STREQUAL "none")
 
-if (WITH_REALLOC)
-  set(dmmlib_SRCS
-    ${dmmlib_SRCS}
-    #    custom_realloc.c
-  )
-endif (WITH_REALLOC)
+if(WITH_REALLOC)
+  set(dmmlib_SRCS ${dmmlib_SRCS} realloc.c)
+endif(WITH_REALLOC)
+
+if(WITH_CALLOC)
+  set(dmmlib_SRCS ${dmmlib_SRCS} calloc.c)
+endif(WITH_CALLOC)
 
 if (WITH_ADAPTIVITY)
   set(dmmlib_SRCS

+ 5 - 3
src/freelist/freelist_realloc.c

@@ -16,7 +16,7 @@
  */
 
 /**
- * @file   freelist_realloc.c
+ * @file   freelist/realloc.c
  * @author Ioannis Koutras
  * @date   September, 2012
  * @brief  realloc() implementation for freelist-organized raw blocks
@@ -34,7 +34,9 @@
 #include "locks.h"
 
 /**
- * Reallocates a memory block from a freelist-organized raw block
+ * Re-allocates a memory block from a freelist-organized raw block
+ *
+ * FIXME Tries to re-allocate only in the same raw block.
  *
  * @param  raw_block The pointer of the freelist raw block.
  * @param  ptr       The pointer of the memory block to be re-allocated.
@@ -43,7 +45,7 @@
  * @retval NULL      No available memory space.
  */
 void * freelist_realloc(freelist_rb_t *raw_block, void *ptr,
-        size_t req_size) { 
+        size_t req_size) {
     block_header_t *block;
     void *ret;