Related articles |
---|
How to link file with wrapper function vasvibhatt@gmail.com (Vasvi Kakkad) (2008-11-04) |
Re: How to link file with wrapper function dmaze@mit.edu (David Z Maze) (2008-11-04) |
Re: How to link file with wrapper function spam@altium.nl (2008-11-04) |
Re: How to link file with wrapper function bill@qswtools.com (Bill Cox) (2008-11-08) |
From: | David Z Maze <dmaze@mit.edu> |
Newsgroups: | comp.compilers |
Date: | Tue, 04 Nov 2008 10:11:41 -0500 |
Organization: | Massachusetts Institute of Technology |
References: | 08-11-018 |
Keywords: | GCC, linker, comment |
Posted-Date: | 04 Nov 2008 12:53:30 EST |
"Vasvi Kakkad" <vasvibhatt@gmail.com> writes:
> I have written wrapper functions for some predefined library functions in C.
> Can anybody help me how do I build the sourcecode of gcc with new
> functions and how to link my wrapper lib prior to standard lib? Do I
> to change makefile settings??
>
> Ex:
> 1) wrapper function file:
> wrapper.c
>
> void *malloc(size_t size) {
> -----
> return (malloc(size));
> -----
> }
This isn't strictly a compiler question, and it depends some on your
environment.
GNU libc on modern ELF-based Linux creates symbols named __libc_malloc
and the like for most functions, then exports "malloc" as a weak alias
for __libc_malloc. I've certainly written:
int close(int fd)
{
int res = __libc_close(fd);
fprintf(stderr, "close: %d ret %d\n", fd, res);
return res;
}
to debug runtime issues. Then I built this as a shared library and
loaded it using the Linux dynamic loader's LD_PRELOAD environment
variable.
_Linkers and Loaders_ (sect. 6.4) also mentions that "UNIX linkers and
many MS Windows linkers take an intermixed list of object files and
libraries on the command line...and process each in order" and mentions
that you could use this technique by including -lmymalloc before -lc on
the linker command line. I can't find any specific documentation of
this in the GNU ld manual, though.
--dzm
[That last technique is in the folklore. It won't work if libc has its internal
references already bound, but on a modern system I doubt that it will. -John]
Return to the
comp.compilers page.
Search the
comp.compilers archives again.