[PATCH] D41473: [WebAssmebly] Fix references to weak aliases

Phabricator via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Wed Dec 20 18:44:36 PST 2017


This revision was not accepted when it landed; it landed in state "Needs Review".
This revision was automatically updated to reflect the committed changes.
Closed by commit rL321244: [WebAssmebly] Fix references to weak aliases (authored by sbc, committed by ).

Repository:
  rL LLVM

https://reviews.llvm.org/D41473

Files:
  lld/trunk/test/wasm/weak-alias-overide.ll
  lld/trunk/wasm/InputFiles.cpp
  lld/trunk/wasm/SymbolTable.cpp


Index: lld/trunk/wasm/InputFiles.cpp
===================================================================
--- lld/trunk/wasm/InputFiles.cpp
+++ lld/trunk/wasm/InputFiles.cpp
@@ -198,13 +198,22 @@
       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) {
Index: lld/trunk/wasm/SymbolTable.cpp
===================================================================
--- lld/trunk/wasm/SymbolTable.cpp
+++ lld/trunk/wasm/SymbolTable.cpp
@@ -83,15 +83,7 @@
                                            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.
Index: lld/trunk/test/wasm/weak-alias-overide.ll
===================================================================
--- lld/trunk/test/wasm/weak-alias-overide.ll
+++ lld/trunk/test/wasm/weak-alias-overide.ll
@@ -79,7 +79,7 @@
 ; 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:
@@ -89,15 +89,15 @@
 ; 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:         Body:            41010B
 ; 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


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D41473.127816.patch
Type: text/x-patch
Size: 3482 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20171221/95b73dd2/attachment.bin>


More information about the llvm-commits mailing list