Changeset e51781 in git


Ignore:
Timestamp:
Mar 31, 2017, 4:12:25 PM (7 years ago)
Author:
Hans Schoenemann <hannes@…>
Branches:
(u'spielwiese', 'fe61d9c35bf7c61f2b6cbf1b56e25e2f08d536cc')
Children:
735b48d0599e2d14512034dc106eefa76e038991
Parents:
61145cc38c432ee38d9db52c5a952b1ed522ae9f
Message:
omalloc: malloc_usable_sie, malloc_size
Location:
omalloc
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • omalloc/configure.ac

    r61145cc re51781  
    145145AC_CHECK_HEADERS(unistd.h sys/mman.h fcntl.h /usr/include/malloc.h)
    146146
    147 AC_CHECK_FUNCS(popen mmap sbrk random)
     147AC_CHECK_FUNCS(popen mmap sbrk random malloc_usable_size malloc_size)
    148148
    149149dnl llllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllll
     
    188188  FILE *f=fopen("conftestval", "w");
    189189  if (!f) exit(1);
    190   fprintf(f, "%d\n", omalloc_getpagesize);
     190  fprintf(f, "%d\n", (int)omalloc_getpagesize);
    191191  exit(0);
    192192}], ac_cv_pagesize=`cat conftestval`, ac_cv_pagesize=0, ac_cv_pagesize=0))
     
    296296fi
    297297
    298 AC_MSG_CHECKING(whether malloc provides SizeOfAddr)
    299 if test "${ac_cv_malloc_sizeof_addr}" = no; then
    300   AC_MSG_RESULT( (cached) no)
    301 elif test "${ac_cv_malloc_sizeof_addr}" = "${OM_MALLOC_HEADER}_${OM_MALLOC_SOURCE}"; then
    302    AC_MSG_RESULT( (cached) yes)
    303 else
    304 AC_TRY_RUN([
    305 #include <stdlib.h>
    306 #include "$OM_MALLOC_HEADER"
    307 #ifdef OM_HAVE_MALLOC_SOURCE
    308 #include "$OM_MALLOC_SOURCE"
    309 #endif
    310 
    311 int main()
    312 {
    313   void* addr = OM_MALLOC_MALLOC(512);
    314 #ifdef OM_MALLOC_SIZEOF_ADDR
    315   if (OM_MALLOC_SIZEOF_ADDR(addr) < 512)
    316     exit(1);
    317   exit(0);
    318 #else
    319   exit(1);
    320 #endif
    321 }
    322 ], ac_cv_malloc_sizeof_addr="${OM_MALLOC_HEADER}_${OM_MALLOC_SOURCE}", ac_cv_malloc_sizeof_addr=no, ac_cv_malloc_sizeof_addr=no)
    323 if test "${ac_cv_malloc_sizeof_addr}" = no; then
    324 AC_MSG_RESULT(no)
    325 else
    326 AC_MSG_RESULT(yes)
    327 fi
    328 fi
    329 if test "$ac_cv_malloc_sizeof_addr" != no; then
    330 AC_DEFINE(OM_MALLOC_PROVIDES_SIZEOF_ADDR,1,"Whether malloc provides SIZEOF_ADDR")
    331 fi
    332 
    333298dnl lllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllll
    334299dnl check whether valloc is provided and that it works
  • omalloc/omAllocEmulate.c

    r61145cc re51781  
    3131void* omEmulateRealloc0(void* o_addr, size_t n_size)
    3232{
    33 #ifdef OM_MALLOC_SIZEOF_ADDR
    3433  size_t o_size = OM_MALLOC_SIZEOF_ADDR(o_addr);
    35 #endif
    3634  void* addr = OM_MALLOC_REALLOC(o_addr, n_size);
    37 #ifdef OM_MALLOC_SIZEOF_ADDR
    3835  if (n_size > o_size)
    3936    memset((char *)addr + o_size, 0, n_size - o_size);
    40 #endif
    4137  return addr;
    4238}
  • omalloc/omAllocSystem.c

    r61145cc re51781  
    2929 *******************************************************************/
    3030/* allocation of large addr */
    31 #if defined(OM_MALLOC_PROVIDES_SIZEOF_ADDR)
    32 #define _omSizeOfLargeAddr(addr) (OM_MALLOC_SIZEOF_ADDR(addr) & (~SIZEOF_OM_ALIGNMENT_1))
     31#if defined(HAVE_MALLOC_SIZE)
     32#define _omSizeOfLargeAddr(addr) (malloc_size(addr))
     33#elif defined(HAVE_MALLOC_USABLE_SIZE)
     34#define _omSizeOfLargeAddr(addr) (malloc_usable_size(addr))
    3335#else
    3436void* omAllocLarge(size_t size)
     
    6466
    6567#define _omSizeOfLargeAddr(addr)  (*((size_t*) ((char*) addr - SIZEOF_STRICT_ALIGNMENT)))
    66 #endif /* OM_MALLOC_PROVIDES_SIZEOF_ADDR */
     68#endif /* HAVE_MALLOC_SIZE/HAVE_MALLOC_USABLE_SIZE */
    6769
    6870void* omAlloc0Large(size_t size)
     
    9799size_t omSizeOfAddr(const void* addr)
    98100{
     101  /*if (addr==NULL) return 0; */
    99102
    100103  return (omIsBinPageAddr(addr) ?
     
    194197  }
    195198
     199  size=omSizeOfAddr(ptr);
    196200#ifndef OM_NDEBUG
    197201  if (((unsigned long) ptr) + size > om_MaxAddr)
     
    234238  void* res;
    235239
     240  oldsize=omSizeOfAddr(addr);
    236241  res = OM_REALLOC_FROM_SYSTEM(addr, newsize);
    237242  if (res == NULL)
     
    250255    }
    251256  }
     257  newsize=omSizeOfAddr(res);
    252258
    253259#ifndef OM_NDEBUG
  • omalloc/omAllocSystem.h

    r61145cc re51781  
    2727
    2828
    29 #ifdef OM_MALLOC_PROVIDES_SIZEOF_ADDR
    30 #define omAllocLarge(size)             omAllocFromSystem(OM_ALIGN_SIZE(size))
    31 #define omReallocLarge(addr, new_size) omReallocSizeFromSystem(addr, omSizeOfLargeAddr(addr), OM_ALIGN_SIZE(new_size))
     29#if defined(HAVE_MALLOC_SIZE) || defined(HAVE_MALLOC_USABLE_SIZE)
     30#define omAllocLarge(size)             omAllocFromSystem(size)
     31#define omReallocLarge(addr, new_size) omReallocSizeFromSystem(addr, omSizeOfLargeAddr(addr), new_size)
    3232#define omFreeLarge(addr)              omFreeSizeToSystem(addr, omSizeOfLargeAddr(addr))
    3333#else
  • omalloc/omMallocSystem.h

    r61145cc re51781  
    1414#define OM_MALLOC_VALLOC   valloc
    1515#define OM_MALLOC_VFREE(addr, size) OM_MALLOC_FREE(addr)
     16#ifdef HAVE_MALLOC_SIZE
    1617/* the following will work under Mac OS X */
    1718#define OM_MALLOC_SIZEOF_ADDR(addr)  (malloc_size(addr))
     19#elif (defined(HAVE_MALLOC_USABLE_SIZE))
     20/* and this will work under Linux */
     21#define OM_MALLOC_SIZEOF_ADDR(addr) (malloc_usable_size(addr))
     22#else
     23static inline OM_MALLOC_SIZEOF_ADDR(void *d) { long*dd=(long*)d; return *(dd-1); }
     24#endif
    1825
    1926#endif /* OM_MALLOC_SYSTEM_H */
Note: See TracChangeset for help on using the changeset viewer.