Changeset 24

Show
Ignore:
Timestamp:
09/03/06 12:48:23 (8 years ago)
Author:
richdawe
Message:

Add --enable-malloc-replacement option, for using libumem as a malloc replacement

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk

    • Property svn:ignore changed from
      *.lo
      *.la
      .deps
      .libs
      *.loT
      Makefile
      Makefile.in
      aclocal.m4
      autom4te.cache
      config.h
      config.h.in
      config.log
      config.status
      configure
      libtool
      stamp-h
      stamp-h.in
      stamp-h1
      umem_test
      umem_test2
      Doxyfile
      umem.spec
      *.tar.gz
      *.tar.bz2
      to
      *.lo
      *.la
      .deps
      .libs
      *.loT
      Makefile
      Makefile.in
      aclocal.m4
      autom4te.cache
      config.h
      config.h.in
      config.log
      config.status
      configure
      libtool
      stamp-h
      stamp-h.in
      stamp-h1
      umem_test
      umem_test2
      umem_test3
      Doxyfile
      umem.spec
      *.tar.gz
      *.tar.bz2
  • trunk/.cvsignore

    r21 r24  
    1919umem_test 
    2020umem_test2 
     21umem_test3 
    2122Doxyfile 
    2223umem.spec 
  • trunk/Makefile.am

    r21 r24  
    1 EXTRA_DIST = COPYRIGHT OPENSOLARIS.LICENSE umem.spec Doxyfile 
     1EXTRA_DIST = COPYRIGHT OPENSOLARIS.LICENSE umem.spec Doxyfile umem_test4 
    22 
    33lib_LTLIBRARIES = libumem.la 
    4 noinst_PROGRAMS = umem_test umem_test2 
     4noinst_PROGRAMS = umem_test umem_test2 umem_test3 
     5 
     6libumem_la_LDFLAGS = -lpthread -ldl 
    57 
    68umem_test_SOURCES = umem_test.c 
    7 umem_test_LDADD = -lumem -lpthread -ldl 
     9umem_test_LDADD = -lumem 
    810 
    911umem_test2_SOURCES = umem_test2.c 
    10 umem_test2_LDADD = -lumem -lpthread -ldl 
     12umem_test2_LDADD = -lumem 
     13 
     14umem_test3_SOURCES = umem_test3.c 
     15umem_test3_LDADD = -lumem 
    1116 
    1217libumem_la_SOURCES =    init_lib.c \ 
     
    3338                        sys/vmem_impl_user.h 
    3439 
     40if MALLOC_REPLACEMENT 
     41libumem_la_SOURCES += malloc.c 
     42endif 
     43 
    3544nobase_include_HEADERS = umem.h sys/vmem.h 
    3645 
    37 TESTS = umem_test umem_test2 
     46TESTS = umem_test umem_test2 umem_test3 umem_test4 
    3847 
    3948html-local: 
     
    4857        rpmbuild -ta $(distdir).tar.bz2 
    4958 
    50 # malloc.c 
    51  
    52 # XXX: Standalone version? 
    53 # See <http://cvs.opensolaris.org/source/xref/on/usr/src/lib/libumem/Makefile.com> 
    54  
    5559# XXX: Non-i386: SPARC asm. x86_64? 
    5660# Convert this to GNU as format: i386_subr_sol.s 
     61# <http://cvs.opensolaris.org/source/xref/on/usr/src/lib/libumem/> 
  • trunk/configure.ac

    r16 r24  
    11AC_INIT([umem], [1.0], [], [umem]) 
    22AM_INIT_AUTOMAKE([dist-bzip2]) 
     3 
     4AC_ARG_ENABLE([malloc-replacement], 
     5              AS_HELP_STRING([--enable-malloc-replacement], 
     6                             [Include implementations of malloc/free/etc. in libumem (default is no)]), 
     7              [case "${enableval}" in 
     8                yes) malloc_replacement=true ;; 
     9                no)  malloc_replacement=false ;; 
     10                *) AC_MSG_ERROR(bad value ${enableval} for --enable-malloc-replacement) ;; 
     11              esac],[malloc_replacement=false]) 
     12AM_CONDITIONAL(MALLOC_REPLACEMENT, test x$malloc_replacement = xtrue) 
    313 
    414AC_PROG_CC 
  • trunk/init_lib.c

    r2 r24  
    4545#endif 
    4646 
     47#include <fcntl.h> 
     48#include <string.h> 
     49 
    4750void 
    4851vmem_heap_init(void) 
     
    9093umem_get_max_ncpus(void) 
    9194{ 
    92 #ifdef _SC_NPROCESSORS_ONLN 
     95#ifdef linux 
     96  /* 
     97   * HACK: sysconf() will invoke malloc() on Linux as part of reading 
     98   * in /proc/stat. To avoid recursion in the malloc replacement 
     99   * version of libumem, read /proc/stat into a static buffer. 
     100   */ 
     101  static char proc_stat[8192]; 
     102  int fd; 
     103  int ncpus = 1; 
     104 
     105  fd = open("/proc/stat", O_RDONLY); 
     106  if (fd >= 0) { 
     107    const ssize_t n = read(fd, proc_stat, sizeof(proc_stat) - 1); 
     108    if (n >= 0) { 
     109      const char *cur; 
     110      const char *next; 
     111 
     112      proc_stat[n] = '\0'; 
     113      cur = proc_stat; 
     114      while (*cur && (next = strstr(cur + 3, "cpu"))) { 
     115        cur = next; 
     116      } 
     117 
     118      if (*cur) 
     119        ncpus = atoi(cur + 3) + 1; 
     120    } 
     121 
     122    close(fd); 
     123  } 
     124 
     125  return ncpus; 
     126 
     127#else /* !linux */ 
     128 
     129#if _SC_NPROCESSORS_ONLN 
    93130  return (2 * sysconf(_SC_NPROCESSORS_ONLN)); 
    94131#elif defined(_SC_NPROCESSORS_CONF) 
     
    102139  return (1); 
    103140#endif 
     141 
     142#endif /* linux */ 
    104143} 
  • trunk/malloc.c

    r2 r24  
    415415        return (buf); 
    416416} 
     417 
     418void __attribute__((constructor)) 
     419__malloc_umem_init (void) 
     420{ 
     421  umem_startup(NULL, 0, 0, NULL, NULL); 
     422} 
  • trunk/umem.spec.in

    r23 r24  
    1717BuildRequires:  binutils 
    1818BuildRequires:  make 
     19BuildRequires:  mktemp 
    1920 
    2021 
  • trunk/umem_test.c

    r22 r24  
    1919  umem_free(foo, 32); 
    2020 
    21   return 0
     21  return EXIT_SUCCESS
    2222} 
    2323