]> git.saurik.com Git - apple/xnu.git/blobdiff - libsyscall/mach/exc_catcher_state_identity.c
xnu-6153.141.1.tar.gz
[apple/xnu.git] / libsyscall / mach / exc_catcher_state_identity.c
index b92f5892ee08cfb6fad482b5f3cf5a29c760c8aa..1ddaf8c65506247eaaa3b9a0c6dbbc9877135228 100644 (file)
@@ -2,7 +2,7 @@
  * Copyright (c) 1999-2010 Apple Inc. All rights reserved.
  *
  * @APPLE_OSREFERENCE_LICENSE_HEADER_START@
- * 
+ *
  * This file contains Original Code and/or Modifications of Original Code
  * as defined in and that are subject to the Apple Public Source License
  * Version 2.0 (the 'License'). You may not use this file except in
  * unlawful or unlicensed copies of an Apple operating system, or to
  * circumvent, violate, or enable the circumvention or violation of, any
  * terms of an Apple operating system software license agreement.
- * 
+ *
  * Please obtain a copy of the License at
  * http://www.opensource.apple.com/apsl/ and read it before using this file.
- * 
+ *
  * The Original Code and all software distributed under the License are
  * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
  * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
@@ -22,7 +22,7 @@
  * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
  * Please see the License for the specific language governing rights and
  * limitations under the License.
- * 
+ *
  * @APPLE_OSREFERENCE_LICENSE_HEADER_END@
  */
 /*
 #include <mach/message.h>
 #include <mach/exception.h>
 #include <mach/mig_errors.h>
-#include <dlfcn.h>
 
 #include "abort.h"
 #include "exc_catcher.h"
 
 __private_extern__ kern_return_t
 internal_catch_exception_raise_state_identity(
-        mach_port_t exception_port,
-        mach_port_t thread,
-        mach_port_t task,
-        exception_type_t exception,
-        exception_data_t code,
-        mach_msg_type_number_t codeCnt,
-        int *flavor,
-        thread_state_t old_state,
-        mach_msg_type_number_t old_stateCnt,
-        thread_state_t new_state,
-        mach_msg_type_number_t *new_stateCnt)
+       mach_port_t exception_port,
+       mach_port_t thread,
+       mach_port_t task,
+       exception_type_t exception,
+       exception_data_t code,
+       mach_msg_type_number_t codeCnt,
+       int *flavor,
+       thread_state_t old_state,
+       mach_msg_type_number_t old_stateCnt,
+       thread_state_t new_state,
+       mach_msg_type_number_t *new_stateCnt)
 {
 #if defined(__DYNAMIC__)
        static _libkernel_exec_raise_state_identity_t exc_raise_state_identity_func = (void*)-1;
-       
-       if (exc_raise_state_identity_func == ((void*)-1)) {
+
+       if (exc_raise_state_identity_func == ((void*)-1) && _dlsym) {
                exc_raise_state_identity_func = _dlsym(RTLD_DEFAULT, "catch_exception_raise_state_identity");
-       }       
+       }
        if (exc_raise_state_identity_func == 0) {
                /* The user hasn't defined catch_exception_raise in their binary */
                abort();
@@ -70,4 +69,3 @@ internal_catch_exception_raise_state_identity(
        return catch_exception_raise_state_identity(exception_port, thread, task, exception, code, codeCnt, flavor, old_state, old_stateCnt, new_state, new_stateCnt);
 #endif
 }
-