1
- import Foundation
1
+ import Darwin
2
+ import SymbolicationShims
2
3
3
4
private let symbolicationPath =
4
5
" /System/Library/PrivateFrameworks/Symbolication.framework/Symbolication "
5
6
private let symbolicationHandle = dlopen ( symbolicationPath, RTLD_LAZY) !
6
7
7
8
private let coreSymbolicationPath =
8
- " /System/Library/PrivateFrameworks/Symbolication .framework/Symbolication "
9
+ " /System/Library/PrivateFrameworks/CoreSymbolication .framework/CoreSymbolication "
9
10
private let coreSymbolicationHandle = dlopen ( coreSymbolicationPath, RTLD_LAZY) !
10
11
11
12
private func symbol< T> ( _ handle: UnsafeMutableRawPointer , _ name: String ) -> T {
@@ -16,7 +17,7 @@ private func symbol<T>(_ handle: UnsafeMutableRawPointer, _ name: String) -> T {
16
17
}
17
18
18
19
enum Sym {
19
- static let pidFromHint : @convention ( c) ( NSString ) -> pid_t =
20
+ static let pidFromHint : @convention ( c) ( AnyObject ) -> pid_t =
20
21
symbol ( symbolicationHandle, " pidFromHint " )
21
22
static let CSSymbolicatorCreateWithTask : @convention ( c) ( task_t ) -> CSTypeRef =
22
23
symbol ( coreSymbolicationHandle, " CSSymbolicatorCreateWithTask " )
@@ -35,7 +36,7 @@ enum Sym {
35
36
symbol ( coreSymbolicationHandle, " CSSymbolGetMangledName " )
36
37
static let CSSymbolIsFunction : @convention ( c) ( CSTypeRef ) -> CBool =
37
38
symbol ( coreSymbolicationHandle, " CSSymbolIsFunction " )
38
- static let CSSymbolGetRange : @convention ( c) ( CSTypeRef ) -> NSRange =
39
+ static let CSSymbolGetRange : @convention ( c) ( CSTypeRef ) -> Range =
39
40
symbol ( coreSymbolicationHandle, " CSSymbolGetRange " )
40
41
static let task_start_peeking : @convention ( c) ( task_t ) -> kern_return_t =
41
42
symbol ( symbolicationHandle, " task_start_peeking " )
@@ -50,12 +51,25 @@ enum Sym {
50
51
symbol ( symbolicationHandle, " task_stop_peeking " )
51
52
}
52
53
53
- typealias CSTypeRef = NSRange
54
+ private enum CF {
55
+ static let path = " /System/Library/Frameworks/CoreFoundation.framework/CoreFoundation "
56
+ static let handle = dlopen ( path, RTLD_LAZY) !
57
+ static let stringCreateWithCString :
58
+ @convention ( c) ( UnsafeRawPointer ? , UnsafePointer < CChar > , UInt32 ) ->
59
+ Unmanaged < AnyObject > = symbol ( handle, " CFStringCreateWithCString " )
60
+ static let stringEncodingUTF8 : UInt32 = 0x08000100
61
+ }
62
+
54
63
typealias CSMachineTime = UInt64
55
64
let kCSNow = CSMachineTime ( Int64 . max) + 1
56
65
66
+ private func withNSString< T> ( _ str: String , call: ( AnyObject ) -> T ) -> T {
67
+ let cfstr = CF . stringCreateWithCString ( nil , str, CF . stringEncodingUTF8)
68
+ return call ( cfstr. takeRetainedValue ( ) )
69
+ }
70
+
57
71
func pidFromHint( _ hint: String ) -> pid_t ? {
58
- let result = Sym . pidFromHint ( hint as NSString )
72
+ let result = withNSString ( hint, call : Sym . pidFromHint )
59
73
return result == 0 ? nil : result
60
74
}
61
75
@@ -95,7 +109,7 @@ func CSSymbolIsFunction(_ sym: CSTypeRef) -> Bool {
95
109
return Sym . CSSymbolIsFunction ( sym)
96
110
}
97
111
98
- func CSSymbolGetRange( _ sym: CSTypeRef ) -> NSRange {
112
+ func CSSymbolGetRange( _ sym: CSTypeRef ) -> Range {
99
113
return Sym . CSSymbolGetRange ( sym)
100
114
}
101
115
0 commit comments