On Sunday, September 11 2016, Jan Kratochvil wrote: > On Sun, 11 Sep 2016 19:43:41 +0200, Sergio Durigan Junior wrote: >> Thanks for the patch. While it does fix the problem, I'd prefer a >> "compiler-agnostic" patch. The problem is that m1 and m2 (the two >> functions where probe 'two' is being defined) are exactly the same, so >> they get optimized by GCC's ICF pass. Since the contents of each >> function are irrelevant (as long as there's a probe 'two' inside them), >> I think declaring a dummy variable in one of the functions (probably >> volatile) would solve the issue. WDYT? > > The problem is there are tons of optimizations the compiler can do. If you > change anything there the compiler can do partial inlining, tail calls etc. Right, but if the compiler changes again then we'll have to go back and change the test too, which means that we'll end up losing anyway. > An unused dummy variable gets optimized out and so the problem remains. No if we mark it as volatile and use it as the argument for one of the probes. > A dummy variable would need to have __attribute__((used)) but (1) for a reason > unknown to me it does not work anyway > gdb.base/stap-probe.c:56:2: warning: 'used' attribute ignored [-Wattributes] > and besides that (2) __attribute__ is also not much "compiler-agnostic" IMO. > > My feeling from such cases is that if you try to outsmart the compiler the > next version of compiler will outsmart you some other way again. > > Sure there are many ways to workaround it, I have proposed one of them. > If you want a different one you can either submit a different patch or to be > more specific how I should code the patch. But given you should test your > idea first I guess it is more straighforward to just submit some other your > patch if you do not like the patch of mine. What do you think of the patch below? -- Sergio GPG key ID: 237A 54B1 0287 28BF 00EF 31F4 D0EB 7628 65FC 5E36 Please send encrypted e-mail if possible http://sergiodj.net/