Date: Thu, 19 Oct 2006 15:02:49 -0700 From: Chuck Swiger <cswiger@mac.com> To: Leidecker@stud.uni-heidelberg.de Cc: freebsd-questions@freebsd.org Subject: Re: chunk size Message-ID: <B769B6BE-B5A0-4406-88AF-CAD3A9466D22@mac.com> In-Reply-To: <20061019182359.2jje9s9uok844k8w@wwwmail.urz.uni-heidelberg.de> References: <20061019182359.2jje9s9uok844k8w@wwwmail.urz.uni-heidelberg.de>
next in thread | previous in thread | raw e-mail | index | archive | help
On Oct 19, 2006, at 9:23 AM, Leidecker@stud.uni-heidelberg.de wrote: > FreeBSD uses another malloc alternative where the data and the > informations are splitted into two lists. The informations on sizes > are stored in a page direcory list. Entries of that list point to > their corresponding page with the data. My question is now, > regarding on the usage of gdb: How can I find out, of what size a > chunk is? Or, where do I find the page direcory list? The PHK malloc implementation in /usr/src/lib/libc/stdlib/malloc.c declares the page directory to be static: static struct pginfo **page_dir; ...either change this to make the symbol public, or perhaps add a _write in malloc_init() to output the location this structure: % cp /usr/src/lib/libc/stdlib/malloc.c /tmp/malloc.c Edit as you please, perhaps: --- /tmp/malloc.c~ Thu Oct 19 17:50:25 2006 +++ /tmp/malloc.c Thu Oct 19 17:50:30 2006 @@ -212,7 +212,7 @@ static u_long last_index; /* Pointer to page directory. Allocated "as if with" malloc */ -static struct pginfo **page_dir; +struct pginfo **page_dir; /* How many slots in the page directory */ static unsigned malloc_ninfo; % gcc -g -O -Wall -I/usr/src/lib/libc/include -shared -o /tmp/ malloc.so /tmp/malloc.c % LD_PRELOAD=/tmp/malloc.so gdb /tmp/test GNU gdb 6.1.1 [FreeBSD] Copyright 2004 Free Software Foundation, Inc. GDB is free software, covered by the GNU General Public License, and you are welcome to change it and/or distribute copies of it under certain conditions. Type "show copying" to see the conditions. There is absolutely no warranty for GDB. Type "show warranty" for details. This GDB was configured as "i386-marcel-freebsd"... (gdb) b malloc Function "malloc" not defined. Make breakpoint pending on future shared library load? (y or [n]) y Breakpoint 1 (malloc) pending. (gdb) run Starting program: /tmp/test Breakpoint 2 at 0x280793f6: file /tmp/malloc.c, line 1152. Pending breakpoint "malloc" resolved Breakpoint 2, malloc (size=10) at /tmp/malloc.c:1152 1152 return (pubrealloc(NULL, size, " in malloc():")); (gdb) p page_dir $1 = (struct pginfo **) 0x0 (gdb) n 1153 } (gdb) p page_dir $2 = (struct pginfo **) 0x2815d000 However, before you go this route, perhaps you ought to consider what problem you are actually trying to solve by doing this. :-) You could always build and utilize the Linux malloc implementation, or jemalloc from -CURRENT, or even one of the debugging-friendly mallocs such as Doug Lea's in /usr/ports/devel/libdlmalloc instead... -- -Chuck
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?B769B6BE-B5A0-4406-88AF-CAD3A9466D22>