[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
kalloc.c and recent gcc's
From: |
Alfred M. Szmidt |
Subject: |
kalloc.c and recent gcc's |
Date: |
Thu, 25 Aug 2005 13:21:03 +0200 |
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 <ams@gnu.org>
* 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"); */
- kalloc.c and recent gcc's,
Alfred M. Szmidt <=
- Re: kalloc.c and recent gcc's, Neal H. Walfield, 2005/08/28
- Re: kalloc.c and recent gcc's, Thomas Schwinge, 2005/08/28
- Re: kalloc.c and recent gcc's, Thomas Bushnell BSG, 2005/08/28
- Re: kalloc.c and recent gcc's, Thomas Schwinge, 2005/08/28
- Re: kalloc.c and recent gcc's, Alfred M. Szmidt, 2005/08/31
- Re: kalloc.c and recent gcc's, Thomas Schwinge, 2005/08/31
- Re: kalloc.c and recent gcc's, Alfred M. Szmidt, 2005/08/31