]> git.saurik.com Git - apple/xnu.git/blobdiff - libkern/kmod/cplus_start.c
xnu-1456.1.26.tar.gz
[apple/xnu.git] / libkern / kmod / cplus_start.c
index 3bfb641988059991d39135a4e6eaeaa378b22f6c..8ae7a0193cb2c04f4c110e49e53e4e54920b7c34 100644 (file)
@@ -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@
  * 
     The linkline must look like this.
         *.o -lkmodc++ kmod_info.o -lkmod
  */
+#if __i386__ || __ppc__
 #include <mach/mach_types.h>
+#include <libkern/OSKextLib.h>
 
 asm(".constructors_used = 0");
 asm(".private_extern .constructors_used");
 
 // This global symbols will be defined by CreateInfo script's info.c file.
 extern kmod_start_func_t *_realmain;
+extern kmod_info_t KMOD_INFO_NAME;
 
 // Functions defined in libkern/c++/OSRuntime.cpp
 extern kern_return_t OSRuntimeInitializeCPP(kmod_info_t *ki, void *data);
+extern kern_return_t OSRuntimeFinalizeCPP(kmod_info_t *ki, void *data);
 
+/*********************************************************************
+*********************************************************************/
 __private_extern__ kern_return_t _start(kmod_info_t *ki, void *data)
 {
-    kern_return_t res = OSRuntimeInitializeCPP(ki, data);
+    kern_return_t result = OSRuntimeInitializeCPP(ki, data);
 
-    if (!res && _realmain)
-        res = (*_realmain)(ki, data);
+    if ((result == KERN_SUCCESS) && _realmain) {
+        result = (*_realmain)(ki, data);
 
-    return res;
+       /* If _realmain failed, tear down C++.
+        */
+        if (result != KERN_SUCCESS) {
+            (void)OSRuntimeFinalizeCPP(ki, data);
+        }
+    }
+
+    return result;
+}
+
+/*********************************************************************
+*********************************************************************/
+__private_extern__ const char * OSKextGetCurrentIdentifier(void)
+{
+    return KMOD_INFO_NAME.name;
+}
+
+/*********************************************************************
+*********************************************************************/
+__private_extern__ const char * OSKextGetCurrentVersionString(void)
+{
+    return KMOD_INFO_NAME.version;
+}
+
+/*********************************************************************
+*********************************************************************/
+__private_extern__ OSKextLoadTag OSKextGetCurrentLoadTag(void)
+{
+    return (OSKextLoadTag)KMOD_INFO_NAME.id;
 }
+#endif