In the GNU coreutils project, there was a discussion about a new test which uses a destructor in an *.so file loaded into program space via LD_PRELOAD:
However, the destructor is not run on OpenSuSE (nor on SLES10.x btw.), but works fine on other systems (e.g. Redhat).
This is Jim's commit: http://git.savannah.gnu.org/cgit/coreutils.git/commit/?id=b29db6767612cf70e9...
Attached is the relevant C code which intercepts the system calls getxattr() and lgetxattr(). The number of calls is counted and should be stored in a file "x" by the destructor print_call_count():
void __attribute__ ((destructor)) print_call_count (void);
Compile / link it:
$ gcc -fPIC -O2 -c k.c $ ld -G k.o -o k.so
$ LD_PRELOAD=./k.so ls --color=always -l .
Now, the file "x" should be created, but it isn't.
(How) are LD_PRELOADed destructors disabled on SuSE?
Ah, yes - I'm running this:
$ head -n 1 /etc/SuSE-release openSUSE 12.1 (x86_64) $ gcc --version | head -n 1 gcc (SUSE Linux) 4.6.2 $ uname -rvmspio Linux 3.1.9-1.4-desktop #1 SMP PREEMPT Fri Jan 27 08:55:10 UTC 2012 (efb5ff4) x86_64 x86_64 x86_64 GNU/Linux
Have a nice day, Berny