mirror of
https://github.com/apple/swift.git
synced 2026-02-27 18:26:24 +01:00
Without scanning the main symbol stream, we get weird names for the Swift functions in the backtrace, because the compiler generates C++-style names for them. We actually want the mangled names, if possible, which only seem to be in the symbol stream, so scan that as well and use it to find mangled names. rdar://168454023
57 lines
1.6 KiB
Swift
57 lines
1.6 KiB
Swift
//===--- PDBFile+SymbolSource.swift - PDB support for Swift ---------------===//
|
|
//
|
|
// This source file is part of the Swift.org open source project
|
|
//
|
|
// Copyright (c) 2025 Apple Inc. and the Swift project authors
|
|
// Licensed under Apache License v2.0 with Runtime Library Exception
|
|
//
|
|
// See https://swift.org/LICENSE.txt for license information
|
|
// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
//
|
|
// Implements the SymbolSource protocol for PDB files.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
import Swift
|
|
|
|
@_spi(SymbolLocation)
|
|
extension PDBFile: SymbolSource {
|
|
public func lookupSymbol(
|
|
address: SymbolSource.Address
|
|
) -> SymbolSource.Symbol? {
|
|
guard let symbolLookup = lookup(address: UInt32(address)) else {
|
|
return nil
|
|
}
|
|
|
|
return SymbolSource.Symbol(name: symbolLookup.rawName ?? symbolLookup.name,
|
|
offset: Int(symbolLookup.offset),
|
|
size: nil)
|
|
}
|
|
|
|
public func sourceLocation(
|
|
for address: SymbolSource.Address
|
|
) -> SymbolSource.SourceLocation? {
|
|
guard let symbolLookup = lookup(address: UInt32(address)) else {
|
|
return nil
|
|
}
|
|
|
|
guard let location = symbolLookup.sourceLocation else {
|
|
return nil
|
|
}
|
|
|
|
return SymbolSource.SourceLocation(
|
|
path: location.filename,
|
|
lineRange: location.lineRange,
|
|
columnRange: location.columnRange
|
|
)
|
|
}
|
|
|
|
public func inlineCallSites(
|
|
at address: SymbolSource.Address
|
|
) -> Array<SymbolSource.CallSiteInfo> {
|
|
return []
|
|
}
|
|
}
|