Date: Tue, 17 Nov 1998 03:31:45 -0600 From: "SnowFox" <snowfox@newtoy.com> To: "Nate Williams" <nate@mt.sri.com>, <hackers@FreeBSD.ORG> Subject: Re: Wrapping a function Message-ID: <009301be120d$54045f00$4a2ca4cd@yellow.newtoy.com>
next in thread | raw e-mail | index | archive | help
There's no way to manage redundant symbols on the linker level, so unfortunately managing what you're after is going to require a complete rebuild when you want to remove the alloc thunker. The way I've done it has been... In a common header file for all .c files - #ifdef RAMTRACKER_SUPPORT #define malloc(x) my_alloc(x) #define free(x) my_free(x) ...etc #endif /* RAMTRACKER_SUPPORT */ Then, in my_alloc.c... #ifdef RAMTRACKER_SUPPORT /* make entire file go away if not defined */ #undef RAMTRACKER_SUPPORT /* don't override functions in the scope of this file */ #include "my_header.h" /* implement my_alloc, my_free, anything else */ #endif /* RAMTRACKER_SUPPORT */ Also of note, you can do this too... #define malloc(X) my_alloc((x), __FILE__, __LINE__) I'm sure you see the use there. ;) For my own C++ projects, I've written a suite of functions that tell me exactly what leaks where and watch for half a dozen obscure C++ memory management mistakes, dumping everything to a log file when the program terminates. If you want it so you can extract whatever's useful to you, drop me a note outside the list. -----Original Message----- From: Nate Williams <nate@mt.sri.com> To: hackers@FreeBSD.ORG <hackers@FreeBSD.ORG> Date: Monday, November 16, 1998 11:17 PM Subject: Wrapping a function >Does anyone have an easy way of 'wrapping' an already existing library >function so that any programs linked against your .o will call your >function, but so your function can call the 'real' library function? > >Example: > >my_malloc.c: > >void *malloc(size_t size) >{ > void *ret; > > printf("Calling malloc\n"); > ret = REALMALLOC(size); > printf("Leaving malloc\n"); > return ret; >} > >Ignoring all of the functions where there is loss of errno and such, are >they any good ideas? Note, the use of the dl* functions is explicitly >not allowed since those happen to be the functions I want to wrap in >this case. > >I'm at a loss here how to do this in C, so any good hacks are welcomed. > > >Nate > >To Unsubscribe: send mail to majordomo@FreeBSD.org >with "unsubscribe freebsd-hackers" in the body of the message > To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-hackers" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?009301be120d$54045f00$4a2ca4cd>