Changeset 36 for trunk/malloc.c

Show
Ignore:
Timestamp:
03/18/07 01:37:02 (7 years ago)
Author:
wez
Message:

be more libc friendly when replacing malloc().

Use our own getenv() on glibc platforms, as the glibc implementation calls
malloc() internally. This allows the use of env vars to enable debugging modes
in the app.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/malloc.c

    r27 r36  
    4242#include "misc.h" 
    4343 
     44#ifdef __GLIBC__ 
     45# include <malloc.h> 
     46#endif 
     47 
    4448/* 
    4549 * malloc_data_t is an 8-byte structure which is located "before" the pointer 
     
    5963} malloc_data_t; 
    6064 
     65#ifdef __GLIBC__ 
     66static void *umem_malloc_hook(size_t size_arg, const void *caller) 
     67#else 
    6168void * 
    6269malloc(size_t size_arg) 
     70#endif 
    6371{ 
    6472#ifdef _LP64 
     
    121129} 
    122130 
     131#ifndef __GLIBC__ 
    123132void * 
    124133calloc(size_t nelem, size_t elsize) 
     
    139148        return (retval); 
    140149} 
     150#endif 
    141151 
    142152/* 
     
    147157 */ 
    148158 
     159#ifdef __GLIBC__ 
     160static void *umem_memalign_hook(size_t size_arg, size_t align, const void *caller) 
     161#else 
    149162void * 
    150163memalign(size_t align, size_t size_arg) 
     164#endif 
    151165{ 
    152166        size_t size; 
     
    227241} 
    228242 
     243#ifndef __GLIBC__ 
    229244void * 
    230245valloc(size_t size) 
     
    232247        return (memalign(pagesize, size)); 
    233248} 
     249#endif 
    234250 
    235251/* 
     
    377393} 
    378394 
     395#ifdef __GLIBC__ 
     396static void umem_free_hook(void *buf, const void *caller) 
     397#else 
    379398void 
    380399free(void *buf) 
     400#endif 
    381401{ 
    382402        if (buf == NULL) 
     
    389409} 
    390410 
     411#ifdef __GLIBC__ 
     412static void *umem_realloc_hook(void *buf_arg, size_t newsize, const void *caller) 
     413#else 
    391414void * 
    392415realloc(void *buf_arg, size_t newsize) 
     416#endif 
    393417{ 
    394418        size_t oldsize; 
     
    418442} 
    419443 
     444#ifdef __GLIBC__ 
     445static void __attribute__((constructor)) umem_malloc_init_hook(void) 
     446{ 
     447        if (__malloc_hook != umem_malloc_hook) { 
     448                umem_startup(NULL, 0, 0, NULL, NULL); 
     449                __malloc_hook = umem_malloc_hook; 
     450                __free_hook = umem_free_hook; 
     451                __realloc_hook = umem_realloc_hook; 
     452                __memalign_hook = umem_memalign_hook; 
     453        } 
     454} 
     455 
     456void (*__malloc_initialize_hook)(void) = umem_malloc_init_hook; 
     457 
     458#else 
    420459void __attribute__((constructor)) 
    421460__malloc_umem_init (void) 
    422461{ 
    423   umem_startup(NULL, 0, 0, NULL, NULL); 
    424 
     462        umem_startup(NULL, 0, 0, NULL, NULL); 
     463
     464#endif 
     465