On 05/03/2013 11:11 AM, Simon Richter wrote: > Hi, > > I'm writing a small preload library to trace pthread_* calls, and am > running into a bit of a chicken-and-egg problem. > > In order to find the original function, I use dlsym(RTLD_NEXT, ...) to > look up the symbol on the first invocation. On Linux, this works find, > however on the Hurd and on FreeBSD, the libdl invokes pthread_once, > which is then dispatched into my preload library, where I still haven't > found the real function. > > This could be due to a difference in dlsym() implementation (so it is > sheer luck that it works on Linux), or a true behavioural difference > between platforms. > > In any case, I am wondering if it is actually possible to redirect the > pthread_* functions in this way, or if a different approach is required. > > LD_DEBUG=all output is attached for Linux (good) and FreeBSD (bad). > Program source[1] is also available.
You need to reduce the problem to something smaller otherwise nobody is going to look at your code. Can you produce a small self-contained test case that shows the expected versus observed behaviour? Cheers, Carlos.