+++ /dev/null
-//
-// simulate_crash
-// utilities
-//
-// Copyright (c) 2014 Apple Inc. All Rights Reserved.
-//
-
-#include "debugging.h"
-
-#include <dispatch/dispatch.h>
-#include <dlfcn.h>
-#include <mach/mach.h>
-
-/// Type to represent a boolean value.
-#if TARGET_OS_IPHONE && __LP64__
-typedef bool BOOL;
-#else
-typedef signed char BOOL;
-// BOOL is explicitly signed so @encode(BOOL) == "c" rather than "C"
-// even if -funsigned-char is used.
-#endif
-
-static void __security_simulatecrash_link(CFStringRef reason, uint32_t code)
-{
-#if !TARGET_IPHONE_SIMULATOR
- // Prototype defined in <CrashReporterSupport/CrashReporterSupport.h>, but objC only.
- // Soft linking here so we don't link unless we hit this.
- static BOOL (*__SimulateCrash)(pid_t pid, mach_exception_data_type_t exceptionCode, CFStringRef description);
-
- static dispatch_once_t once = 0;
- dispatch_once(&once, ^{
- void *image = dlopen("/System/Library/PrivateFrameworks/CrashReporterSupport.framework/CrashReporterSupport", RTLD_NOW);
- if (image)
- __SimulateCrash = dlsym(image, "SimulateCrash");
- else
- __SimulateCrash = NULL;
- });
-
- if (__SimulateCrash)
- __SimulateCrash(getpid(), code, reason);
- else
- secerror("SimulateCrash not available");
-#else
- secerror("SimulateCrash not available in iOS simulator");
-#endif
-}
-
-
-void __security_simulatecrash(CFStringRef reason, uint32_t code)
-{
- secerror("Simulating crash, reason: %@, code=%08x", reason, code);
- __security_simulatecrash_link(reason, code);
-}