I reported this a while back (it happens with gcc 4.x too): /usr/local/lib/gcc/i386-unknown-gnu0.3/3.4.0/../../../../i386-unknown-gnu0.3/li b/libcrt.a(malloc.o)(.text+0x10d8): In function `__libc_free': /export/ams/libc/malloc/malloc.c:3355: multiple definition of `free' kalloc.o(.text+0x334):../../hurd/mach-defpager/../serverboot/kalloc.c:259: first defined here /usr/local/lib/gcc/i386-unknown-gnu0.3/3.4.0/../../../../i386-unknown-gnu0.3/bi n/ld: Warning: size of symbol `free' changed from 5 in kalloc.o to 124 in /usr/local/lib/g\ cc/i386-unknown-gnu0.3/3.4.0/../../../../i386-unknown-gnu0.3/lib/libcrt.a(mallo c.o) /usr/local/lib/gcc/i386-unknown-gnu0.3/3.4.0/../../../../i386-unknown-gnu0.3/li b/libcrt.a(malloc.o)(.text+0x2740): In function `__libc_malloc': /export/ams/libc/malloc/malloc.c:3312: multiple definition of `malloc' kalloc.o(.text+0x328):../../hurd/mach-defpager/../serverboot/kalloc.c:254: first defined here /usr/local/lib/gcc/i386-unknown-gnu0.3/3.4.0/../../../../i386-unknown-gnu0.3/bi n/ld: Warning: size of symbol `malloc' changed from 9 in kalloc.o to 301 in /usr/local/lib\ /gcc/i386-unknown-gnu0.3/3.4.0/../../../../i386-unknown-gnu0.3/lib/libcrt.a(mal loc.o)
What about the following fix? This should fix things so that we don't use vanilla malloc/free, and only use our own versions. Index: serverboot/ChangeLog 2005-08-13 Alfred M. Szmidt <[EMAIL PROTECTED]> * kalloc.c: #include <malloc.h> (init_hook, malloc_hook, free_hook): New functions. (__malloc_initialize_hook): New variable. (malloc, free): Functions removed. --- serverboot/kalloc.c 04 Apr 1997 01:27:41 +0200 1.1 +++ serverboot/kalloc.c 13 Aug 2005 20:07:09 +0200 @@ -34,6 +34,14 @@ #include <mach.h> #include <cthreads.h> /* for spin locks */ +#include <malloc.h> /* for malloc_hook/free_hook */ + +void *init_hook (void); +void *malloc_hook (size_t size, const void *caller); +void free_hook (void *ptr, const void *caller); + +void (*__malloc_initialize_hook) (void) = (void *) init_hook; + #define DEBUG @@ -250,12 +258,21 @@ kfree( void *data, } } -void *malloc(vm_size_t size) +void * +init_hook (void) { - return (void *)kalloc(size); + __malloc_hook = malloc_hook; + __free_hook = free_hook; } -void free(void *addr) +void * +malloc_hook (size_t size, const void *caller) +{ + return (void *) kalloc ((vm_size_t) size); +} + +void +free_hook (void *ptr, const void *caller) { /* Just ignore harmless attempts at cleanliness. */ /* panic("free not implemented"); */ _______________________________________________ Bug-hurd mailing list Bug-hurd@gnu.org http://lists.gnu.org/mailman/listinfo/bug-hurd