On 02/18/2012 02:06 PM, Jim Meyering wrote: >> > See the attached getxattr-speedup.log.gz - I added a "cat k.c" so that >> > you can check that I got your patch right. >> > It seems that GCC doesn't like our "__attribute__((destructor)) void p()". >> > It basically works in a standalone program, but not with LD_PRELOAD. >> > I didn't find much about this. Can this be a 64-bit issue? > > Is that an open-suse system? > I tried on an opensuse system with 2.6.37.6-0.11-desktop, > and since there were no getxattr calls at all, no wrapper > would run, and hence, your atexit call would never be reached. > I've added this comment at the top:
Yes, it is a OpenSuSE 12.1 with kernel 3.1.9-1.4-desktop. > # This test is skipped on systems that lack LD_PRELOAD support; that's fine. It doesn't lack LD_PRELOAD support, it simply doesn't call the destructor. > + # Similarly, on a system that lacks getxattr altogether, skipping it is > fine. > > and this new skip_ use below: > > test -f x || skip_ "internal test failure: maybe LD_PRELOAD doesn't work?" > > Which may mean this test will simply be skipped on your system. > But that is fine. Maybe, but why is LD_PRELOAD honoring the "__attribute__((destructor))", and on some systems not? > +ld -G k.o -lc -o k.so || framework_failure_ 'failed to invoke ld -G ...' I just added "-lc" for pulling in atexit(). It's not needed in your version. Have a nice day, Berny
