Skip to content

Commit 86c9407

Browse files
committed
Add a utility function to Inspector to load the reflection metadata from
loaded images
1 parent 60f3d61 commit 86c9407

File tree

2 files changed

+29
-0
lines changed

2 files changed

+29
-0
lines changed

tools/swift-inspect/Sources/swift-inspect/Inspector.swift

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,15 @@ class Inspector {
3434
mach_port_deallocate(mach_task_self_, task)
3535
}
3636

37+
func addReflectionInfoFromLoadedImages(context: SwiftReflectionContextRef) {
38+
var numSuccessfulImages = 0
39+
CSSymbolicatorForeachSymbolOwnerAtTime(symbolicator, kCSNow, { owner in
40+
let address = CSSymbolOwnerGetBaseAddress(owner);
41+
let name = CSSymbolOwnerGetName(owner)
42+
let _ = swift_reflection_addImage(context, address)
43+
})
44+
}
45+
3746
static func findTask(_ pid: pid_t, tryForkCorpse: Bool) -> task_t {
3847
var task = task_t()
3948
var kr = task_for_pid(mach_task_self_, pid, &task)

tools/swift-inspect/Sources/swift-inspect/symbolication.swift

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,13 @@ enum Sym {
6969
symbol(symbolicationHandle, "task_peek_string")
7070
static let task_stop_peeking: @convention(c) (task_t) -> kern_return_t =
7171
symbol(symbolicationHandle, "task_stop_peeking")
72+
73+
static let CSSymbolicatorForeachSymbolOwnerAtTime:
74+
@convention(c) (CSSymbolicatorRef, CSMachineTime, @convention(block) (CSSymbolOwnerRef) -> Void) -> UInt =
75+
symbol(coreSymbolicationHandle, "CSSymbolicatorForeachSymbolOwnerAtTime")
76+
77+
static let CSSymbolOwnerGetBaseAddress: @convention(c) (CSSymbolOwnerRef) -> mach_vm_address_t =
78+
symbol(symbolicationHandle, "CSSymbolOwnerGetBaseAddress")
7279
}
7380

7481
typealias CSMachineTime = UInt64
@@ -145,6 +152,19 @@ func CSSymbolicatorGetSymbolWithAddressAtTime(
145152
Sym.CSSymbolicatorGetSymbolWithAddressAtTime(symbolicator, address, time)
146153
}
147154

155+
func CSSymbolicatorForeachSymbolOwnerAtTime(
156+
_ symbolicator: CSSymbolicatorRef,
157+
_ time: CSMachineTime,
158+
_ symbolIterator: (CSSymbolOwnerRef) -> Void
159+
) -> UInt {
160+
return Sym.CSSymbolicatorForeachSymbolOwnerAtTime(symbolicator, time,
161+
symbolIterator)
162+
}
163+
164+
func CSSymbolOwnerGetBaseAddress(_ symbolOwner: CSSymbolOwnerRef) -> mach_vm_address_t {
165+
return Sym.CSSymbolOwnerGetBaseAddress(symbolOwner)
166+
}
167+
148168
func task_start_peeking(_ task: task_t) -> Bool {
149169
let result = Sym.task_start_peeking(task)
150170
if result == KERN_SUCCESS {

0 commit comments

Comments
 (0)