Skip to content

Commit dfa3846

Browse files
committed
Fix to handle EXPORT_SYMBOL_FLAGS_FUNCTION_VARIANT
1 parent 607f652 commit dfa3846

File tree

3 files changed

+22
-3
lines changed

3 files changed

+22
-3
lines changed

Sources/MachOKit/Extension/TrieTreeProtocol+.swift

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,8 @@ extension TrieTreeProtocol where Content == ExportTrieNodeContent {
2828
ordinal: content.ordinal,
2929
importedName: content.importedName,
3030
stub: content.stub,
31-
resolverOffset: content.resolver
31+
resolverOffset: content.resolver,
32+
functionVariantTableIndex: content.functionVariantTableIndex
3233
)
3334
}
3435
}
@@ -48,7 +49,8 @@ extension TrieTreeProtocol where Content == ExportTrieNodeContent {
4849
ordinal: content.ordinal,
4950
importedName: content.importedName,
5051
stub: content.stub,
51-
resolverOffset: content.resolver
52+
resolverOffset: content.resolver,
53+
functionVariantTableIndex: content.functionVariantTableIndex
5254
)
5355
}
5456

@@ -67,7 +69,8 @@ extension TrieTreeProtocol where Content == ExportTrieNodeContent {
6769
ordinal: content.ordinal,
6870
importedName: content.importedName,
6971
stub: content.stub,
70-
resolverOffset: content.resolver
72+
resolverOffset: content.resolver,
73+
functionVariantTableIndex: content.functionVariantTableIndex
7174
)
7275
}
7376
}

Sources/MachOKit/Model/Export/ExportTrieEntry.swift

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@ public struct ExportTrieNodeContent {
1919
public var stub: UInt?
2020
public var resolver: UInt?
2121

22+
public var functionVariantTableIndex: UInt?
23+
2224
public var symbolOffset: UInt?
2325
}
2426

@@ -67,6 +69,18 @@ extension ExportTrieNodeContent: TrieNodeContent {
6769

6870
content.stub = stub
6971
content.resolver = resolver
72+
} else if flags.contains(.function_variant) {
73+
let (symbolOffset, ulebOffset) = basePointer
74+
.advanced(by: nextOffset)
75+
.readULEB128()
76+
nextOffset += ulebOffset
77+
let (functionVariantTableIndex, ulebOffset2) = basePointer
78+
.advanced(by: nextOffset)
79+
.readULEB128()
80+
nextOffset += ulebOffset2
81+
82+
content.symbolOffset = symbolOffset
83+
content.functionVariantTableIndex = functionVariantTableIndex
7084
} else {
7185
let (value, ulebOffset) = basePointer
7286
.advanced(by: nextOffset)

Sources/MachOKit/Model/ExportedSymbol.swift

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@ public struct ExportedSymbol {
2121

2222
public var stub: UInt?
2323
public var resolverOffset: UInt?
24+
25+
public var functionVariantTableIndex: UInt?
2426
}
2527

2628
extension ExportedSymbol {

0 commit comments

Comments
 (0)