On Tue, Oct 09, 2012 at 11:20:48AM -0700, Ian Lance Taylor wrote: > This patch to libbacktrace adds support for tracing through shared > libraries. The libraries are found by calling dl_iterate_phdr, when it > is available.
This functionality is definitely useful for meta-plugins like MELT (since melt.so is dlopen-ing things) > > This patch has some preliminary support for tracing through libaries > opened via dlopen, but there is no code for actually finding such > libraries. Perhaps you might use dladdr, on the few systems (notably GNU/Libc on Linux) which have it? >From man dlsym output: int dladdr(void *addr, Dl_info *info); The function dladdr() takes a function pointer and tries to resolve name and file where it is located. Information is stored in the Dl_info structure: typedef struct { const char *dli_fname; /* Pathname of shared object that contains address */ void *dli_fbase; /* Address at which shared object is loaded */ const char *dli_sname; /* Name of nearest symbol with address lower than addr */ void *dli_saddr; /* Exact address of symbol named in dli_sname */ } Dl_info; If no symbol matching addr could be found, then dli_sname and dli_saddr are set to NULL. dladdr() returns 0 on error, and nonzero on success. Or maybe I misunderstood libbacktrace and my comment is irrelevant. If it is the case, sorry for the noise. You could provide an extra API to register dlopen & dlclose to libbacktrace, if that helps you (of course, I would prefer avoiding that) Cheers -- Basile STARYNKEVITCH http://starynkevitch.net/Basile/ email: basile<at>starynkevitch<dot>net mobile: +33 6 8501 2359 8, rue de la Faiencerie, 92340 Bourg La Reine, France *** opinions {are only mines, sont seulement les miennes} ***