dlopen(), atexit() crash on FreeBSD (testcase included)

Bert JW Regeer xistence at 0x58.com
Tue Jan 1 19:21:13 PST 2008


On Jan 1, 2008, at 19:41 , Tim Kientzle wrote:

>>>> Also, I'm wondering how other OSes handle this. I don't see this
>>>> code crash on Linux, contrary to its design as you say.
>>>
>>> I would be curious to see the results of running your
>>> sample program ...  on Linux to see whether it calls the
>>> registered exit function at dlclose time or never.
>> Linux pulls hidden atexit symbol into every binary that uses it ...  
>> Linux calls atexit entries at object unload time.
>> Solaris implements a libc callback from ld.so.1 ...
>> Solaris calls atexit callback when removing it too.
>
> Interesting.  So the consensus here (at least for Linux
> and Solaris, anyone know about Mac OS?) seems to be that
> atexit() can be called from a dynamically loaded library
> and that functions registered this way will be called
> at library unload time.
>
> And <sigh> FreeBSD doesn't implement this behavior.
>
> Tim Kientzle

Mac OS X (10.5.1)

$ gcc -dynamiclib -o atexitmod.so atexitmod.c
$ gcc -o datest datatest.c
$ ./datest
hello driver
now exiting
$ uname -a
Darwin WideLoad.lan 9.1.0 Darwin Kernel Version 9.1.0: Wed Oct 31  
17:46:22 PDT 2007; root:xnu-1228.0.2~1/RELEASE_I386 i386
$ gcc --version
i686-apple-darwin9-gcc-4.0.1 (GCC) 4.0.1 (Apple Inc. build 5465)

I guess Mac OS X calls atexit() somehow. I don't know the internals of  
Mac OS X, just wanted to post that the example given in this thread  
works as one would semi-expect, and thus possibly against the spec.

Bert JW Regeer



More information about the freebsd-hackers mailing list