Skip to content

Commit f829167

Browse files
committed
[swift-inspect] Fix errors when targeting 32-bit.
The C APIs are somewhat inconsistent about what kind of integers they use, so we need a bunch of conversions when targeting 32-bit.
1 parent c564ece commit f829167

File tree

5 files changed

+19
-14
lines changed

5 files changed

+19
-14
lines changed

tools/swift-inspect/Sources/swift-inspect/Backtrace.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ struct Backtrace {
2626
ptr: swift_reflection_ptr_t,
2727
inspector: Inspector
2828
) -> String {
29-
let symbol = inspector.getSymbol(address: ptr)
29+
let symbol = inspector.getSymbol(address: swift_addr_t(ptr))
3030
let name = symbol.name ?? "<unknown>"
3131
let library = symbol.library ?? "<unknown>"
3232
return "\(hex: ptr) (\(library)) \(name)"

tools/swift-inspect/Sources/swift-inspect/DumpConcurrency.swift

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -70,11 +70,11 @@ fileprivate class ConcurrencyDumper {
7070
inspector.enumerateMallocs { (pointer, size) in
7171
let metadata = swift_reflection_ptr_t(swift_reflection_metadataForObject(context, UInt(pointer)))
7272
if metadata == jobMetadata {
73-
result.jobs.append(pointer)
73+
result.jobs.append(swift_reflection_ptr_t(pointer))
7474
} else if metadata == taskMetadata {
75-
result.tasks.append(pointer)
75+
result.tasks.append(swift_reflection_ptr_t(pointer))
7676
} else if isActorMetadata(metadata) {
77-
result.actors.append(pointer)
77+
result.actors.append(swift_reflection_ptr_t(pointer))
7878
}
7979
}
8080

@@ -85,7 +85,7 @@ fileprivate class ConcurrencyDumper {
8585
var map: [swift_reflection_ptr_t: TaskInfo] = [:]
8686
var tasksToScan: Set<swift_reflection_ptr_t> = []
8787
tasksToScan.formUnion(heapInfo.tasks)
88-
tasksToScan.formUnion(threadCurrentTasks.map{ $0.currentTask }.filter{ $0 != 0 })
88+
tasksToScan.formUnion(threadCurrentTasks.map{ swift_reflection_ptr_t($0.currentTask) }.filter{ $0 != 0 })
8989

9090
while !tasksToScan.isEmpty {
9191
let taskToScan = tasksToScan.removeFirst()
@@ -205,7 +205,7 @@ fileprivate class ConcurrencyDumper {
205205
}
206206

207207
func symbolicateBacktracePointer(ptr: swift_reflection_ptr_t) -> String {
208-
guard let name = inspector.getSymbol(address: ptr).name else {
208+
guard let name = inspector.getSymbol(address: swift_addr_t(ptr)).name else {
209209
return "<\(hex: ptr)>"
210210
}
211211

@@ -286,10 +286,8 @@ fileprivate class ConcurrencyDumper {
286286
lastChilds.removeSubrange(level...)
287287
lastChilds.append(lastChild)
288288

289-
let nextEntry = i < hierarchy.count - 1 ? hierarchy[i + 1] : nil
290289
let prevEntry = i > 0 ? hierarchy[i - 1] : nil
291290

292-
let levelWillDecrease = level > (nextEntry?.level ?? -1)
293291
let levelDidIncrease = level > (prevEntry?.level ?? -1)
294292

295293
var prefix = ""
@@ -311,7 +309,7 @@ fileprivate class ConcurrencyDumper {
311309
firstLine = false
312310
}
313311

314-
let runJobSymbol = inspector.getSymbol(address: task.runJob)
312+
let runJobSymbol = inspector.getSymbol(address: swift_addr_t(task.runJob))
315313
let runJobLibrary = runJobSymbol.library ?? "<unknown>"
316314

317315
let symbolicatedBacktrace = task.asyncBacktrace.map(symbolicateBacktracePointer)
@@ -390,7 +388,7 @@ fileprivate class ConcurrencyDumper {
390388

391389
for (thread, task) in threadCurrentTasks {
392390
let taskStr: String
393-
if let info = tasks[task] {
391+
if let info = tasks[swift_reflection_ptr_t(task)] {
394392
taskStr = "\(hex: info.id)"
395393
} else {
396394
taskStr = "<unknown task \(hex: task)>"

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

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,12 @@ class Inspector {
5252
return 0
5353
}
5454

55+
#if os(tvOS) || os(watchOS)
56+
if tryForkCorpse {
57+
print("warning: unable to generate corpse on this OS")
58+
}
59+
return task
60+
#else
5561
if !tryForkCorpse {
5662
return task
5763
}
@@ -66,6 +72,7 @@ class Inspector {
6672
print("warning: unable to generate corpse for pid \(pid): \(machErrStr(kr))", to: &Std.err)
6773
return task
6874
}
75+
#endif
6976
}
7077

7178
func passContext() -> UnsafeMutableRawPointer {
@@ -129,7 +136,7 @@ class Inspector {
129136
}
130137

131138
// Deallocate the thread list.
132-
let ptr = vm_address_t(bitPattern: threadList)
139+
let ptr = vm_address_t(truncatingIfNeeded: Int(bitPattern: threadList))
133140
let size = vm_size_t(MemoryLayout<thread_t>.size) * vm_size_t(threadCount)
134141
vm_deallocate(mach_task_self_, ptr, size);
135142
}

tools/swift-inspect/Sources/swift-inspect/RemoteMirrorExtensions.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ extension SwiftReflectionContextRef {
6262
reader: (swift_addr_t, Int) -> UnsafeRawPointer?
6363
) -> UInt? {
6464
let size = MemoryLayout<UInt>.stride * 3
65-
guard let ptr = reader(array, size) else { return nil }
65+
guard let ptr = reader(swift_addr_t(array), size) else { return nil }
6666
let typedPtr = ptr.bindMemory(to: UInt.self, capacity: 3)
6767
// Array layout goes: metadata, refcount, count
6868
return typedPtr[2]

tools/swift-inspect/Sources/swift-inspect/main.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -100,9 +100,9 @@ func dumpArrays(
100100
guard metadata != 0 else { return }
101101
guard context.isAContiguousArray(metadata: metadata) else { return }
102102
let isClass = context.isAContiguousArrayOfClassElementType(metadata: metadata)
103-
let count = context.arrayCount(array: pointer, reader: inspector.read)
103+
let count = context.arrayCount(array: swift_reflection_ptr_t(pointer), reader: inspector.read)
104104
let countStr = count.map({ String($0) }) ?? "<unknown>"
105-
print("\(hex: pointer)\t\(size)\t\(countStr)\t\(isClass)")
105+
print("\(hex: swift_reflection_ptr_t(pointer))\t\(size)\t\(countStr)\t\(isClass)")
106106
})
107107
}
108108

0 commit comments

Comments
 (0)