This is the mail archive of the java@gcc.gnu.org mailing list for the Java project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: problem when mapping malloc to GC_malloc.




On Thu, 18 Jun 2009, abhishek desai wrote:

Hi,

My JNI code includes redefinitions to the malloc, free and realloc
functions (shown below). These functions call GC_malloc, GC_free and
GC_realloc respectively. This is done so that any calls to the malloc
get allocated through the garbage collector. However this is failing
with segfault. Any clues why this does not work ?
I am using this code along with the libgcj library linked dynamically
with my application.

void *malloc(size_t size)
{
       return GC_malloc(size);
}

void *realloc(void *ptr, size_t size)
{
       return GC_realloc(ptr, size);
}

void free(void *ptr)
{
       GC_free(ptr);
}


regards abhishek

The collector itself supports a REDIRECT_MALLOC option that might get you closer. In general, this is very hard.

There are other functions (calloc, memalign, etc.) that you would also have to replace, so that their clients don't end up using the original malloc with GC_free. This is the easy part.

The hard part is that if you replace malloc, low level parts of the system will also end up using GC_malloc, and sometimes squirrel away pointers to the results in places the GC doesn't really know about. Recent versions of the GC (7.1+) contains some hacks to try to handle this on Linux. But the multithreaded versions still are sometimes not 100% robust. Gcj's version is unlikely to work in this mode, except possibly in single-threaded mode.

A real fix here would probably require some new hooks in glibc and the startup and libpthread code.

Hans


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]