X-Git-Url: https://git.saurik.com/apple/xnu.git/blobdiff_plain/8f6c56a50524aa785f7e596d52dddfb331e18961..e2d2fc5c71f7d145cba7267989251af45e3bb5ba:/libkern/kmod/cplus_stop.c?ds=inline diff --git a/libkern/kmod/cplus_stop.c b/libkern/kmod/cplus_stop.c index fffd04044..2b2bdc688 100644 --- a/libkern/kmod/cplus_stop.c +++ b/libkern/kmod/cplus_stop.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000 Apple Computer, Inc. All rights reserved. + * Copyright (c) 2000,2008-2009 Apple Computer, Inc. All rights reserved. * * @APPLE_OSREFERENCE_LICENSE_HEADER_START@ * @@ -42,6 +42,12 @@ The linkline must look like this. *.o -lkmodc++ kmod_info.o -lkmod */ + +/* The following preprocessor test must match exactly with the architectures + * that define the CONFIG_STATIC_CPPINIT config option. + */ +#if __i386__ + #include asm(".destructors_used = 0"); @@ -55,10 +61,16 @@ extern kmod_stop_func_t *_antimain; __private_extern__ kern_return_t _stop(kmod_info_t *ki, void *data) { - kern_return_t res = OSRuntimeFinalizeCPP(ki, data); - - if (!res && _antimain) - res = (*_antimain)(ki, data); + kern_return_t result = KERN_SUCCESS; - return res; + if (_antimain) { + result = (*_antimain)(ki, data); + } + + if (result == KERN_SUCCESS) { + result = OSRuntimeFinalizeCPP(ki, data); + } + + return result; } +#endif