Date: Wed, 2 Jan 2008 04:21:01 +0100 From: Bert JW Regeer <xistence@0x58.com> Cc: FreeBSD Hackers <freebsd-hackers@freebsd.org>, Markus Hoenicka <markus.hoenicka@mhoenicka.de> Subject: Re: dlopen(), atexit() crash on FreeBSD (testcase included) Message-ID: <C62492DB-A599-480C-859E-8D31C958E6CF@0x58.com> In-Reply-To: <477A896F.4050509@freebsd.org> References: <18297.6718.750894.937199@yeti.mininet> <20071231142620.39f2fbd2@kan.dnsalias.net> <18297.20596.564077.568365@yeti.mininet> <4779AD03.1060505@freebsd.org> <20080101104018.0fe51d67@kan.dnsalias.net> <477A896F.4050509@freebsd.org>
next in thread | previous in thread | raw e-mail | index | archive | help
--Apple-Mail-2--253954344 Content-Type: text/plain; charset=US-ASCII; format=flowed; delsp=yes Content-Transfer-Encoding: 7bit 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 --Apple-Mail-2--253954344--
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?C62492DB-A599-480C-859E-8D31C958E6CF>