[PATCH] D58417: [WebAssembly] MC: Handle aliases of aliases

Sam Clegg via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Wed Feb 20 13:58:47 PST 2019


sbc100 updated this revision to Diff 187672.
sbc100 added a comment.

- rebase onto D58472 <https://reviews.llvm.org/D58472>


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D58417/new/

https://reviews.llvm.org/D58417

Files:
  llvm/lib/MC/WasmObjectWriter.cpp
  llvm/test/MC/WebAssembly/function-alias.ll


Index: llvm/test/MC/WebAssembly/function-alias.ll
===================================================================
--- llvm/test/MC/WebAssembly/function-alias.ll
+++ llvm/test/MC/WebAssembly/function-alias.ll
@@ -5,8 +5,10 @@
 
 @foo = alias i8, bitcast (i8* ()* @func to i8*)
 @bar = alias i8* (), i8* ()* @func
+ at bar2 = alias i8* (), i8* ()* @bar
 
 define i8* @func() {
+  call i8* @bar2();
   ret i8* @foo;
 }
 
@@ -19,6 +21,13 @@
 ; CHECK-NEXT:     ElementIndex: 0x0
 ; CHECK-NEXT:   }
 ; CHECK-NEXT:   Symbol {
+; CHECK-NEXT:     Name: bar2
+; CHECK-NEXT:     Type: FUNCTION (0x0)
+; CHECK-NEXT:     Flags [ (0x0)
+; CHECK-NEXT:     ]
+; CHECK-NEXT:     ElementIndex: 0x0
+; CHECK-NEXT:   }
+; CHECK-NEXT:   Symbol {
 ; CHECK-NEXT:     Name: foo
 ; CHECK-NEXT:     Type: FUNCTION (0x0)
 ; CHECK-NEXT:     Flags [ (0x0)
Index: llvm/lib/MC/WasmObjectWriter.cpp
===================================================================
--- llvm/lib/MC/WasmObjectWriter.cpp
+++ llvm/lib/MC/WasmObjectWriter.cpp
@@ -557,12 +557,13 @@
 }
 
 static const MCSymbolWasm *resolveSymbol(const MCSymbolWasm &Symbol) {
-  if (Symbol.isVariable()) {
-    const MCExpr *Expr = Symbol.getVariableValue();
+  const MCSymbolWasm* Ret = &Symbol;
+  while (Ret->isVariable()) {
+    const MCExpr *Expr = Ret->getVariableValue();
     auto *Inner = cast<MCSymbolRefExpr>(Expr);
-    return cast<MCSymbolWasm>(&Inner->getSymbol());
+    Ret = cast<MCSymbolWasm>(&Inner->getSymbol());
   }
-  return &Symbol;
+  return Ret;
 }
 
 // Compute a value to write into the code at the location covered
@@ -1421,12 +1422,12 @@
     LLVM_DEBUG(dbgs() << WS.getName() << ": weak alias of '" << *ResolvedSym
                       << "'\n");
 
-    if (WS.isFunction()) {
+    if (ResolvedSym->isFunction()) {
       assert(WasmIndices.count(ResolvedSym) > 0);
       uint32_t WasmIndex = WasmIndices.find(ResolvedSym)->second;
       WasmIndices[&WS] = WasmIndex;
       LLVM_DEBUG(dbgs() << "  -> index:" << WasmIndex << "\n");
-    } else if (WS.isData()) {
+    } else if (ResolvedSym->isData()) {
       assert(DataLocations.count(ResolvedSym) > 0);
       const wasm::WasmDataReference &Ref =
           DataLocations.find(ResolvedSym)->second;


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D58417.187672.patch
Type: text/x-patch
Size: 2221 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20190220/5c2795d0/attachment.bin>


More information about the llvm-commits mailing list