summaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorSam Clegg <sbc@chromium.org>2017-12-21 02:30:38 +0000
committerSam Clegg <sbc@chromium.org>2017-12-21 02:30:38 +0000
commit5b1a4e4b7f144ef894f61c8bb45254154c85539a (patch)
treeea4aa795e838d6fd7283840f66088908c540cb8d /include
parent7f4699ff8ff6ddef8170ec3fbd232c56a74699c3 (diff)
[WebAssembly] Fix local references to weak aliases
When weak aliases are used with in same translation unit we need to be able to directly reference to alias and not just the thing it is aliases. We do this by defining both a wasm import and a wasm export in this case that result in a single Symbol. This change is a partial revert of rL314245. A corresponding lld change address the previous issues we had with this. See: https://github.com/WebAssembly/tool-conventions/issues/34 Differential Revision: https://reviews.llvm.org/D41472 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321242 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'include')
-rw-r--r--include/llvm/Object/Wasm.h21
1 files changed, 15 insertions, 6 deletions
diff --git a/include/llvm/Object/Wasm.h b/include/llvm/Object/Wasm.h
index 5bb1a3fca3d1..71951d83f3cc 100644
--- a/include/llvm/Object/Wasm.h
+++ b/include/llvm/Object/Wasm.h
@@ -43,9 +43,9 @@ public:
};
WasmSymbol(StringRef Name, SymbolType Type, uint32_t Section,
- uint32_t ElementIndex, uint32_t ImportIndex = 0)
+ uint32_t ElementIndex, uint32_t FunctionType = 0)
: Name(Name), Type(Type), Section(Section), ElementIndex(ElementIndex),
- ImportIndex(ImportIndex) {}
+ FunctionType(FunctionType) {}
StringRef Name;
SymbolType Type;
@@ -55,8 +55,18 @@ public:
// Index into either the function or global index space.
uint32_t ElementIndex;
- // For imports, the index into the import table
- uint32_t ImportIndex;
+ // For function, the type index
+ uint32_t FunctionType;
+
+ // Symbols can be both exported and imported (in the case of the weakly
+ // defined symbol). In this the import index is stored as AltIndex.
+ uint32_t AltIndex = 0;
+ bool HasAltIndex = false;
+
+ void setAltIndex(uint32_t Index) {
+ HasAltIndex = true;
+ AltIndex = Index;
+ }
bool isFunction() const {
return Type == WasmSymbol::SymbolType::FUNCTION_IMPORT ||
@@ -91,8 +101,7 @@ public:
void print(raw_ostream &Out) const {
Out << "Name=" << Name << ", Type=" << static_cast<int>(Type)
- << ", Flags=" << Flags << " ElemIndex=" << ElementIndex
- << ", ImportIndex=" << ImportIndex;
+ << ", Flags=" << Flags << " ElemIndex=" << ElementIndex;
}
#if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP)