; CHECK-NEXT: - Offset:
; CHECK-NEXT: Opcode: I32_CONST
; CHECK-NEXT: Value: 1
-; CHECK-NEXT: Functions: [ 0 ]
+; CHECK-NEXT: Functions: [ 2 ]
; CHECK-NEXT: - Type: CODE
; CHECK-NEXT: Functions:
; CHECK-NEXT: - Locals:
; CHECK-NEXT: - Locals:
; CHECK-NEXT: Body: 41000B
; CHECK-NEXT: - Locals:
-; CHECK-NEXT: Body: 1080808080000B
+; CHECK-NEXT: Body: 1082808080000B
; CHECK-NEXT: - Locals:
; CHECK-NEXT: Body: 1080808080000B
; CHECK-NEXT: - Locals:
; CHECK-NEXT: - Locals:
; CHECK-NEXT: - Type: I32
; CHECK-NEXT: Count: 2
-; CHECK-NEXT: Body: 23808080800041106B220024808080800020004181808080003602081080808080002101200041106A24808080800020010B
+; CHECK-NEXT: Body: 23808080800041106B220024808080800020004181808080003602081082808080002101200041106A24808080800020010B
; CHECK-NEXT: - Type: CUSTOM
; CHECK-NEXT: Name: linking
; CHECK-NEXT: DataSize: 0
DEBUG(dbgs() << "Function: " << WasmSym.ElementIndex << " -> "
<< toString(*S) << "\n");
FunctionSymbols[WasmSym.ElementIndex] = S;
+ if (WasmSym.HasAltIndex)
+ FunctionSymbols[WasmSym.AltIndex] = S;
} else {
DEBUG(dbgs() << "Global: " << WasmSym.ElementIndex << " -> "
<< toString(*S) << "\n");
GlobalSymbols[WasmSym.ElementIndex] = S;
+ if (WasmSym.HasAltIndex)
+ GlobalSymbols[WasmSym.AltIndex] = S;
}
}
+ DEBUG(for (size_t I = 0; I < FunctionSymbols.size(); ++I)
+ assert(FunctionSymbols[I] != nullptr);
+ for (size_t I = 0; I < GlobalSymbols.size(); ++I)
+ assert(GlobalSymbols[I] != nullptr););
+
// Populate `TableSymbols` with all symbols that are called indirectly
uint32_t SegmentCount = WasmObj->elements().size();
if (SegmentCount) {
const WasmSymbol &Sym) {
DEBUG(dbgs() << "getFunctionSig: " << Sym.Name << "\n");
const WasmObjectFile *WasmObj = Obj.getWasmObj();
- uint32_t FunctionType;
- if (Obj.isImportedFunction(Sym.ElementIndex)) {
- const WasmImport &Import = WasmObj->imports()[Sym.ImportIndex];
- FunctionType = Import.SigIndex;
- } else {
- uint32_t FunctionIndex = Sym.ElementIndex - Obj.NumFunctionImports();
- FunctionType = WasmObj->functionTypes()[FunctionIndex];
- }
- return &WasmObj->types()[FunctionType];
+ return &WasmObj->types()[Sym.FunctionType];
}
// Check the type of new symbol matches that of the symbol is replacing.