On 02/13/2014 05:06 PM, Woegerer, Paul wrote: > Let me put it this way ... > > If (hypothetically, just for the sake of the argument) we would have dlsym > with the following signature: > > void *dlsym(void *handle, const char *symbol, void *dummy); > > instead of: > > void *dlsym(void *handle, const char *symbol); > > and we would call it with: > > af.calloc = dlsym(RTLD_NEXT, "calloc", &cur_alloc); > > then (because of the aliasing of cur_alloc (caused by &cur_alloc) the > compiler would be forced to store the effects done on cur_alloc into memory > prior to calling dlsym.
Paul, I'm not convinced. Our compilation unit defines a bunch of functions with external linkage, which access cur_alloc. And since gcc has no way to rule out that the call to dlsym() will not cause any of these functions to be called, it mustn't make any assumptions about whether or not the first initialization of cur_alloc is redundant or not, and thus shouldn't elide it. (The above is in fact quite a frequent idiom in C/C++ framework libraries. Just imagine dlsym() being a call into a GUI (such as an event loop), and the functions in this CU unit as callbacks.) Stefan -- Stefan Seefeld CodeSourcery / Mentor Graphics http://www.mentor.com/embedded-software/ _______________________________________________ lttng-dev mailing list lttng-dev@lists.lttng.org http://lists.lttng.org/cgi-bin/mailman/listinfo/lttng-dev