[PATCH] D58417: [WebAssembly] MC: Handle aliases of aliases
Phabricator via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Fri Feb 22 13:41:20 PST 2019
This revision was automatically updated to reflect the committed changes.
Closed by commit rL354694: [WebAssembly] MC: Handle aliases of aliases (authored by sbc, committed by ).
Changed prior to commit:
https://reviews.llvm.org/D58417?vs=187672&id=187978#toc
Repository:
rL LLVM
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D58417/new/
https://reviews.llvm.org/D58417
Files:
llvm/trunk/lib/MC/WasmObjectWriter.cpp
llvm/trunk/test/MC/WebAssembly/function-alias.ll
Index: llvm/trunk/test/MC/WebAssembly/function-alias.ll
===================================================================
--- llvm/trunk/test/MC/WebAssembly/function-alias.ll
+++ llvm/trunk/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/trunk/lib/MC/WasmObjectWriter.cpp
===================================================================
--- llvm/trunk/lib/MC/WasmObjectWriter.cpp
+++ llvm/trunk/lib/MC/WasmObjectWriter.cpp
@@ -558,12 +558,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
@@ -1422,12 +1423,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.187978.patch
Type: text/x-patch
Size: 2257 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20190222/8c54a46c/attachment.bin>
More information about the llvm-commits
mailing list